世の中の趨勢はどうやらPHPのようです。PHP化すると何がメリットなのかというと、
きちんと対策するならば、.htaccessでリダイレクトする必要がありますが、そのあたりは、ブログ自由自在 Movable Type 上級カスタマイズ術に載ってますし、検索すれば解説しているサイトがいくつか見つかるでしょう。
なお、デメリットの3の表示速度ですが、これはPHPをどう利用するかによりますが、きちんと考えて設計すればさほどストレスなく表示させることは可能かな、というのが現在の意見です。
とりあえず、メインページの出力拡張子をhtmlから単純にphpに変え、設定画面の「アーカイブファイルの拡張子」を同じくhtmlからphpに変えれば、『なんちゃってPHP化』は完了です。
しかし、『なんちゃって』なだけあって、これだけではメリットはほとんど皆無です。
この状態で、FTPソフトを使ってサイトの情報を見ると、同じ名前のhtmlファイルの下にphpファイルが存在していることが分かります。また、中にはhtmlファイルだけしか存在しないものもあります。これらは、カテゴリーを変えたり、日付を変えて残ってしまったファイルなので、今後はこうした残骸ファイルを削除するように心掛けようという気持ちにはさせてくれるだけ、やった効果はあったのかもしれませんね(笑)
おそらく、私と同様にこのとき初めてMTのディレクトリ構造をきちんと見ることになるのではないでしょうか。日付アーカイブは年月フォルダに格納されているのは当然として、個別アーカイブまで年月フォルダに格納されていたのは意外な事実でした(よく考えれば当然のような気もしますが)。
また、カテゴリーアーカイブはカテゴリーフォルダに格納されているわけですが、フォルダ名に規則があることが分かります。つまり、英数字で構成されているわけで、日本語はカットされて作成されます(個別ファイル名も同様の命名規則になっていますね)。カテゴリー名が全部日本語だった場合にどうなるのかは、私はそうしてませんので不明です。
ディレクトリ構造がどうなっているのかが分かっても、すぐに役立つわけではないかもしれませんが、これから行なうPHPによる軽量化をする上で、知っておいた方がスムーズに行くと思いますので、このあたりで一通り構造を見ておくことをおすすめします。
さて、PHP化して、何も効果が出ないのは悲しいので、まずは簡単なことから始めましょう。
各ページに共通している部品をインデックス・テンプレートとしてしまう方法です。共通している部品の例としては、『バナー』『フッター』『カテゴリー一覧』『年月一覧』などが挙げられるでしょう。まず、『新しいインデックス・テンプレートを作る』のリンクを押し、テンプレートの名前と出力ファイル名を決めます。名前は分かりやすければ何でもいいので『01バナー』とかでもいいでしょう。出力ファイル名も任意ですが、英語表記の方が無難でしょう。拡張子も何でもありのようですが私は先の本に習って『inc』にしました。つまり、『banner.inc』としたわけです。
整理しますと
テンプレートの名前:01バナー
出力ファイル名:banner.inc
テンプレートの中身については、それまで使っていた部分をそのままカット&ペーストします。乱暴なようですが、大概はこれで動きます。
あとは、メインページやカテゴリーアーカイブなどの部品ファイルを読み込みたいページの適切な場所(つまり部品化するためにカットした場所)に
<?php include('<$MTBlogURL$>banner.inc');?>
別の方法として、
<?php readfile('絶対パス/banner.inc');?>
これで、再構築をすると、ケース・バイ・ケースですが、私の場合は10%程度ファイルサイズが小さくなった感じです。少なくとも効果はあったと言えるでしょう。
なお、参考にしたサイトは数多くありますが、中でもいち押しなサイトはBoycott Street 221Bです。
【2005/6/16追記】
Yahooで『MovableType 複数サイト』で検索してみたところ、このサイトが上位ヒットしました。ところが、リンク先はhtmlファイル(がーん)
ということで、htaccessは作らないつもりでしたが方針を変えました。面倒くさそうと思っていましたが、ブログ自由自在 Movable Type 上級カスタマイズ術に書いてあるとおりにやったら数分で完了しました。著作権法に引っかかるので内容のご紹介ができないのが残念ですが。いろいろ調べて時間を使うより、この本買っておいた方がいいです。
【2005/6/21追記】
hohohoさんのご指摘を受け、include関数よりもreadfile関数を利用した方がいいことが分かりました(include関数とreadfile関数とを使い分けるのが面倒くさいという方はinclude関数一本に絞った方がいいかもしれませんが…)。
小粋空間の(o)さんのコメントを引用します。
<?php include("http://yujiro.dyndns.org/blog/koikikukan/hogehoge.html"); ?>
のように書くのは2つの意味でお勧めしません。まず、hogehoge.htmlはサーバーサイドにあるファイルなのでURLを指定する必要はありません。URLを指定すると単にファイル名を指定するのに比べてアクセスにオーバーヘッドがかかります。
次にincludeはPHPモジュールを読み込む関数で、引数をプログラムだと思って評価します。もしhogehoge.htmlがPHPプログラムを含まないのであれば、includeで読み込むのは得策ではありません。代わりにreadfileという関数があります。
以上をまとめるとこんな感じにするとよいのではと思います。
<?php readfile("/blog/koikikukan/hogehoge.html"); ?>
なお、あまり気にしていませんでしたが、includeでもURL指定でなく、絶対パス指定は可能なようです。