インデックステンプレートAを再構築するには、事前に必ずインデックステンプレートBを再構築しておく必要がある場合、今までその再構築作業を順を追って手作業で行っていました。また、記事を保存した時やコメント投稿時などの再構築負荷を低減する目的で、殆どのインデックステンプレートの自動再構築オプションをオフにしているために、新しく記事を公開する度に、トップページやRSS、サイトマップなどの必要なインデックステンプレートを忘れないように手作業で再構築していました。
このようにインデックステンプレート間の再構築順序に依存関係がある場合や、特定複数のインデックステンプレートを一括で再構築するのに便利な MovableType プラグインを書いてみました。
当サイトでは MovableType のインデックステンプレートとして CSS を生成する際に、サーバ転送量を削減する目的で、無圧縮のファイル(screen.css
)と gzip 圧縮されたファイル(screen.css.gz
)の二つをのファイルを生成するようにしています。無圧縮で 17.6K バイトある screen.css
は gzip 圧縮によって 3.7K バイトと大幅に小さくなります。特に新規ビジタが 7 割近くを占める当サイトでは、これら訪問者毎に screen.css
を転送する必要があるので、この転送量の削減効果はかなり大きなものになるでしょう。本来ならば Apache サーバの mod_deflate モジュールなどを利用するなど、Web サーバ側で対処すべき事柄なのですが、当サイトが間借りしているさくらインターネットではサーバが対応していないために自前でなんとかしています(泣)
screen.css
と screen.css.gz
の内容は全く同じなので、screen.css.gz
については <MTInclude file="...">
テンプレートタグを利用してファイル全体を読み込んでしまった後、拙作の CompressGZip プラグインを用いて gzip 圧縮を行っています(下図)(index.rdf となっていますが読替えてください)
上記の図のように screen.css.gz
を正しく生成するためには、自身の再構築に先立って screen.css
の構築処理が事前に完了している必要があります。今までは、まず screen.css
を再構築してから screen.css.gz
の再構築を手動で行っていました。順番を逆にしてしまうと、両者のファイル内容に違いが出てしまいます。
このような煩雑な手間を解消するために、IndexTemplateRebuilder プラグインを利用して、screen.css.gz
のテンプレート内から screen.css
の再構築を行うように <MTBuildIndexTemplate>タグを追加しました。これによって、screen.css.gz
一つを再構築するだけで、自動的に screen.css
の再構築が行われるようになり、その構築を待ってからファイルの読込み・圧縮が行われるようになります。
記事の微妙な言い回しを書き換える程度のちょっとした更新であれば、殆どのインデックステンプレートは再構築される必要がありません。また、コメントが投稿されたり、トラックバックを受信した場合も、全ての記事一覧や RSS など、再構築される必要のないインデックステンプレートが殆どです。そのため、当サイトでは、不要な再構築による負荷を削減する目的で、最新のコメント/トラックバックを表示するためのインデックステンプレートを除いて自動で再構築が行われないように指定しています。
しかしこれでは逆に、新しい記事を公開する際には、トップページや RSS、サイトマップなどなど、幾つものインデックステンプレートを忘れないように手動で再構築することになります。これがなかなか大変で、実際には時々 RSS の再構築を忘れて、更新情報の通知ができていなかったことも何度かありました。
そこで IndexTemplateRebuilder プラグインを利用して、記事の公開時に再構築すべきインデックステンプレートを一括で再構築するためのインデックステンプレートを一つ作ってしまいました(あぁ、ややこしい)。記事を公開する際には、このテンプレート一つを再構築するだけで必要な全てのインデックステンプレートが漏れなく再構築されるようになります。このインデックsテンプレートには "【記事の公開/修正完了時に再構築するテンプレート】" のように判りやすい名前をつけています(苦笑)
<$MTBuildIndexTemplate async="1" name="トップページ"$> <$MTBuildIndexTemplate async="1" name="全ての記事"$> <$MTBuildIndexTemplate async="1" name="全てのタグ"$> <$MTBuildIndexTemplate async="1" name="RSS 1.0 (Abstructs) - gzip compressed"$> <$MTBuildIndexTemplate async="1" name="サイトマップ (XML)"$> <$MTBuildIndexTemplate async="1" name="モジュール (最近の人気記事)"$> <$MTBuildIndexTemplate async="1" name="モジュール (オススメ記事)"$>
MTIndexTemplateRebuilder
変数タグname
パラメータで指定されたインデックステンプレートを強制的に再構築します。blog_id
パラメータを指定することで、他のブログに属するインデックステンプレートも対象にできます。再構築は同期的に行われますが、async
または background
パラメータを指定すると、可能であればバックグラウンドで非同期的に再構築が行われます。このテンプレートタグ自体は何の文字出力も行いません。
master
) ... バグ修正や機能追加など開発途中のバージョンです。開発中の新機能などをいち早く利用できますが、新しいバグが生まれていたり、テストが不十分な場合があります。