Movable Typeユーザー・マニュアル: ダイナミック・パブリッシング

« 目次


ダイナミック・パブリッシング

Movable Type 3.1のダイナミック・パブリッシングによって、テンプレートごとに、スタティック・ページをダイナミック・ページと組み合わせて作成することができます。 そして、ブログのパブリッシングとトラフィックのバランスを取ることができます。 サイトのインデックスやフィードのように頻繁にリクエストされるページでは、スタティック・ページの生成をオンにし、月ごとに更新するページや、個人的なページ、アーカイブのページなどには、ダイナミック・ページを使うといったことが可能になります。 この機能は、手動でファイルを再構築する手間を完全に省きます。たとえば、アーカイブ・テンプレートのデザインを更新する際に、サイトのデザインは、あなた自身が再構築しなくても、直ちに更新されるようになります。

インストールおよび必要条件

必要条件

Movable Typeの必要条件に加えて、ダイナミック・パブリッシング・オプションには、以下の要件が必要です。

ダイナミック・パブリッシングを利用するには

  1. Movable Typeのダイナミック・ページ・オプションを有効にする

    Movable Typeの「テンプレート」パネルに行き、「テンプレート構築の設定」メニューから、「アーカイブ・テンプレートだけをダイナミックに構築する」または「テンプレートごとに構築の設定を指定する」を選択します。 後者を選択すると、必要な各テンプレートを編集して「このテンプレートのダイナミック構築をオンにする」を選択する必要があります。

  2. テンプレート・キャッシュ・ディレクトリを設ける

    ブログのルート・ディレクトリにtemplates_cという名前で新しいサブディレクトリを作成します。 ディレクトリに777のパーミッションを設定します。

  3. Apacheウェブサーバーのために、.htaccessファイルを設定する

    ブログ・ルート・ディレクトリに、ダイナミック・ページのリクエストを扱う.htaccessファイルを作成する必要があります。 このファイルは以下のような内容です。

    # Disable fancy indexes, so mtview.php gets a chance...
    Options ?Indexes +SymLinksIfOwnerMatch
    <IfModule mod_rewrite.c>
    
    # The mod_rewrite solution is the preferred way to invoke
    # dynamic pages, because of its flexibility.
    # Add mtview.php to the list of DirectoryIndex options, listing it last, 
    # so it is invoked only if the common choices aren't present...
    <IfModule mod_dir.c>
        DirectoryIndex index.php index.html index.htm default.htm default.html default.asp /mtview.php
    </IfModule>
    RewriteEngine on
    # don't serve mtview.php if the request is for a real directory
    # (allows the DirectoryIndex lookup to function)
    RewriteCond %{REQUEST_FILENAME} !-d
    # don't serve mtview.php if the request is for a real file
    # (allows the actual file to be served)
    RewriteCond %{REQUEST_FILENAME} !-f
    # anything else is handed to mtview.php for resolution
    RewriteRule ^(.*)$ /mtview.php [L,QSA]
    </IfModule>
    <IfModule !mod_rewrite.c>
    # if mod_rewrite is unavailable, we forward any missing page
    # or unresolved directory index requests to mtview
    # if mtview.php can resolve the request, it returns a 200
    # result code which prevents any 4xx error code from going
    # to the server's access logs. However, an error will be
    # reported in the error log file. If this is your only choice,
    # and you want to suppress these messages, adding a "LogLevel crit"
    # directive within your VirtualHost or root configuration for
    # Apache will turn them off.
    ErrorDocument 404 /mtview.php
    ErrorDocument 403 /mtview.php
    </IfModule>
    

    (.htaccessファイルがある場合は、その最後に上記のコードを加えてください。)

    上述の"mtview.php"スクリプトは、一度、新しい「ダイナミック・サイト起動用スクリプト」インデックス・テンプレートを再構築すると、作成されます。 ブログ・ルートがサイトのサブディレクトリにある場合は、"mtview.php"スクリプトへのパスを実際の場所になるよう、上記の .htaccess の設定を変更してください(たとえば、ブログ・ルートが"weblog"ディレクトリにある場合、パスは"/weblog/mtview.php"に修正します)。

    Apacheサーバーは、mod_rewriteが使用可能になっていない場合、使用できるように設定してください("httpd -l" コマンドを使うと、使用可能なApacheモジュールが一覧表示できます。mod_rewriteモジュールが動的にロードされる場合は、 httpd.conf ファイルの "LoadModule rewrite_module" で始まる行をチェックします)。

    さらに、Apacheサーバーは .htaccess ファイルを利用できるように設定する必要があります。この設定はまた、Apacheサーバーの httpd.conf ファイルで指定されています。以下はその一例です(サーバーの設定によって、以下の記述は、グローバル・コンテキストに入る場合も、特定のVirtualHostセクションに入る場合もあります)。

    <Directory />
    AllowOverride All
    </Directory>
    
  4. マイクロソフトIISウェブサーバーに対しては、エラー・ハンドラをカスタマイズする

    Internet Information Serverをお使いの場合は、"mtview.php" スクリプトをカスタムのエラー・ドキュメントとして使うように、ウェブ・ディレクトリを設定する必要があります。 その際は、403と404のエラーに対して使ってください。

ダイナミック・パブリッシングの利点

スタティック・パブリッシングとダイナミック・パブリッシングの組み合わせ

Movable Type では、従来のスタティック・パブリッシングに加え、ダイナミック・パブリッシングをオプションとして加えました。 どちらか一方だけを選択する必要はありません。両方混在して使えます。

たとえば、インデックスやアーカーブ・テンプレートにはダイナミック・パブリッシングを使い、そのほかのページにはスタティック・パブリッシングを使うことができます。 これは、サイトのパブリッシングの方法に柔軟性を与えてくれます。 インデックスとAtom/RSS/RDFフィードのページにかなりのトラフィックがあるようなサイトでは、こうしたページだけをスタティックに公開する、などを実現できます。

アーカイブ・ページは、トラフィック量が少なく、かつ、最も大きなディスク・スペースを占めるので、通常、ダイナミック・パブリッシングに適しています。

ダイナミック・ページの最適化

ダイナミック・パブリッシングを使うと、キャッシュされない各ページのビューには、そのページを構築するため、多くのデータベース・クエリー(問い合わせ)が発生します。 ウェブサーバーの性能とテンプレートの複雑度によって異なりますが、1秒もかからないこともあれば、数秒かかる場合もあります。 以下は、ダイナミック・ページの処理速度を最適化するのに、役立つヒントです。

ページ・レベルのキャッシング

: これは実験的な機能であり、環境によってはうまく動作しないこともあります。

ダイナミック・パブリッシングを最適化する別の方法は、ページ・レベルのキャッシングをオンにすることです。 この機能によって、ダイナミック・ページは、1つのリクエストから次のリクエストに移行する間、ファイル・システムにキャッシュされるので、スタティック・ページに近いスピードが得られます。 長期的に見ると、これはディスク・スペースをより多く消費しますが、性能上の利点がそれに勝るかもしれません。

ページ・レベルのキャッシングをオンにするには、ブログのルート・ディレクトリに"cache" サブディレクトリを作成する必要があります。 さらに、777のパーミッションを与える必要があります。 次に、「ダイナミック・サイト起動用スクリプト」インデックス・テンプレートに次の行を加えます。

$mt->caching = true;

この行は"$mt->view();" の行の上に加えてください。 この行を削除すると、キャッシング・オプションが無効になります。

これを設定すると、ダイナミック・ページを表示するときに、作成したキャッシュ・ディレクトリ内にキャッシュするようになります。 キャッシュされた後は、ブログ・コンテンツがそのキャッシュされたページより新しい場合、またはリクエストを受けた場合に限り、1ページずつ再構築されます

条件付きリクエスト

ダイナミック・ページに、条件付きリクエスト(HTTP 304応答)を設定できます。 通常、ページがダイナミックに生成される場合、ページは条件なしで生成されます。 中にはこうした状態が適しているケースがあるため、条件付きリクエストはデフォルトでオフになっています。 条件付きリクエストは"mtview.php" スクリプトに以下の行を加えると有効になります。

$mt->conditional = true;

この行は"$mt->view();" の行の上に加えてください。 条件付きリクエストに関連付けられたタイムスタンプは、ブログが最後に変更された時間です。変更とは、コメント、トラックバックping、テンプレートなど、ブログのどの部分に対しての変更も意味します。

さらに機能をアップして、条件付き動作を条件付きで設定できます。 以下はフィードのページで、この機能をオンにするコードです。

if (preg_match('/(index|atom)\.(rss|xml|rdf)/',
    $_SERVER['REQUEST_URI'])) {
    $mt->conditional = true;
}

PHPプラグインAPI

Movable Typeのダイナミック・パブリッシング・モードはプラグインもサポートします。 これまでの Perl のプラグインと比べると、アーキテクチャは異なりますが、似ている点もあります。

PHPベースのダイナミック・パブリッシング・エンジンの2つの主要なコンポーネントは、Smarty テンプレート・パッケージ(http://smarty.php.net/)とJustin VincentのezSQLライブラリ(http://php.justinvincent.com/)です。

Movable Typeのメイン・ディレクトリにある"php" サブディレクトリには、ダイナミック・パブリッシング・エンジンに関連するすべてのファイルとリソースがあります。

mt/php/
       lib/      MT標準のタグとモジュール
       extlib/   サードパーティ・パッケージ(ezSQLとSmarty)
       plugins/  サードパーティMT/PHPプラグイン

プラグインのファイルは、`plugins''ディレクトリの中に入れてください。 MT/PHPプラグインを開発するには、Smarty用のプラグインを作成する方法に精通している必要があります。 MT/PHPプラグインにおいて、カスタムblockはコンテナ・タグを、カスタムfunctionは変数タグを、およびカスタムmodifierはグローバル・フィルターを加えるためのベースとなります。

ダイナミック・パブリッシング・アーキテクチャの概要(英文のみ)は、次のサイトに記載されています。http://www.sixapart.com/pronet/articles/dynamic_publish.html

さらに、Movable Type のPHPレイヤーへカスタム・プラグインを作成する手順については、ProNetサイトの次の記事(英文のみ)をご覧ください。http://www.sixapart.com/pronet/articles/php_dynamic_pub.html

Smartyルーチンの書き方についての詳細は、Smartyのウェブサイト(英文)からも入手できます。http://smarty.php.net/manual/en/plugins.php


Copyright © 2001-2005 Six Apart, Ltd. All Rights Reserved.