mt-rebuild.plをウェブサイトの再構築にも対応させる

先日、mixiで「mt-rebuild.plで再構築がうまくいかない」という質問があがっていました。
mt-rebuild.plのソースを見たところ、ウェブサイトのことが考慮されておらず、それが原因でした。
そこで、mt-rebuild.plをウェブサイトの再構築に対応させる方法を紹介します。

1.mt-rebuld.plについて

mt-rebuild.plは、Timothy Appnel氏が作ったスクリプトで、Movable Typeのブログを様々な形で再構築する働きをします。
基本的な使い方は以下の通りです。

  • mt-rebuild.plをMovable Typeのディレクトリに入れます。
  • ターミナルを起動し、Movable Typeのディレクトリに移動します。
  • 「perl ./mt-rebuild.pl (オプション)」と入力します。

オプションはいくつか指定することができます。
例えば、「perl ./mt-rebuildpl -all」とすると、すべてのブログを再構築することができます。
詳しい使い方は、ドキュメントのページをご参照ください。

また、mt-rebuild.plをcronで定期的に実行するように設定することもできます。
ブログ全体を最新の状態に保つために、mt-rebuild.plをcronで定期的に実行している方も、結構いるようです。

2.mt-rebuild.plをウェブサイトに対応させる

mt-rebuild.plは古いスクリプトです。
現在配布されているバージョンは0.2ですが、そのソースをみると「Copyright 2003」とあります。

その頃のMovable Typeには、ウェブサイトの機能はありませんでした。
そのため、「mt-rebuild.pl -all」として全体の再構築をしようとしても、ウェブサイトが再構築されないという現象が起こります。

「mt-rebuild.pl -all」でウェブサイトも再構築できるようにするには、mt-rebuid.plの67行目を以下のように書き換えます。

書き換え前

my $iter = MT::Blog->load_iter;

書き換え後

my $iter = MT::Blog->load_iter({ class => '*' });

3.他にも不十分な点がある

mt-rebuild.plには、ウェブサイトに対応していなかったこと以外にも、現在のMovable Typeで使うには不十分な点があります。
以下のようなことができません。

  • あるウェブサイト(およびその配下のブログ)だけを再構築することができない。
  • 「-archive_type=XXX」のオプションで、Movable Type 4以降で追加されたアーカイブ(カテゴリ年別など)を再構築することができない。
  • 「-template=XXX」のオプションでインデックステンプレートを再構築する際に、再構築するテンプレートを識別子で指定することができない。

余裕ができれば、これらに対応する方法も紹介するかも知れません。