Movable Typeバージョンアップ完了

▲ Canon EOS 20D
ここ数日の New York は雨続きということもあって自宅でこつこつと打ち込んでいたのが、ブログシステム、Movable Type のバージョンアップ作業。
といっても Movable Type を自前でインストールして、自前のブログシステムを使用しない人にとっては全く関係ない話なのだが、これも今後バージョンアップする際の僕自身のメモとして書き記しておくことにした。
New York Watch もすでにエントリー数が700を超え、最初の頃は感じなかった不満点が出てきた。
その最たるものが速度で、僕がエントリーを書いてパブリッシュすると数十秒かかることも珍しくなくなった。僕のブログを読んでくれる人もコメントを書いて送信すると、ネットワークコネクションがとぎれてしまったんじゃないかと思うくらい時間がかかるようになったのでご存じのことだろう。
というのもコメントでもエントリーでもちょっと更新しようと思うと、データベースを更新した後でインデックスページやら個々のエントリーやらいくつもの html ファイルを作りあげたり更新するために非常に時間がかかるようになったのだ ( つまり毎回静的にファイルを生成しており、その度に700を超えるエントリー分のデータベースにアクセスする必要があった )。
もちろん Movable Type ではそのことも考慮して、ファイルを動的に生成させる仕組みも用意されている。つまりエントリーを登録したり、コメントが追加されたときにもデータベースに保存するだけでファイルを生成しないことで更新にかかる時間を短縮するわけだ。その代わりウェブサイトがアクセスされるとその度に表示するための html を生成することになるため、サーバに対する負担は高くなる。けれどもインデックスファイルなど頻繁にアクセスされるファイルは静的に作成しておくことで、バランスを取ることができる。
幸いこの機能は僕が使用していたバージョンでも使えるということだったので試してみたのだが、それほど目に見えて速いというほどパフォーマンスが向上することもなく、加えてコメントが新しいものから旧いものへの順番でしか表示できないなど不具合も報告されていた。
調べてみると最新のバージョンである 3.2 では不具合も修正されているということがわかり、それならばとシステムを入れ替えることにした。
それまで使用していたデータベースをエクスポートし、新しくインストールした Movable Type にインポートしてやれば移行作業自体は終わりなのでそれほど手間はかからない。以前にもやっているのでだいたい手順も覚えている。
けれどもそこから面倒なのはインストールしたプラグインソフトやら僕が改造したスクリプトの移行である。新旧 Movable Type の仕様の違いからそれまで動いていた機能が動かなくなったりするのだ。それらをいちいち手動で修正し、テストを繰り返していたらあっという間に数日かかってしまった。
具体的に機能追加や改造をしているのは、サイドバーのカレンダー表示、アクセスカウンター追加、最近のコメントのツリー表示、最新のトラックバック表示などであり、またリストをツリー上に表示するためのプラグインもインストールされている。そのほかにもスタイルシートを大幅に書き換え、表示されるフォントやレイアウトもオリジナルとはだいぶ異なっている。
スタイルシートは特にバージョン間で大きく変更されているために、画面のマージンやパディングの値を変えるたびに、画面で確認するなどだいぶ手間がかかった部分である。
それまではテンポラリの URL でテストをしていたのだがどうやらほとんど以前のものと変わらぬ見栄えになったことから、これまで使っている New York Watch と同じ場所にブログが展開されるように設定を変え、再構築。これで移行は完了である。
もし 「 以前と変わったことに気がつかなかった 」 と言う人がいればそれはうまくスムーズに移行が完了した、ということであるがよくアクセスしてくれている人だったらちょっとした違いに気がついたかもしれない。
たとえばエントリーの中で 「 以前にここで紹介した 」 などという記述があり、そのブログエントリーへのリンクがあるのだがこれをクリックすると、以前静的に生成された html ファイルへジャンプする。ところがスタイルシートの互換性が無いために、旧い html ファイルは画面が乱れて見える ( フォントサイズの指定も違っている )。
せっかく動的にファイルが生成される方法を選んだのだから、過去の html ファイルを削除してしまえばいいのに、と言われるかもしれない。実は今回からファイルの拡張子も php 化のために html から php に変えている。そのため新しいファイルではリンク先の拡張子も php になっていないと正しい画面が表示されない。つまり各エントリーの中で過去のエントリーへリンクしている場合に、html と記述されている箇所をを全て php に変えてサイトをリビルドさせなくてはいけないのだ。
実はこれはかなり大変な作業である。いったいどのエントリーが他のエントリーへリンクを張っているかを調べる手段は用意されていないから、一つずつ目視で確認しなくてはならない。それと簡単に html を消せない事情は、サーチエンジンが覚えているリンク情報のこともある。
サーチエンジンがヒットしたキーワードに基づいてエントリーを表示させようと思ってもすでに html から php へファイル名が変わっているために、「 Not found 」 というエラーが表示されることになるのである。
困ったな、と思って google で探してみるとやはり同じような問題に遭遇した人がいて、すでに解決策が取り上げられていた。
具体的にはスクリプトを一本用意して、.htaccess というアクセス制御のファイルに html から php へ自動的にリダイレクトするよう、書き加えるのである。
今回そこまでテストする時間がなかったため、その機能追加は後回しにすることにした。それで過去のエントリーへのリンクをたどると画面レイアウトが崩れて見えるのである。これは時間があるときに対処することにしよう。
あとは小さな事だが、個々のエントリーを表示させるとこれまで表示されていた 「 そのブログエントリーが投稿された日時 」 タイトルバーが表示されなくなった。
どうやら 個別アーカイブで MTEntries を使わない方法に書き換えられたため、そのタグの中でしか使用できなかった MTDateHeader が使えなくなってしまったのだ。そのせいでバナーと本文がつながっているようで、間延びしているように見える。これについても時間があるときにテンプレート書き換えに再挑戦してみることにしよう。
さてつらつらと書いてきたが、移行作業が終わり、早速コメントの投稿テストをしてみたところ、どうやら少しばかり速くなった気がする。何より動的ファイル生成にしたことでサーバ上の使用ファイルサイズも減ることとなった。しばらくは旧バージョンが生成した html ファイルも残存するが、いずれこれも不要になるので、さらにサーバ使用量は少なくなりそうで、良かった良かった。

▲ Canon EOS 20D
さて明日からは通常に戻り、これまで通りのブログを書くことにしよう。皆さん、これからも New York Watch をどうぞよろしく。
コメント