エントリー本文
RebuildIndexFilter プラグイン
Category:[コールバック]
Tag:[MovableType, Plugin, RebuildIndexFilter]
Movable Type のインデックステンプレートの再構築をフィルタリングする RebuildIndexFilter プラグインを作ってみました。4.2 以降で動作を確認しています。
1.主な機能
このプラグインは、インデックステンプレートの再構築トリガを、次の5種類のイベントから選択することができます。
- ブログ記事の投稿
- ウェブページの作成
- コメント投稿
- トラックバック受信
- すべて
例えば、フィードなどは「ブログ記事の投稿」のみをトリガに再構築することで、コメント投稿やトラックバック受信による再構築から除外することができます。
2.プラグイン作成の経緯
そもそも、Movable Type のインデックステンプレートの再構築のトリガは、再構築画面からの再構築以外に、ブログ記事の投稿やコメント投稿・トラックバック受信も含まれます。
私のブログでは、Google サイトマップや 全エントリータイトルを表示するアーカイブインデックス、タグクラウドといった、再構築に時間のかかるページに加え、サイドバーのパーツ(最近のエントリー・最近のコメント・最近のトラックバックなど)について、インデックステンプレートを使って数多くのモジュール化を行っています。
このため、インデックステンプレート全体を再構築してしまうとサーバにかなりの負荷がかかるのですが、コメント投稿では、コメントとは関係のないインデックステンプレートまですべて再構築してしまいます(内容に変化がなければファイルとしては出力されません)。
このため、現在使用中のサーバ(CORESERVER-A)に移転した直後のインデックステンプレートの再構築関係は次のようになっており、コメント投稿から完了までに30秒ほどかかり、500エラーが多発していました。

その後、自ブログに本プラグインを導入し、下の図のように、イベント別に再構築するインデックステンプレートを絞り込んだところ、コメント投稿時間が10秒前後で完了するようになり、劇的に改善しました。

ということで、本プラグインを適用し、インデックステンプレートの再構築イベントをフィルタリングすることで、コメント投稿処理やトラックバック受信処理の短縮を図ることができます。また、イベントと関係のないインデックステンプレートの再構築を避けたい、という場合にもお勧めです。
再構築画面からの再構築には影響ありません。
3.プラグインのダウンロード
下記のリンクからプラグインアーカイブをダウンロードし、任意のフォルダに保存してください。今回はデータベースを利用する本格版と、データベースを使用しない簡易版の2種類を用意しました。フィルタリングの動作はどちらも同じですが、設定方法が異なります(詳細は後述)。
変更履歴 2008.09.10 初版 2008.09.12 スクリプト名の変更に対応。本格版について複数イベント指定に対応。 2008.09.15 本格版について、コメント・トラックバックの承認およびスパムに対応。いくつかの不具合を修正 2008.09.16 本格版について、XREA で動作しない不具合を修正 2008.09.16 本格版について、再構築画面からの動作を修正 2008.09.19 本格版について、日時指定投稿に対応。チェックロジックの見直し 2008.09.25 本格版について、日時指定投稿の不具合修正 2008.09.27 本格版について、通知メールからの承認に対応 2008.10.07 本格版について、Can't locate object method "properties" via package "MT::Template" at lib/MT/Object.pm line 195. となるエラーの対処
プラグインのご利用および質問に対する回答等について、ご支援・ご賛同くださる方からの寄付をお待ち申し上げます。
2.インストール
プラグインアーカイブを解凍し、中にある RebuildIndexFilter フォルダを plugins ディレクトリにアップロードしてください。
本格版はアップロードした後に管理画面にアクセスすると、次のようなアップグレード画面になりますので、「アップグレード開始」をクリックし、画面にしたがって操作を進めてください。簡易版はこの画面は表示されません。

ブログ管理画面より「システム」→「プラグイン」でプラグイン一覧を表示し、次のように表示されればOKです。

3.使用方法(本格版)
インデックステンプレートのオプションに「再構築イベント」という項目が表示されるので、そこから再構築を実施したいイベントを選択します。デフォルトはすべてのイベントで無条件に再構築します。

データベースは、Movable Type のアップグレードによる不具合を避けるため、独立したテーブルを作成しています。
現在確認できている動作は次の通りです。
| 再構築イベント | 処理 |
|---|---|
| ブログ記事の投稿/編集 | ブログ記事の新規投稿 ブログ記事の編集 プログ記事編集画面からの公開 プログ記事編集画面からの未公開 プログ記事一覧画面からの公開 プログ記事一覧画面からの公開取り消し プログ記事一覧画面からの削除 |
| ウェブページの作成/編集 | ウェブページ新規作成 ウェブページ編集 ウェブページ編集画面からの公開 ウェブページ編集画面からの未公開 ウェブページ一覧画面からの公開 ウェブページ一覧画面からの公開取り消し 注:「削除」では再構築処理が行われないため、プラグインは動作しません |
| コメント投稿/編集 | コメント投稿 コメントの編集 コメント編集画面からの公開 コメント編集画面からの公開取り消し コメント一覧画面からの公開 コメント一覧画面からの公開取り消し コメント一覧画面からのスパム コメント一覧画面からのスパム解除 通知メールからの承認 通知メールからのスパム指定 |
| トラックバック投稿/編集 | トラックバック受信 トラックバックの編集 トラックバック編集画面からの公開 トラックバック編集画面からの公開取り消し トラックバック一覧画面からの公開 トラックバック一覧画面からの公開取り消し トラックバック一覧画面からのスパム トラックバック一覧画面からのスパム解除 通知メールからの承認 通知メールからのスパム指定 |
インデックステンプレート編集画面からの「保存と再構築」、および再構築画面からの再構築については、プラグインの設定とは関係なく、無条件に再構築します。
4.使用方法(簡易版)
インデックステンプレートの中に次のような MTIgnore タグを挿入します。挿入位置はどこでも構いません。プラグインは、この挿入された MTIgnore タグを検索して再構築をフィルタリングします。

記述する内容は次の通りです。
- ブログ記事投稿・編集で再構築を行う場合
<mt:ignore>EntryOnly</mt:ignore>- ウェブページ作成・編集で再構築を行う場合
<mt:ignore>PageOnly</mt:ignore>- コメント投稿で再構築を行う場合
<mt:ignore>CommentOnly</mt:ignore>- トラックバック受信で再構築を行う場合
<mt:ignore>PingOnly</mt:ignore>
何も挿入しない場合は無条件に再構築します。
5.その他
イベントの判定方法はあまりエレガントではないので、完璧に動作するかどうかは分かりません。基本的な動作については正常性を確認しています。
2008.09.10
4項の画面が間違っていたので差し替えました。
- CSSでブログに影をつける(ドロップシャドウ:Movable Type 4.x 配布テンプレート版)
- Movable Type プラグイン一覧(MT4対応)
- RecommendedEntry プラグイン
- Movable Type 4.x 本格的CMSサイトを構築するためのMTスーパーテクニック クリエイターが身につけておくべき新・100の法則。
- RebuildIndexFilter プラグイン v0.06
- Movable Type 4.2 テンプレートセット(コミュニティブログ対応版)修正
- RebuildIndexFilter プラグイン v0.03
- PowerEdit プラグイン
- dTree プラグイン for WordPress v0.3
- Movable Type プラグイン一覧
先日はありがとうございました。
また質問ができちゃいました。
検索結果ページ、タグページなどがヤフー、グーグルなどにインデックスされているとあぼになりやすいと聞いたのですが、これらのページをインデックスさせない方法をおしえていただきたいです。><
よろしくお願いいたします。
こんにちは。
似たようなプラグインを作ろうと考えていたところだったので、利用させていただきます。
ただ、ソースコードを見たところでは、mt-comments.cgi等のファイル名がソースに直に書かれているので、スパム除け等のためにCGIのファイル名を変えていると、正しく動作しなくなると思います。
こんにちは。
無理やり丸ごとモジュールにして、キャッシュさせてましたが、これですっきり出来ます。
簡易版を使うと、テンプレート側でキャッシュ指定も出来ますね。
紹介しまくろうっと。
こんばんわ^^
RebuildIndexFilter プラグイン使わせてもらいました。
わたしのサイトでもインデックステンプレートを毎回再構築する必要のないものは手動に設定することで負荷の軽減を行ってました。
再構築条件を設定できるんのはとっても嬉しい機能ですね (●´∀`●)
で、実際に使ってみて一点ご要望があります。
現状では、ドロップダウンリストからはコメント投稿時、トラックバック受信両方を選択することができません。
これをコメント/トラックバックの何れかを満たしたら再構築・・・という選択肢は可能でしょうか。
もしカンタンにできるようでしたらお時間があるときに対応して頂けると嬉しいです。
ご無理を言ってすいません。
>名無しさん
こんにちは。
ご質問の件ですが、下記のサブテンプレートをヘッダの meta 要素が並んでいる次のあたりに追加してみてください。
<mt:unless name="system_template">
<mt:elseIf name="body_class" like="mt-comment">
<mt:else>
<meta name="robots" content="noindex" />
</mt:unless>
それではよろしくお願い致します。
>壱さん
こんにちは。
コメント&ご指導ありがとうございます!
ユーザが変更可能にするか、コンフィグから取得するよう改善してみます。
>oscarさん
こんにちは。
コメントありがとうございます。
是非紹介してやってください(笑)。
>bzbellさん
こんにちは。
ご利用&ご紹介ありがとうございます。
ご要望の件は実現可能と思います。
当初、チェックボックスで選択する方法で作り始めたのですが、MT::Templateへのカラム追加で考えていたため、その場合、複数のチェックデータをプラグインから制御(結合・分割)できず、プルダウンに変更してしまいました。
その後、別の観点で、カラム追加から別のテーブルを作る方式に変更した(=プラグイン側でチェックデータ制御可能)のですが、チェックボックスにする思考が抜けてしまってました。
バージョンアップしたら別途エントリー致します。
