今後のMTへの要望(その1・再構築編)

MTQに「MT5.1への要望を出しましょう!」のトピックができ、多くのコメントで盛り上がってきました。
また、シックスアパートの金子氏からMovable Type 5.1で改善する予定の領域も示され、ウェブサイト/ブログの親子関係の向上や、カテゴリの並べ替え機能の標準装備などの新機能が検討されている模様です。

私もいろいろと要望したいことがありますが、今のところMTQでは1つのスレッドに多数の要望のコメントがぶら下がる形になっていてやや使いづらいので、とりあえず「MT5.1への要望のスレッドを、フォーラムカテゴリにして欲しい」ということを要望しておきました。
いずれその形になると(勝手ながら)思いますので、とりあえずはこちらで要望を書いて、後でMTQにリンクするようにしたいと思います。
今日は、Movable Typeの「最大の弱点」といえる「再構築」についての要望を書いてみます。

1.「再構築の重さ」で多くのユーザーを失った

Movable Typeから他の製品に移った人が、Movable Typeをやめた理由としてあげることとして、「再構築が重い」ということが非常に多いです。
記事数が少ないうちはまだしも、記事数が数百にもなれば、ブログ全体を再構築するのに数分かかるようになってしまい、「重い」と思うのはごく当たり前です。
特に、カスタマイズ大好きな人にとっては、テンプレートをいじるたびに再構築が必要なので、この仕様はかなり厳しいです。

再構築してあらかじめページのHTMLを出力しておけば、各ページにアクセスされた時の負荷が少ないというメリットはあります。
ただ、このメリットが生きるのは、アクセス数が極めて多いごく一部のサイトに限られます。
世の中の大半のサイトを作る上では、再構築はデメリットにしかならないと言えるでしょう。

2.MT標準のダイナミックパブリッシングは不十分

再構築の重さに対処する機能として、Movable Typeには「ダイナミックパブリッシング」があります。
他の動的CMSと同様に、ページにアクセスがあった時点で、動的にテンプレートを処理してページを生成する仕組みです。

ただ、Movable Type本体がPerlで作られているのに対し、ダイナミックパブリッシングはPHPで作られています。
多くのプラグインはダイナミックパブリッシングには対応していません。
また、テンプレート内にPHPを記述することもよくありますが、そのテンプレートをダイナミックパブリッシング化する際には、PHPの部分をSmartyの記法に書き換える必要があります。
これらのことから、既存のブログをダイナミックパブリッシングに変えるのは困難です。
実質的に、ダイナミックパブリッシングは使えないと言って良いでしょう。

3.Perlでのダイナミックパブリッシング

1つの解決策は、「ダイナミックパブリッシングをPerlで行う」ということです。
当方でそのためのプラグインを配布していますが、このプラグインと同等のことを、Movable Typeの標準機能(または標準のアドオン)として実装して欲しいです。

Perlでダイナミックパブリッシングを行えば、プラグインの互換性の問題がほぼ解決します。
ただ、ページにアクセスあった時にCGIが起動する形になり、ページの表示が重くなりますので、ページをキャッシュする機能は必須です。

4.ページにアクセスがあった時点で静的再構築

もう1つの策として、ページにアクセスがあった時点で、静的に再構築を行い、HTMLファイルを出力する方法があります。
こちらも、すでに野田さんがプラグインを作られていますので、それと同様の機能をMovable Typeの標準として実装して欲しいです。

また、この機能をより進めて、ページ毎に静的/動的を柔軟に選ぶことができるとより良いです。
例えば、「最近30日以内に書いたブログ記事は静的に再構築し、それより古いブログ記事はアクセスがあった時点で再構築する」など設定できるようにすれば、アクセス頻度が低いページは動的、高いページは静的といった使い分けができます。

さらに、アクセス解析と連動して、アクセス頻度を自動的に判断して、静的/動的を自動的に振り分けることができれば、かなり良いと思います。