再構築を不要にするカスタマイズ(ページキャッシュ機能追加)

2005年12月19日 MySQL/PostgreSQL/SQLite全対応版を公開しました。こちらをお使いください。

以前に、「再構築を不要にするカスタマイズ(Perl版ダイナミック・パブリッシング)」を公開しましたが、それを改良しました。

これまでは、ページにアクセスがあるたびに、そのページを動的に再構築していました。
しかし、これだとWebサーバに負荷がかかりますし、またページの表示にも時間がかかります。

そこで、ページをキャッシュするようにしました。
再構築したページはキャッシュに保存し、Blogに何か変更が加わるまでは、キャッシュからページを読み込んで表示するようにしました。
なお、「Bl;ogの変更」とは、以下のような場合を指します。

・エントリーを編集する
・コメントやトラックバックを受信する
・テンプレートを変更する

ページをキャッシュすることによって再構築の回数が減り、Webサーバの負荷が下がります。
また、キャッシュに入っているページは、通常のHTMLとほぼ同程度の速度で表示されます。

キャッシュの分だけWebサーバーのディスク容量を消費しますが、キャッシュの容量は自由に設定できるようにしてあります。

導入の手順は以下の通りです。

1.システムの条件

Perl版ダイナミック・パブリッシングを動作させるには、以下の環境が必要です。

  • Movable TypeのデータベースをMySQLで管理している
  • WebサーバーがPHPに対応している
  • .htaccessの設定を変えることができる

2.ファイルのダウンロードと設置

以下のリンクをクリックして、ファイルをダウンロードします。

mt-dynamic.zip

ファイルを解凍すると、「GetConfig.pl」「dynamic_init.pl」「mt-dpcache-load.php」「mt-dynamic.cgi」と「mt-dynamic.php」の5つのファイルができます。
「GetConfig.pl」はプラグインのファイルです。Movable Typeのディレクトリの中の「plugins」ディレクトリにアップロードします。
また、「mt-dynamic.cgi」は、Blogの出力先ディレクトリにアップロードし、パーミッションを実行可能に変えます(一般には「705」や「755」)。
残りの3つのファイルはテンプレートですので、アップロードはしません。

3.キャッシュ用テーブルの初期化

次に、MySQLにキャッシュ用のテーブルを初期化します。
インデックステンプレートを1つ作成し、名前と出力先ファイル名を「mt-dpcache-load.php」とします。
そして、「テンプレートの中身」の欄に、解凍してできた「mt-dpcache-load.php」ファイルの内容を貼り付け、テンプレートを保存して再構築します。
再構築ができたら、「http://BlogのURL/mt-dpcache-load.php」にアクセスします。これでテーブルが追加されます。

なお、PHPをCGIとして動作させるサーバーでは(例:さくらインターネット)、テンプレートを再構築した後に、そのパーミッションを実行可能に書き換え、その後にアクセスします。

テーブルの初期化が終わったら、今作ったテンプレートは削除します。
また、Blogのディレクトリに「mt-dpchache-load.php」ファイルが出力されていますので、それも削除します。

4.初期化用テンプレートの作成

次に、インデックステンプレートを新規作成し、名前と出力先ファイル名を「dynamic_init.pl」にして、解凍してできた「dynamic_init.pl」ファイルの内容を貼り付けます。
そして、「インデックス・テンプレートを再構築するときにこのテンプレートを自動的に再構築する 」のチェックはオフにします。
ここまでが終わったらこのテンプレートを保存し、再構築しておきます。

なお、旧版のPerl版ダイナミック・パブリッシングでは、「dynamic_init.pl」を書き換えて初期設定をしていました。
一方、今回のバージョンでは、「mt-dynamic.php」内で初期化を行うようにしていて、「dynamic_init.pl」は書き換えません。

5.ダイナミックページ表示用テンプレートの作成

次に、ダイナミックページ表示用テンプレートを作成します。
インデックステンプレートを新規作成し、名前と出力先ファイル名を「mt-dynamic.php」にして、解凍してできた「mt-dynamic.php」ファイルの内容を貼り付けます。
また、「インデックス・テンプレートを再構築するときにこのテンプレートを自動的に再構築する 」のチェックはオフにします。
そして、以下の3箇所を書き換えます。

・3行目:$max_cache_size = 20000000;
キャッシュに使うディスク容量の上限を指定します。
例えば、容量の上限を50MBにする場合は、「$max_cache_size = 50000000;」にします。

なお、キャッシュ容量の上限を超えると、キャッシュ内でもっとも古くからあるファイルから順に自動的に削除されます。

・5行目:$index_filename = "index.php";
インデックスページのファイル名を指定します。
アドレスの最後がディレクトリ名で終わっている場合、アドレスの後にこのファイル名が自動的に付加されます。
例えば、「http://www.foo.com/blog/」のようにアクセスすると、自動的に「http://www.foo.com/blog/index.php」にアクセスします。

・7行目:$error404 = "<$MTBlogURL$>";
指定されたアドレスのページが見つからない場合に、自動的にあるページに移動したい場合、そのアドレスを指定します。
例えば、「$error404 = "http://www.foo.com/error.html";」にすると、指定されたアドレスのページがないときには、「http://www.foo.com/error.html」のページが表示されます。

なお、この行を変えない場合は、指定されたアドレスのページがない時には、Blogのメインページが表示されます。
また、この行を「$error404 = "";」にすると、ページがない時には「ご指定のページは見つかりませんでした」というメッセージが表示されるようになります。

ここまでの設定が終わったら、このテンプレートを保存し、再構築します。
なお、PHPをCGIとして動作させるサーバーでは(例:さくらインターネット)、テンプレートを再構築した後に、「mt-dynamic.php」ファイルのパーミッションを実行可能に書き換えます。

6.ディレクトリの作成

次に、Blogの出力先ディレクトリの中に、「phptemp」と「phpcache」のディレクトリを作成します。
そして、それらのディレクトリのパーミッションを「707」に設定します。

7.ダイナミック・パブリッシングをオンにする

次に、ダイナミック・パブリッシングをオンにします。
Movable Typeの管理画面に入り、再構築を不要にしたいBlogで、テンプレート編集の画面を開きます。
その画面の右上の方に「再構築オプション」という部分がありますが、そこを「テンプレート毎に個別に選択」をオンにします。
これで、ダイナミック・パブリッシングがオンの状態になります。

8..htaccessファイルの編集

7.の作業が終わると、Blogの出力先のディレクトリに、「.htaccess」というファイルができます。
この.htaccessファイルをいったんダウンロードして、メモ帳等で開きます。

その中に、「/○○/mtview.php」という部分が4箇所あります(○○はBlogの出力先ディレクトリ)。それらすべての「mtview.php」を、「mt-dynamic.php」に書き換えます。

書き換えが終わったら、.htaccessファイルを元の場所に再度アップロードします。

9.各テンプレートの設定

テンプレートの編集画面で、動的に出力したいテンプレートを開きます。
そして、画面の右上にある「このテンプレートをダイナミック・ページにする」のチェックをオンにします。

10.Blogの再構築

ここまでの作業がすべて終わったら、Blog全体を再構築します。
9.の設定を行ったページが正しく表示されれば、設置は終わりです。
これ以後も、テンプレートを新規作成した時には、Blogの再構築を行ってください。

なお、ここまでの設定をすると、以前のHTMLファイルは不要になります。
それらのファイルは、拡張子に「.static」が追加された状態で、Webサーバーに残っています。必要に応じて削除することができます。