このブログを書くのに使っているツール Movable Type を 4.0 (以降 MT 4.0) にバージョンアップした。 新しいバージョンはいろんなところが変わっているようなので、 MT 2.0 時代に作ったこのサイトのテンプレートやスタイルもリセットし、以下のような新しい試みもトライして心機一転という感じ。

  • 標準テンプレートの Cityscape SF (San Francisco) というのを選んでみた。 Vox で有名なテンプレートらしいが、Vox を使ったサイトを見たことなかったので新鮮でいい感じ。
  • 過去のログを見直してタグを付けてみた。 以前のレイアウトの関係で5つしかカテゴリを作ってなかったので、カテゴリ増やすよりタグ付けしたほうがそれっぽいかなぁと。 新しい見方ができることによって、これまで埋もれたエントリも見てもらえたら嬉しいなぁ。タグ付けに際し、過去のエントリを見返したがなんか懐かしい。 いろいろ書いたなぁ。 昔は1エントリも短かったなぁ。 最近はなんか無理して書いていたような気がした。 もうちょっと気軽に書かないと続かないね。
  • Feed を Feedburner 経由に変更。 ま、読者の方は特になにも変更はないはず。 デフォルトでは概要のみの配信だけど、全文配信の フィードも用意した。 全文配信好きの人は手動で登録してください。

Movable Type 4.0 の進化としては悪くないと思う。今回もWordPressと比較してみたんだけど、WordPress は相変わらず管理画面が好きになれない。 慣れなのかもしれないが Movable Type の画面の方が好きなので、このサイトではもう少し Movable Type を使っていこうと思う。

さ、ツールも新しくなったことだし、またがんばっていきましょう。

せっかくなので、移行記というか、ハマったところなどを残しておこうと思う。

データベースの文字コードを変える

まず、ブログの文字コードをShift-JIS から UTF-8 に変えた。 MT や MySQL のデフォルトが UTF-8 になったことと、これまであまり考えずに Shift-JIS を使っていたが、実は Shift-JIS は文字化けしやすい (このサイトにうまくまとめられている) など、問題があることを知ったというのが主な理由。

具体的には、今回 MT4 にアップグレードするにあたって新しい MySQL のデータベースを作ったので、そこへデータをインポートするときに変換をすることにした。 ところが、SQL の文字列がダブルクオートで囲まれていたため、見事に上のリンクにあるような2バイト目が原因の文字化けに遭遇。 手動で対応しなければいけなかった。 ふぅ。

無事データを UTF-8 に移行し、MT 4.0 のインストールを終え、サイトの管理画面にアクセスしてみると全ての日本語文字が ? に化けて表示された。 原因をググってみたら、

SQLSetNames 1
PublishCharset utf-8

という設定が mt-config.cgi の中に必要らしい。 今の MT はUTF-8 が標準らしいが、それなら SQLSetNames のデフォルト値は 1 にして欲しかったが過去のしがらみでもあるのだろうか。

テンプレートのリセット

MT4 ではテンプレートに記述できるタグが大きく変更されているらしい。 そろそろデザインも変えたかったので、一度テンプレートをリセットしてみることにした。

テンプレートのリセットは システムメニュー -> ブログ を選んで表示されるブログ一覧で、テンプレートをリセットしたいブログをチェックし、「アクション…」メニューの中から「テンプレートの初期化」を選ぶと行われる。 テンプレート編集画面でも初期化できるのだがテンプレートがカテゴリに分かれていて、同じことを何度もしないといけないのでオールリセットをするためにはシステムメニューから行ったほうがラクだろう。

テンプレートをリセットした後、再構築してもリンク切れがあったりとどうもうまくいかない。 原因はアーカイブマッピングにあったようだ。 アーカイブマッピングはこれまで 設定-公開 の中にまとめて用意されていたが、MT4.0 はアーカイブテンプレート毎にどのマッピングを行うか指定できるように変わっている。 この設定がうまく合っていないとページ間のリンクが切れてしまうようだ。

また、マッピングを行う書式も変更されている。 詳しい書式は、MT 4.0のドキュメントページ(英語)に書かれているので参考にしてもらいたい。

テンプレートの理解が大変
こうしてテンプレートをリセットしてみたけど、結構変わっていて理解するのが大変だった。 MT 4.0 ではテンプレート内部にif文による条件分岐を入れて、1つのテンプレートをいろんな用途で使いまわすようになったため、 MTEntries タグの意味もこれまでと変わってしまったようだ。

やりたかったのは、カテゴリごとのページでそのカテゴリに属しているエントリをリストしたかっただけなんだけど、なんだか一筋縄ではいかなかった。 結局全エントリリストを表示するループをまわし、カテゴリ名が一致したら表示というなんとも無駄な手で実現。 Snippet はこんな感じ。 ついでに、年ごとに区切りを入れるようにしている。

<MTIfArchiveType archive_type="Category">
<div class="archive-category archive">
<MTArchiveList archive_type="Individual">
<MTArchiveListHeader>
<div class="archive-content">
<ul class="archive-list">
</MTArchiveListHeader>
<mt:ifcategory name="$category">
<mt:SetVarBlock name="now"><$MTArchiveDate language="en" format="%Y"$></mt:SetVarBlock>
<mt:if name="last" ne="$now">
</ul>
<h2 class="archive-header"><mt:Var name="now"/>年のエントリ</h2>
<ul class="archive-list">
</mt:if>
<li class="archive-list-item"><$MTArchiveDate format="%Y.%m.%d"$>: <a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a></li>
<mt:SetVarBlock name="last"><$MTArchiveDate language="en" format="%Y"$></mt:SetVarBlock>
</mt:ifcategory>
<MTArchiveListFooter>
</ul>
</div>
</MTArchiveListFooter>
</MTArchiveList>
</div>
</MTIfArchiveType>

もっといい方法があったら教えてください。