「Programming」カテゴリーアーカイブ

WordPress 3.1とJetpack

WordPressを3.1にアップグレードしました。

今回もいつも通りに自動更新。これまで自動更新で何のトラブルもなかったのですが、今回初めて一発ではうまくいきませんでした。「データベースをアップグレードしています」で表示が止まったまま全然先に進まなかったのです。本来なら「WordPressの更新を完了しました」の表示が出て終了のはずなのですが。

しばらくはサイトも管理者ページもメンテナンス中の表示が出て全くどうしようもなかったのですが、ある程度放置した後に管理者ページに再アクセスしてみると、「データベースの更新をしてください」という表示が出ました。指示通りボタンを押してデータベースの更新を行うといつもの管理者ページに移動しました。使用中のバージョンの表示はきちんと3.1になっているものの、画面上部に正しく更新されていないとかなんとかいうエラーメッセージがでています(スクリーンショットを取っておけば良かったと後悔)。

試しにもう一度自動更新を行ってみると、今度はすんなりと更新が進み、エラーメッセージも消えて無事更新完了。

さて、3.1の新機能ですが、やはり目立つのは管理バーでしょうか。最初は必要ないかなと思っていたのですが、使ってみると意外と便利。このブログではテーマ内にログインとか管理者ページへのリンクとか表示していないので、サイトと管理画面を行き来するのに使ってます。

更新と同時にJetpackプラグインも導入しました。レンタルブログであるWordPress.comのいくつかの機能を、自分でホスティングサービスにインストールしたWordPressでも利用できるようにするプラグインで、以下の解説が詳しいです。

WordPress.com の便利機能をインストール版に! Jetpack を導入してみた | Odysseygate.com

私が実際に使っている機能は少しだけですが、結構気に入ってます。

WordPress.com Statsは以前から単独のプラグインで使用していました。WordPress.comのサイト統計情報の表示はずいぶん前に脱Flash化・棒グラフ化され、早くプラグイン版にもにも適用されないかと待っていたのですが、現在まで反映されず(iPhone/iPadからだとFlashは見れませんから)。Jetpackの登場でやっと解決です。

Gravater Hovercardもなかなか面白いですね。

Sharedaddyは使ってみようかと思いましたがやっぱりやめました。以前使っていて現在は外しているツイートボタンの、カウント数の非整合性がやはり気になるので。

Jetpackで気になるのは、個別の機能のオン・オフがちょっと分かりにくいのと、管理画面左のメニューでサイト統計情報へのリンクがダッシュボードの下からJetpackの下へ移動したため1クリック多く必要になったことでしょうか。今後どのような機能が追加されるか楽しみです(評価機能、アンケートあたりでしょうか)。

ツイートボタン

Twitter公式のツイートボタンができたということで、早速このブログにも設置してみました。各投稿の最後にある青いボタンがそれです。該投稿について簡単にTwitterでつぶやくことができます。

同様な機能を提供するプラグインはたくさんあります。Twitterへの通知に使っているプラグインSimple Tweetでも可能です。正直そちらのほうが今は使い勝手も良いのですが、「公式」というのと今後への期待料込みで、公式のボタンを設置してみました。

設置方法は、Twitterのツイートボタンページにアクセスして、デザイン等を選択した後、表示されているコードをブログに貼付けるだけ。WordPressの場合、使用しているテーマの該当箇所に貼付けることになりますが、そのうちプラグインで簡単に設置できるようになるでしょう。

デフォルトではボタンが表示されているページのURLとタイトルがツイート内に含まれることになります。WordPressのシングルページに設置する場合にはそれで全く問題ありませんが、インデックスページやアーカイブページに設置したい場合には、上記ページで表示されるコードを各テンプレートファイルのループ内に記述しただけでは困ったことになります。表示される複数の投稿のツイートボタンは、どれを押しても表示されているページのURLとタイトルをツイート内に含むことになってしまいます。思い通りの動作(各投稿のURLとタイトルをツイートに含める)にするには、ループ内に記述するコードを例えば以下のようにしてやれば良いです。

<a href="http://twitter.com/share"
    data-url="<?php the_permalink(); ?>"
    data-text="<?php the_title(); ?>"
    data-count="horizontal"
    data-lang="ja">Tweet</a>
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>

トップページやアーカイブページでは投稿の全文ではなく抜粋を表示している場合、ツイートボタンを表示するのは個別ページだけで良いでしょう。しかし、このブログのように全文を表示している場合、読者は個別ページに行かずにトップページだけを読むことの方が多いと思われますから、こうした細工をしてみました。

もう一つ注意点があります。ボタンの横または上にツイート数のカウントを表示することができ、この吹き出しをクリックするとTwitterのリアルタイム検索の結果に飛ぶようになっています。カウントが0以外になっているのに、クリックすると表示されるページでは0件になっている場合があります(投稿日現在、このブログではすべてこうなります)。ツイート数を取得する際は短縮URLでツイートされたものもカウントしているにも関わらず、リアルタイム検索では短縮URLでの投稿はヒットしないためだと考えられます。この辺は今後改善されることを期待します。

自動下書きの怪

WordPress 3.0から新規投稿を作成する段階で自動下書き (auto-draft) というステータスでデータベースに追加されるようになりました。これまでは下書き (draft) を保存する(タイトルを入力した時点での自動保存も含む)までデータベースには保存されず、そのためプレビューを行った時などに問題があったため、このような仕様に変更されたようです。

この自動下書きは、下書きとして保存されたり公開されたりした時点でそれぞれのステータスに書き換えられるため、リビジョンとは違ってデータベースのリソースを無駄に消費しないようになっています(それが嫌で私はリビジョン機能は切ってますし、自動保存の間隔も長くしています)。新規投稿を途中でやめてしまうと自動下書きがデータベースに残りますが、古くなった自動下書きは削除されるようになっています。

ところが、データベースを覗いてみると、常に自動下書きが1つ存在します。新規投稿を途中でキャンセルしたためのものではなく、phpMyAdminでデータベースから直接削除しても、直後にまた作成されています。新規投稿を作成する際にはこの自動下書きは使用されずにまた新たな自動下書きが作成されそして通常の投稿として保存されていくので、常にこの自動下書きがデータベースに残っています。ある程度時間が経つと先に述べたクリーンアップ機能により削除されたみたいですが、今度はまた別の自動下書きが作成されてそして使用されることもなくしばらく存在し続けます。

実害はないので放っていたのですが、やはりちょっと気になるので調べてみました。WordPress 3.0を新規インストールまたは3.0にアップグレード直後から、ダッシュボードにアクセスした時点でこのような自動下書きが作成されているようです。どうもダッシュボードが怪しいと思ってソースコードを読み解いていったところ、犯人はクイック投稿でした。ダッシュボードのクイック投稿フォームが表示される際に、データベース内に自動下書きが一つもない場合には作成し、これをクイック投稿用にキープしているみたいなのです。

投稿のIDを無駄に消費したりIDが必要以上に不連続になるのは嫌ですし(細かいこだわりですが)、クイック投稿は個人的に全く使用しないので、ダッシュボードのクイック投稿を表示しないように設定してみたところ、自動下書きが勝手に作成されないようになりました。もし私と同じように気になっている方がいましたら、お試しください。

テーマを更新

WordPressを最新バージョンにアップグレードしたのを機に、自作のテーマもアップグレードしました。WordPress本体は3週間前にアップグレード済みで、その前からテーマ改変に着手していたのですが、やっと実践投入できるようになりました。ローカル環境である程度はテスト済みですが、もし表示に不具合があるようでしたらお知らせくださると助かります。

WordPress 3.0からの新デフォルトテーマTwenty Tenを元にして作ってみました。これまでのものと比べてヘッダー画像がついたぐらいしか変わってないように見えるかもしれませんが、内部的にはかなりの変更を加えています。というか、以前と同じような見た目を保ちつつ、一から作り直しています。

メインマシンがMacになりましたので、Mac上のSafariでの見え方を基準に作ってWindows上のFirefoxとInternet Explorerでもチェックするという形で作成していった訳ですが、Macに慣れてしまうと、Windowsでの表示がとても汚く見えますね。もうWindowsには戻れないかも(仕事では使ってますけどね)。

Flash CS5に何が起こったか

先週書きましたFlash CS5における不具合ですが、なんとか解決しましたので、何が起こったのかとどうやって解決したのかを書き記しておきたいと思います。同様な現象に遭遇する人もいるかもしれませんので。

Flash CS5のスタートアップスクリーンが表示されない
Flash CS5のスタートアップスクリーンが表示されない

どのような現象が起こったのかというと、Flash CS5を起動すると、通常表示されるはずのスタートアップスクリーンが表示されないのです。昨年載せましたFlash CS3の起動画面と比較してみてください。さらには、新規ドキュメントを作成または既存のflaファイルを開き、Command+Returnキーでムービーをプレビューしようとしても、ムービーが表示されません。パブリッシュはできるのですが、これでは使い物になりません。

これらは同一の原因によるもので、要はFlashムービーがCS5からロードする事ができていないのです(Flash CS5のスタートアップスクリーンはFlashムービーで実装されています)。ブラウザ上およびプレーヤー単独では問題ありませんでした。Adobe CS5 Cleanerツールを使ってAdobe製品をすべて完全アンインストールし、新規管理者アカウントでFlash CS5のみをインストールしても状況は変わりませんでした。

解決のきっかけとなったのは、ムービープレビューの際に出力パネルに表示されたエラーメッセージでした。そこにはこう書かれていました。

URL 'file:////Volumes/Macintosh%20HD/Users/[account]/Library/Caches/TemporaryItems/名称未設定%2D1.swf' を開く処理のエラー

結論としては、私のMacに重複したマウントポイントが作成されているのが問題でした(リンク先は全く同一ではありませんが類似した問題に関するAppleのサポートページです)。Macintosh HD内の/Volumesフォルダを開くと(隠しフォルダなので、Finderのメニューバーから「移動」>「フォルダへ移動」と選んで直接入力してやる必要があります)、本来ならば「Macintosh HD」という名前のエイリアスが存在しなければなりません。しかし私の Mac では「Macintosh HD 1」という名前のエイリアス(リンク先は Macintosh HD)と、「Macintosh HD」という名前の実フォルダがありました。このフォルダの中にはアプリケーションフォルダのみが存在していました。この中に入っているアプリケーションは過去のある時点でインストールされていたもののみで、最近インストールしたものは含まれていませんでした。

つまり、過去に何らかの原因で「Macintosh HD」なるフォルダがVolumesフォルダ内に作成されてしまい、名前が重複するために本来作成されるはずのエイリアスの名前が最後に「1」が付いたものになってしまっていたのです。Flash CS5は Macintosh HDを参照する際に直接Macintosh HDを見に行かずにVolumesフォルダのマウントポイントを見に行っていたのですね。本来なら/Volumes/Macintosh HD/Usersフォルダを参照しようとするとエイリアスによって/Usersフォルダが参照されるのですが、/Volumesフォルダに「Macintosh HD」という名前のフォルダが存在してしまっているためにそのフォルダ内を参照してしまい、さらにその中にはUsersフォルダもFlash CS5の関連ファイルもありませんから、ムービーがロードできなかったわけです。

/Volumesフォルダ内のフォルダとエイリアスは移動も名前の変更もできなかったので、これらをゴミ箱に移動してしまい、その後再起動すると、正しいマウントポイント(エイリアス)が自動生成されました。この状態でFlash CS5を再インストールすると、問題なくスタートアップスクリーンが表示され、ムービーのプレビューもできるようになりました。原因を特定するのに苦労しましたが、なんとか解決する事ができてほっと一安心です。

CS5にアップグレードしたものの

先月末にAdobeのCS5シリーズが発売されました。その中からPhotoshop CS5とFlash Professional CS5を購入しました。

以前書いたように、これまで持っていたFlashはWindows版のCS4。Macでは使えませんし、プラットフォームをまたいでのアップグレードも基本的に不可です。しかし、Adobeストアで購入する場合は条件次第ではクロスプラットフォームでのアップグレードに対応していただけるということで、お願いしました。なにしろ、通常版を新規に購入するのとアップグレード版では3倍以上の価格差がありますからね。その条件というのは以下になります。

  1. Adobeストアでの購入、それも電話での注文に限る(店頭パッケージやWebでの購入ではだめ)
  2. クロスプラットフォームでのアップグレードは合計で5回まで
  3. インストール時に問題が起こる可能性もある(その際はカスタマーサービスのサポートを受けること)

さて、先週製品が到着しインストールをしたのですが、少々不具合があり、現在カスタマーサポートとやり取りをしている最中です。一見ちゃんとインストールできたように見えたのですが。詳細はまた解決した後に書きたいと思います。すでにAdobe製のアプリをすべて完全削除してFlashだけをクリーンインストールするなど考えられる対処はしてみたのですが、未だに解決に至っていません。Adobe製以外のアプリケーションとの干渉が原因かもしれませんが、まだMacも買ってから日が浅く必要不可欠なアプリしか入れてませんから、それらをアンインストールしないといけないぐらいならFlashの方を諦めます。

発売日に購入した(こちらは通常版)Photoshopの方は、Flashと違い今のところ問題なさそうです。まだ特に編集作業は行ってませんけど。とにかく起動が速いです。さすが64bitネイティブ対応(Flashはどうしても32bitになりますから、かなり起動が遅いです)。最近肝心の写真撮影の方があまりできてないので、もっと撮影に出かけなくてはなりません。そうでなければPhotshopを買った意味もないですからね。そうこうしているうちに梅雨がやってきちゃいますけど、今年は梅雨ならではの写真にももっとチャレンジしてみたいです。

Simple Tweetで更新通知

このブログの新規投稿をTwitterで通知するのにfriendfeedを利用することを以前書きました(再発見friendfeedの使い道)が、先月からWordPressのプラグインを使う方法に切り替えました。

friendfeedからTwitterへの通知は即時に行われるのですが、ブログの更新がfriendfeedに反映されるのに時間がかかり、結果Twitterへの通知が遅くなるというのがその理由です。数か月前まではそんなことはなく、ブログ投稿とほぼ同時に更新・通知されていたのですが。

試用するプラグインはwokamotoさん作のSimple Tweetです。Ver.1.2.1で予約投稿の更新通知にも対応したので、先月からこちらに乗り換えました。

今日リリースされたSimple Tweet 最新版 Ver.1.3.0からはTwitterのOAuth認証に対応しています。設定がちょっとややこしいですが、wokamotoさんの説明(Simple Tweet OAuth 設定)に従えば問題なく行えるはずです。アプリケーション情報の入力で何を書いたらいいか迷うところがあるかもしれないですが、私の設定例は以下の通りです。説明ページでハイライトされているところ以外は後で編集もできるので適当でいいかも。

  • Application Iconは指定しなくてもよい
  • Application Nameはブログの名前
  • Descriptionは適当に(Simple Tweetを使ってるよ、という感じで書いておきました)
  • Application Websiteはブログのアドレス
  • Organizationとサイトは自分の名前とブログのアドレス
  • Application TypeはClient
  • Default Access TypeはRead & Write
  • Use Twitter for loginはチェックしない
  • CAPTCHAの単語が読みにくければ読めるまで「2つの単語を更新」のリンクをクリック

私は技術屋さんではないのでOAuthが何なのかよく分かりませんが、どうやらこれまでの認証方式よりもセキュアなもののようです。friendfeedからTwitterへの投稿を設定するときにも出てきたやつですね。OAuthの解説は「ゼロから学ぶOAuth:第1回 OAuthとは?—OAuthの概念とOAuthでできること|gihyo.jp … 技術評論社」が分かりやすいと思いました。

OAuthは,以下の特徴を持つ「認可情報の委譲」のための仕様です。

  • あらかじめ信頼関係を構築したサービス間で
  • ユーザの同意のもとに
  • セキュアにユーザの権限を受け渡しする

サービス間で認可情報を受け渡せると,あるサービスがユーザの認可のもとで別のサービスの管理する情報の取得/追加/更新/削除などを行えるようになります。OAuthに対応したサービスでは,ユーザが外部サービスにパスワードを教えることなく,認可情報の委譲が可能です。また認可情報の適用範囲を指定したり,有効期限を設定することができるため,ユーザが外部サービスにすべての権限を渡すこと無く,自分が利用したいサービスに最低限必要な権限のみを委譲することができます。そのためBasic認証と比べて柔軟かつセキュアな運用が可能です。

たとえば,外部サービスに自身のGmailのアドレス帳へのアクセス権限を与えたい場合,そのサービスにGmailのメールアドレス&パスワードを教えてしまうと,それらの情報が他のGoogleサービスでも悪用される危険性があります。極端な例ですが,最悪の場合は外部サービスにパスワードを変更され,Gmailアカウントを完全に乗っ取られることもあるでしょう。しかし,OAuthではパスワードを渡すこと無く認可情報を委譲することができ,さらに委譲する権限をGmailアドレス帳の読込権限に限定したり有効期限を設けることで,委譲のリスクを最小限に抑えることができます。

ちなみに、twitterfeedからfriendfeedへの乗り換えの際に参考にしたIDEA*IDEAさんでも、私とほぼ同時期にfriendfeedからWordPressプラグインに乗り換えられた模様です(ブログの更新情報はFriendfeedじゃなくて、WordTwitでTwitterに流すことにした - IDEA*IDEA 〜 百式管理人のライフハックブログ)。こちらではWordTwitというプラグインを使われているようですが、Simple TweetはTwitterなどで作者のwokamotoさんから迅速なサポートを(日本語で)いただけるのがうれしいところです(感謝!)。

WP2.9とタグクラウド

WordPressの新バージョンがリリースされたので、いつものようにポチッと自動アップグレード。今のところ何の問題もなく動いているようです。アップグレードの前には念のためデータベースとファイルのバックアップをとっておきましょう。

(2009-12-24追記) wp-cronが働かなくなるバグがあるようです。このため、予約投稿やping送信、サイトマップの作成が行われないことがあります。wp-includes/http.phpをtrunkに入れ替えることで修正できます。

WP2.9からの新機能としてはゴミ箱だったりメディア周りだったりするわけですが、私には特に関係ないかなぁという感じです。(新機能について詳しくは公式サイトの記事:WordPress | 日本語 » WordPress 2.9をご覧ください。)

アップグレード後に自分のサイトにアクセスしてみて気付いたのですが、タグクラウド周りにも変更が加えられているようです。詳しい説明があまりないみたいなので、私が気付いたところを簡単にまとめてみようと思います。

タグクラウドでは、各タグのフォントサイズが使用頻度に応じて指定されています。これまではこのフォントサイズの計算はタグのカウントに線形比例する形で行われていました。コアファイル(wp-includes/category-template.php)でフォントサイズの計算式は、

$smallest + ( ( $count - $min_count ) * $font_step )

となっています。ここで、$countはこのタグの出現回数、$smallestは最小フォントサイズ、$min_countは全タグ中の最小出現回数で、$font_step

$font_step = ( $largest - $smallest ) / ( $max_count - $min_count );

	$smallest$min_countは前出、
	$largestは最大フォントサイズ、$max_countは全タグ中の最大出現回数
	変数・計算式は分かりやすくなるよう少し変更しています

で計算されます。

この計算方法は直観的で非常に簡単で分かりやすいのですが、問題もあります。1つまたは少数のタグの出現回数が突出して多い場合、それらが非常に大きなフォントで表示され、それ以外のタグは非常に小さくなってしまいます。私のブログの場合、アップグレード直前の状態では"KissX2"タグの使用回数が飛びぬけているため、このタグのみが最大サイズになり、その他のタグは使用回数に関わらずほぼ最小サイズ付近になってしまっていました。このような状態になってしまっているブログは多いと思われます。

WP2.9でも実はこの部分のコードは変わっていません。ただし、$countが以下のように変換されているのです。

foreach ( (array) $tags as $key => $tag ) {
	$real_counts[ $key ] = $tag->count;
	$counts[ $key ] = $topic_count_scale_callback($tag->count);
}

$countはコールバック関数により変換され、これまでの$count$real_countに格納されています。この$topic_count_scale_callbackはユーザーが任意の関数を指定できる引数ですが、デフォルトでは以下の関数になっています。

function default_topic_count_scale( $count ) {
	return round(log10($count + 1) * 100);
}

つまり対数関数で変換されており、少ない出現回数の部分を持ち上げる格好になっています。これにより、今までは小さいフォントサイズに埋もれていたタグが適切に(少なくとも私のブログでは)重みづけされて、より見やすいタグクラウドになりました。さらに、この変換が気に入らない場合は自分の好きな関数を使って重みづけの計算を変更することもできます。もし以前のままの計算方法が良ければ、テーマ中のwp_tag_cloud関数を呼び出す部分を以下のようにすればよいわけです(他の引数は省略しています)。

<?php
function my_topic_count_scale ( $count ) {
	return $count;
}
wp_tag_cloud('topic_count_scale_callback=my_topic_count_scale');
?>

以上、WP2.9におけるタグクラウドに関する変更点を調べてみましたが、他にもいろいろと細かな変更が加えられているみたいですので、気が向いたら(必要になったら)また調べてみようと思います。

再発見friendfeedの使い道

これまでブログの更新情報はtwitterfeedを介してtwitterに投稿してきたのですが、friendfeedを利用する方法に変更することにしました。ネタ元は「ブログの更新情報は『Friendfeed』で流すことにした - IDEA*IDEA 〜 百式管理人のライフハックブログ 〜」です。

IDEA*IDEAさんのページにあるように、twitterfeedは30分に一回しか更新されないため、更新状況が反映されるのが遅いのです。(しかもこの30分毎という設定値は比較的最近追加されたらしく、私のは1時間毎の設定になってました。)friendfeed経由の投稿をdeliciousのブックマーク追加で試してみたところ、即時にtwitterに投稿されました。すばらしい。

twitterfeedの方が、投稿に含む範囲とかprefixだとか、細かな設定ができるのに対し、friendfeedだとそういった設定は全くできません。でも投稿の即時性とシンプルで管理しやすいインターフェースは、乗り換えを検討する価値があると思います。副次的なメリットとしては、friendfeedのストリームに同じ記事が重複しないということもあります。(これまでだと、ブログ記事の更新そのものと、それを投稿したtwitterの更新とが両方表示されて重複していました。)

IDEA*IDEAさんの解説に従えば簡単に設定することができますが、唯一ひっかかったのが、その設定画面への行き方でした。「設定」メニューを開いても、最初は「Twitter投稿の優先設定」という項目は現れません。friendfeed上でtwitterにログイン(という表現でいいのだろうか?)しないと表示されないのです。したがって、まず最初に、friendfeed上部の「ツール」メニューから、「フィードを共有」の「Twitterに投稿」のリンクをクリック、または直接http://friendfeed.com/settings/postingにアクセスして、その画面からtwitterにログインしないといけません。その後はIDEA*IDEAさんの解説の通りに設定すればOKです。

これまでfriendfeedは登録しただけでいまいち使いきれていなかったのですが、ちょっと存在意義(!)がでてきました(本来の使用目的とは違うかも?!)。あとはphotohitoのユーザーページがRSSに対応してくれたら私的に完璧なライフストリームになるのですが(以前書いたようにflickrやフォト蔵への移行は今のところ考えてないので)。

WP2.8にポチッとアップグレード

WordPressの新バージョンがリリースされたので、アップグレードしました。

今は管理画面からボタン一つでアップグレードできるので楽ちんです。(ただし、PHPがセーフモードの場合はそのままでは自動アップグレードできず、update-core.phpがCGIモードで動くように設定する必要があります。)

WP2.7.1->2.8へアップグレード
WP2.7.1->2.8へアップグレード

日本語版のWordPressを使っている場合は、オリジナル英語版のリリースから日本語版のリリースまで若干のタイムラグがありますので、スクリーンショットのように日本語版へのアップグレードが利用可能になるまで待ちましょう。(一旦英語版にアップグレードして再度日本語版へアップグレードすることもできますが、面倒なので。)

アップグレードの前にはファイルとデータベースをバックアップしておきます。念のためバックアップからテストサイトを作成して、そちらでアップグレードをして問題がないことを確かめてから本サイトのアップグレードを実行しました。

さて、WP2.8ですが、2.7との違いはほとんど分かりません。プラグインもテーマもそのまま問題なく動いています。ただ、個人的にはプラグインの一覧画面がちょっと使いにくくなったと思います。テーマは自作ですし、ウィジェットも使っていないので、テーマ関係の変更は今のところ関係なし、って感じです。

(2009-06-14 追記) WP2.8への自動アップグレードの際にサーバー上のファイル(WP以外のファイルを含む)が削除されてしまう現象が報告されているようです(WordPress | 日本語 » 2.8への自動アップグレードを行う際の注意事項)。幸い、ここのアップグレードでは何の問題もありませんでしたが、原因が何なのか(サーバーの設定?プラグイン?バグ?)早く解明されることを望みます。