Movable Typeの再構築の出力制御について
ご存知の方も多いと思いますが、Movable Type で再構築(スタティックパブリッシング)を行った時、指定したすべてのファイルは無条件に出力されない仕様になっています。
例えば、すべてのインデックステンプレートで、「再構築オプション」をチェックしている状態(4.15以降であれば「スタティック」を選択)で、再構築画面から「すべてのファイル」または「インデックスのみ」を指定して再構築した場合、スタイルシートやJavaScript(mt.js)を最近編集していないのであれば、それらのファイルのタイムスタンプは更新されません。
極端な条件にすると、ブログ記事やテンプレート、あるいはコメント・トラックバックなど、前回の再構築からブログの情報が全く変更されていない状態で、再構築画面から「すべてのファイル」を選択して再構築を行っても、ファイルはひとつも出力(更新)されません。
この仕様に、最近まで全く気がついていませんでした。
レンタルサーバやローカルPCのタイムスタンプを確認しましたので、おそらく間違いはないと思いますが、認識誤りがありましたらご指摘ください。
1.ファイルが出力される条件
再構築でファイルが出力される条件を示します。
ソースをトレースすれば明確な条件が分かると思いますが、時間がないので(というかトレース能力が低いので)再構築を実際に行って、確認した限りの内容です。
- テンプレートを編集した場合
- 変更した情報に関連するテンプレートタグがテンプレートに記述されている場合
- 管理画面からファイルの出力内容に関係する設定の変更が行われた場合
- 再構築対象のファイルがなくなっている場合
2.各条件の詳細
1番目の条件は自明ですが、テンプレートの内容に変更があった場合、対象のテンプレートを再構築することによってファイルが出力されます。
2番目の条件は、例えば、コメントを投稿(公開)したときに、「最近のコメント」といったコメント関連のテンプレートタグが存在するテンプレートだけが再構築対象になります。逆に、コメント関連のテンプレートタグが存在しないテンプレートは再構築対象になりません。
3番目の条件は、例えば、ブログ記事編集画面でコメント・トラックバックの受信設定を変更した場合、そのブログ記事の内容を変更していなくても、コメントフォームやトラックバックURLの表示が変わるため、保存によって再構築され、ファイルが出力されます。
4番目の条件は、テンプレートの変更や該当するテンプレートタグがなくても、ファイルが何らかの要因でなくなってしまった場合は再構築されます。これはパスやファイル名が変更されたときも同じと思われます。
3.ファイルを出力したい場合
プログラムをハックすれば出力できる手段があるはずですが(または環境変数)、管理画面上で簡単に全てのファイルを再構築するには、テンプレートで共通に呼び出しているテンプレートモジュールを適当に編集してから再構築するのが無難ではないでしょうか。
4.再構築の最適化
テンプレートタグの有無で再構築が制御できることが間違いないのであれば、部品を単純にインクルードするよりも、コメントやトラックバックなどの特定テンプレートタグをモジュール化することで、再構築時間はより短縮できると思います。
4.15のSSIを用いれば、独自にPHP化せずにそのようなことが実現可能かもしれません。
5.再構築の定義
ふと思ったのですが、画面上再構築は行われているのに、仮にファイルがひとつも出力されない場合は「再構築」という表現は正しいのでしょうか(単に素朴な疑問です)。
内部処理では再構築するためのチェックが行われていると思いますし、それを含めて再構築(処理)と定義するのかもしれませんが...。
一括再構築は別として、例えば、個別再構築の場合「前回から変更がなかったのでファイルは更新されませんでした」というメッセージ出力も可能な気がします。
すいません。ちょっと疲れてます。