Movable Type の再構築を不要にする「ダイナミック・パブリッシング」(その2:設定方法)
その2ではダイナミック・パブリッシングの具体的な設定方法を記します。前提条件を満たしていれば、さほど難しい設定はありません。
1.ダイナミック・パブリッシングの条件
1.1 データベース
まず、使用データベースに
- MySQL
- PostgreSQL
- SQLiteバージョン2
が利用されていることが必要です。
もし BerkeleyDB や SQLite を利用されているのであればデータベースの移行が必要になります。データベース移行については下記の記事が参考になるでしょう。
1.2 HTTPサーバ
.htaccess が利用できる必要があります。レンタルサーバであれば大体利用できる設定になっていると思いますが、自宅サーバで Apache をご利用であれば httpd.conf に以下のような記述を追加します。ディレクトリはご自身の環境にあわせてください。
<Directory /usr/local/apache/htdocs/mt> AllowOverride All </Directory>- リスト1 httpd.conf
IISをお使いの場合は、403と404のエラーに対して、mtview.phpへのURLを設定してください(とマニュアルに記載されています)。
2.ダイナミック・パブリッシングの設定方法
2.1 再構築オプションの変更
Movable Type の管理画面から[設定]-[公開]の「公開」欄にある「再構築オプション」から下記のいずれかを選択し、「変更を保存」をクリックします。
「アーカイブのみダイナミック・パブリッシングで出力します」を選択
![]()
「テンプレート別に、スタティックHTMLもしくはダイナミック・パブリッシングを選択します」を選択
![]()
なお、1.2項で説明した .htaccess は、上記を選択し「変更を保存」をクリックした時点で生成されます。
後者を選択した場合は、さらに各テンプレートの編集ページで「このテンプレートをダイナミック・ページにする」のチェックボックスをチェックします。チェックして保存すると、そのテンプレートがダイナミック・パブリッシングの対象になり、再構築ボタンが非表示になります。 |
インデックス・テンプレートはスクリーンショットのような選択画面が表示されますので、「このテンプレートをダイナミック・ページにする」にチェックをして保存すれば、下の「インデックス・テンプレートを再構築するときに、このテンプレートを自動的に再構築する」のチェックボックスは非表示になります。 |
2.2 テンプレート・キャッシュ・ディレクトリの作成
ブログのルート・ディレクトリに templates_c という名前で新しいディレクトリを作成し、パーミッションを777に設定します。ディレクトリを作成しないとページが正常に表示されません。
3.ダイナミック・パブリッシングの最適化
以下の設定を行うことでダイナミック・パブリッシングを最適化します。
3.1 ページ・レベルのキャッシング
その1で説明した通り、Movable Type ではページのキャッシュ機能があります。この機能を利用すれば、あるページに対するリクエストで、そのページがファイルとしてキャッシュされます(ファイル名は外部から認識できない文字列)。
キャッシングを有効にするには、ブログのルート・ディレクトリに cache という名前のディレクトリを作成し、パーミッションを777に設定します。
次に、Dynamic Site Bootstrapperテンプレート(mtview.php)に青色の行を加えます。
<?php include('<$MTCGIServerPath$>/php/mt.php'); $mt = new MT(<$MTBlogID$>, '<$MTConfigFile$>'); $mt->caching =true; $mt->view(); ?>- リスト2 Dynamic Site Bootstrapperテンプレート
設定後、保存・再構築します。
これを利用すれば、(多分)テンプレートの内容が変更されるまでこのキャッシュが利用されるので、スタティック・パブリッシングに近いスピードでページにアクセスすることができます。
キャッシュを利用することでディスクは消費しますが、パフォーマンスは向上します。キャッシュはサーバの環境にあわせて利用を検討してください。個人的にはディスクの余裕があれば利用されることを推奨します。
3.2 条件付きリクエスト
ページ・レベルのキャッシングと排他的に利用すると思われるのが、この「条件付きリクエスト」です。機能としては、ページに変更がない状態でリクエストを受け付けた場合、304 Not Modified(サーバ上のファイルの変更がないためブラウザのキャッシュを用いることを示す)を返却します。
この設定を行うには、Dynamic Site Bootstrapperテンプレート(mtview.php)に青色の行を加えます。
<?php include('<$MTCGIServerPath$>/php/mt.php'); $mt = new MT(<$MTBlogID$>, '<$MTConfigFile$>'); $mt->conditional =true; $mt->view(); ?>- リスト3 Dynamic Site Bootstrapperテンプレート
設定後、保存・再構築します。
ダイナミック・パブリッシングを行うか、304 を返却するかの元情報は、ブログのコメント・トラックバック・テンプレート等のタイムスタンプを利用しているようです。
参考:Movable Type 3.3 マニュアル - ダイナミック・パブリッシング
Movable Type の再構築を不要にする「ダイナミック・パブリッシング」(その1:概要)
「Movable Type で再構築ができません」「500エラーが多発します」という記事をよくみかけますが、Movable Type には WordPress のようなページの動的生成、いわゆる「ダイナミック・パブリッシング」がバージョン 3.1 から標準搭載されており、これを利用することで再構築不要な環境にすることができます。
「ダイナミック・パブリッシング」とは、リクエストが発生するたびにHTMLページを動的に生成する機能です。ちなみに「再構築」は、エントリー本文やコメント・トラックバック等のデータをデータベースから読み出して、スタティックなHTMLページを生成することです。
当サイトではこれまで「ダイナミック・パブリッシング」について全く取り上げていなかったのですが、今後は少しずつ記事として取り上げていきたいと考えています。
というのは、現在発売されている某雑誌で「Movable Type はスタティックなHTMLページ生成しかできません」ということが書かれており、Movable Type のブログツールとしての著名度に比べ「ダイナミック・パブリッシング」についての認知度が低いのではないかと懸念した次第です(私もその一人だったかもしれませんが)。
※スタティックページ生成を、ここでは便宜上「スタティック・パブリッシング」と称します。
1.スタティック・パブリッシングとダイナミック・パブリッシングの比較
まずは概要ということで、スタティック・パブリッシングとダイナミック・パブリッシングの各評価項目について、表で比較してみました。
| 項目 | スタティック | ダイナミック | ダイナミック・パブリッシングを設定したページおよび管理画面 |
|---|---|---|---|
| 再構築 | 要 | 不要 | 「ページを再構築する」という作業がなくなります(「保存」ボタンはデータベースに変更を反映させるだけ)。 |
| 再構築による500エラー | あり | なし *1 | 再構築がなくなりますので、500エラーが発生しなくなります。 |
| ページ表示 | 早い | やや遅い | アクセス毎にPHPを実行してページを生成するため、その分時間を要します。*2 |
| ディスク容量 | エントリー数に比例して増加 | 少 | スタティックページを生成しないため、ディスクの消費が少なくなります。*3 |
| エントリー削除後のHTMLファイル | 残らない *4 | 残らない | スタティックなファイルを生成しないので、誤って公開してしまったエントリーもアクセスされなくなります。 |
| コメント・トラックバック処理 | やや遅い | 早い | コメント・トラックバック受信によるスタティックページ生成処理がなくなる分、処理が早くなります。 |
| テンプレートタグ関連のプラグイン | 利用できる | 利用できない | PHPで動作するため、当サイトで公開している「Movable Type プラグイン一覧」で掲載しているテンプレートタグ(<MTxxx> みたいなもの)が使えない場合があります。*5 *6 |
どちらを選択するかについては、ご利用のサーバ環境等に依存します。
2.Movable Type でのメリット
1項に記していない、Movable Type を利用する際における大きなアドバンテージは、ダイナミック・パブリッシングとスタティック・パブリッシングをテンプレート単位に選択できることです。したがって、リクエストの多いメインページやRSSフィードはスタティック・パブリッシング、比較的アクセスが落ち着いている(と思われる)アーカイブページはダイナミック・パブリッシングで運用することが望ましいでしょう。
*1:単純に「ダイナミック・パブリッシング」にすれば、再構築のストレスから解消できるという訳でもないようです。例えば、ロリポップではサーバ+DBのパフォーマンスの問題か、「ダイナミック・パブリッシング」が快適に動作しないケースがあるようですので、導入する前にレンタルサーバのサポートやネット上で情報を入手されることをお勧めします。
*2:キャッシュ機能を利用することで改善されます。
*3:キャッシュ機能を利用するとディスクはその分必要になります。
*4:オプション設定が必要。詳細は「Movable Type のエントリー削除でHTMLファイルも自動的に削除する」参照。
*5:プラグインを利用したい場合は、The blog of H.Fujimoto さんの「再構築不要化カスタマイズ(MT3.3専用版)」をお勧めします。
*6:テンプレートタグ関連のプラグインはPHPで作成すれば対応可能(通常のプラグインはPerl)です。ダイナミック・パブリッシング用プラグインはほとんど出回っていない状況ですが、中には対応しているものもあります。
後者を選択した場合は、さらに各テンプレートの編集ページで「このテンプレートをダイナミック・ページにする」のチェックボックスをチェックします。チェックして保存すると、そのテンプレートがダイナミック・パブリッシングの対象になり、再構築ボタンが非表示になります。
インデックス・テンプレートはスクリーンショットのような選択画面が表示されますので、「このテンプレートをダイナミック・ページにする」にチェックをして保存すれば、下の「インデックス・テンプレートを再構築するときに、このテンプレートを自動的に再構築する」のチェックボックスは非表示になります。

