アルファサード株式会社 代表取締役 野田 純生のブログ


Movable Type用「逐次再構築(仮称)」プラグイン+α(β版)。


公開日 : 2007-06-29 17:26:41


エントリーアーカイブへの最初のアクセスがあった時点で再構築(静的ファイル生成)を行うMovable Type用のプラグイン+α

*設定方法等大きく変更しましたので、以下の別エントリーを立てました。ダウンロードもこちらから可能です。

一通りの実装とテストが終わったのでベータ版として公開します。
まだまだ荒削りな部分もあるかと思いますがお気づきの点等ありましたらご指摘いただけると幸いです。

追記:
Unix+Apache+MT3.xで動作します。Windows環境では動作検証は行っていません。

インデックスアーカイブ, カテゴリーアーカイブ, 月別(週別)アーカイブ等は静的生成、エントリーアーカイブは動的生成(ダイナミック・パブリッシング)とし、動的生成のページに対しては「最初にそのページにアクセスがあった時」に再構築(静的HTMLファイルを生成)を行います。ダイナミックパブリッシングによる再構築の負荷軽減と静的生成による閲覧時の負荷軽減の両方のメリットを享受できる方式です。

MySQL用のテーブル作成スクリプト(php)を付けました(by 当社K君)。その他のDBの場合も以下の構造のテーブルを追加していただければ動作可能かと思います。

テーブル:mt_permalinkの構造
permalink_idint(11)
permalink_blog_idint(11)
permalink_permalinkvarchar(255)
permalink_modified_ontimestamp

ダウンロード

  • RebuildAt1stView.zip(12Kb)
ちょっと止めます。MT3/4両対応してFastCGIにも対応させた版を明日? くらいにアップしますので。

* ダウンロードは以下のエントリーのページから。

インストールと設定

  1. mtview.cgiの編集。
    
    use lib qw (/path/to/mt/lib/);
    use lib qw (/path/to/mt/extlib/);
    my $mt = MT->new(Config => '/path/to/mt/mt-config.cgi');
    my $base_url = 'http://example.com';
    my $base_pth = '/path/to/htdocs';
    1行目のPerlのパス及び4〜8行目を環境にあわせて修正。
    7行目・8行目の$base_url, $base_pthはそれぞれ「httpからドメインまで」「ドキュメントルートのフルパス」を記述してください(最後に/(スラッシュ)は含めません)。
    修正後、ファイルをアップロードして実行権限を付与してください。
  2. mtフォルダのlib/MT以下にPermalink.pm をアップロードします(lib/MT/Permalink.pm)。
  3. Installerディレクトリのpermalink.cgi の1行目のPerlのパス及び4〜18行目を環境にあわせて修正します。その後InstallerディレクトリをWebサーバーにアップします(シェルが利用できる方はシェルから実行してください(mt_permalink.sql及びpermalink.cgi)。Web経由で実行される方は(セキュリティのために)実行後必ずInstaller ディレクトリごと削除してください。)
  4. (Web経由でデータベースのテーブルを作成する場合)create.php にデータベースに関する必要な情報を入力して「Create Table」をクリックします。「successful」と表示されたらテーブルの追加は成功です。
  5. permalink.cgiを実行します(Web経由で実行する場合には実行権限を与える必要があります)。
  6. Installer ディレクトリを削除します。
  7. 「設定」→「公開」→「再構築オプション」で「テンプレート別に、スタティックHTMLもしくはダイナミック・パブリッシングを選択します」にチェックを入れて変更を保存します。
    設定→公開→再構築オプション
  8. エントリー・アーカイブの編集画面で「このテンプレートをダイナミック・ページにする」にチェックを入れて変更を保存します。
    エントリー・アーカイブの編集画面
  9. サイト全体を再構築します。
  10. *これまでに生成された静的ファイルはファイルの末尾に.staticが追加されてバックアップされます。
    これらのファイルは不要ですので動作確認後削除して構いません。
  11. pluginsフォルダ内のRebuildAt1stViewディレクトリをディレクトリごとMTのpluginsディレクトリにアップします。
  12. 有効にしたいブログのプラグインの設定画面でRebuildAt1stViewの設定を表示, 「プラグインを有効にする」にチェックして変更を保存します。

  13. ブログのルートフォルダに「.htaccess」ファイルが生成されていますので削除, 同梱の「_htaccess」をアップロード。「.htaccess」にリネームします。
    
    ErrorDocument 404 /mtview.cgi
    
    ErrorDocumentのパスをアップロードしたmtview.cgiのパスにあわせてください。

プログラムの動作と利用方法

エントリーアーカイブを再構築してもエントリーアーカイブは基本的にダイナミックパブリッシングなので静的なファイルは生成されません。

エントリーアーカイブへのリクエストがあった場合、ページが存在しないので.htaccessで設定されたmtview.cgiが呼び出されます。mtview.cgiによってページが構築されデータをブラウザへリプライすると同時に静的HTMLをディスクへ書き出します(*)。

*但し、UserAgentにGooglebot,Yahoo! Slurp, msnbotのいずれかの文字列が含まれる場合はHTTP_IF_MODIFIED_SINCEとEntryのmodified_onを比較し、エントリーが更新されていなければNot Modifiedを返します(ページの生成は行いません)。

ファイルがディスクへ書き出された後のリクエストに対しては静的HTMLが使われるためmtview.cgiは呼び出されなくなります。

構築されたエントリーアーカイブは以下のタイミングで削除されます(その後再度ページへのアクセスがあった時に再生成されます)。

  • エントリーを更新した時, エントリーのステータスを下書きにした時(前後のエントリーアーカイブの静的HTMLが存在した場合、それらのファイルも削除されます)
  • コメント, トラックバックを更新した時

エントリーキャッシュの全消去

すべてのファイルを削除したい場合(つまり、全てのページを最新のものにしたい場合は、管理画面の各ブログトップ(mt.cgi?__mode=menu&blog_id=x)及びエントリー一覧の画面(mt.cgi?__mode=list_entries&blog_id=x)の「プラグイン」アクションの「エントリーキャッシュの全消去」をクリックします(すべてを再構築した直後に行うか、全てを削除した後に全再構築を行うと良いでしょう)。

MTのバージョンについて

MT4対応しました。Movable Type4には対応していません。動作確認済みのバージョンはMovable Type3.3のみですがバージョン3系であれば動作するのではないかと思います。


ちょっと宣伝します

私が代表をつとめるアルファサード有限会社ではこんな風にMovable Typeに関する様々な課題解決が得意です。MTは使いやすいけれど「もっとこんな風にならないかなぁ...」「こんなことができるといいのに...」とお感じになられている企業や団体の皆様はお気軽にお問合せください。

関連エントリー

カテゴリ


このブログを書いている人
野田純生の写真
野田 純生 (のだ すみお)

大阪府出身。ウェブアクセシビリティエバンジェリスト。 アルファサード株式会社の創業者であり、現役のプログラマ。経営理念は「テクノロジーによって顧客とパートナーに寄り添い、ウェブを良くする」。 プロフィール詳細へ