複数種類のアーカイブページを出力する(その5)

「複数種類のアーカイブページを出力する」の最終回として、複数種類のテンプレートを使う歳の問題点と、その解決方法について解説します。

1.問題点

Movable Typeでは、基本的にはページを静的に生成する仕組みが取られています。
そのため、テンプレートに変更を加えたときなどには、ページをすべて作り直す(再構築する)ことが必要になります。
このような仕組みのため、テンプレートの数を増やすと、再構築の処理に時間がかかるようになります。

また、ファイルを静的に生成するため、その分だけサーバーのディスク容量を消費します。
テンプレートの数が多くなれば、ディスク容量もより多く消費することになります。

2.PHPによるモジュール化

上記の問題を解決する方法の1つは、「PHPによるモジュール化」です。
PHPには「include」という命令があり、HTMLファイルの中に、他のファイルの内容を組み込むことができます。
これを利用し、複数のテンプレートで共通する部分を一箇所にまとめて、include文で各テンプレートに組み込むようにします。
こうすれば、再構築時間を短縮でき、またディスク容量の消費も抑えることができます。
ただ、この方法を取ったとしても、エントリーの数が増えればそれに比例して再構築時間が伸びますし、ディスク容量の消費も増えます。

3.アーカイブページを動的生成する

もう1つの解決策は、ページを静的に生成せずに、アクセスがあるたびに動的に生成することです。
この方法なら、Blogを管理している側は、再構築を意識する必要がなくなります。
また、ページをハードディスクに保存しないで済みますので、ディスク容量の消費も少なくて済みます。

ただ、ページにアクセスされるたびに毎回動的に生成していると、Blogを見る人にとっては、ページが表示されるまでの時間がやや長くなるというデメリットがあります。
また、サーバーに負荷がかかるという問題もあります。
そこで、一度生成したページはキャッシュしておいて、Blogに何か変更が加わるまでは(エントリーが増えるなど)、同じページにアクセスされたら、キャッシュからページを読み込むようにすることが望ましいです。

4.MT標準のダイナミック・パブリッシングとPerl版ダイナミック・パブリッシング

Movable Typeでは、ページを動的に生成することを、「ダイナミック・パブリッシング」と呼びます。
MT 3.1x以降では、ダイナミック・パブリッシングの機能が追加されています。

ただし、MT標準のダイナミック・パブリッシングでは、MT本体とは違って、PHPでテンプレートを解析するという仕組みが使われています(MT本体はPerl)。
そのため、テンプレートタグを追加するプラグインや、テキストを整形するプラグインが使えなくなるというデメリットがあります。

プラグインを生かしつつ、ダイナミック・パブリッシングも行いたい場合は、拙作の「Perl版ダイナミック・パブリッシング」を使う方法があります。
Perl版ダイナミック・パブリッシングでは、MTの従来の再構築処理を使っていますので、ほとんどのプラグインが問題なく動作します。

ただし、現状のPerl版ダイナミック・パブリッシングでは、データをMySQLに保存していることが必要です。
一方、MT標準のダイナミック・パブリッシングでは、MT3.2でPostgreSQLとSQLiteもサポートされています。
そこで、Perl版ダイナミック・パブリッシングも、PostgreSQLとSQLiteに対応させたものを作っています。後日公開したいと思います。