Movable Typeでインデックステンプレートの再構築をフィルタリングする「RebuildIndexFilter プラグイン」

Movable Typeでインデックステンプレートの再構築をフィルタリングする「RebuildIndexFilter プラグイン」

Posted at September 10,2008 12:55 AM
Tag:[MovableType, Plugin, RebuildIndexFilter]

Movable Type のインデックステンプレートの再構築をフィルタリングする RebuildIndexFilter プラグインを作ってみました。MT4.2x/MT5.0x/MT5.1xで動作を確認しています。

1.主な機能

このプラグインは、インデックステンプレートの再構築トリガを、次の5種類のイベントから選択することができます。

  • ブログ記事の投稿
  • ウェブページの作成
  • コメント投稿
  • トラックバック受信
  • すべて

例えば、フィードなどは「ブログ記事の投稿」のみをトリガに再構築することで、コメント投稿やトラックバック受信による再構築から除外することができます。

2.プラグイン作成の経緯

そもそも、Movable Type のインデックステンプレートの再構築のトリガは、再構築画面からの再構築以外に、ブログ記事の投稿やコメント投稿・トラックバック受信も含まれます。

私のブログでは、Google サイトマップや 全エントリータイトルを表示するアーカイブインデックス、タグクラウドといった、再構築に時間のかかるページに加え、サイドバーのパーツ(最近のエントリー・最近のコメント・最近のトラックバックなど)について、インデックステンプレートを使って数多くのモジュール化を行っています。

このため、インデックステンプレート全体を再構築してしまうとサーバにかなりの負荷がかかるのですが、コメント投稿では、コメントとは関係のないインデックステンプレートまですべて再構築してしまいます(内容に変化がなければファイルとしては出力されません)。

このため、現在使用中のサーバ(CORESERVER-A)に移転した直後のインデックステンプレートの再構築関係は次のようになっており、コメント投稿から完了までに30秒ほどかかり、500エラーが多発していました。

改善前の再構築

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

改善後の再構築

ということで、本プラグインを適用し、インデックステンプレートの再構築イベントをフィルタリングすることで、コメント投稿処理やトラックバック受信処理の短縮を図ることができます。また、イベントと関係のないインデックステンプレートの再構築を避けたい、という場合にもお勧めです。

再構築画面からの再構築には影響ありません。

2.価格

3300円/1インストールMT(税込み、購入前に必ず動作確認してください)

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. となるエラーの対処
2010.03.19 v0.10 本格版について、Movable Type 5.0のUIに対応
2012.01.06 v0.11 本格版について、Movable Type 5.1のUIに対応
RebuildIndexFilter_0_09.zip(本格版:MT4.2x用)
RebuildIndexFilter_0_10.zip(本格版:MT5.0x用)
RebuildIndexFilter_0_11.zip(本格版:MT5.1x用)
RebuildIndexFilter.zip(簡易版)

4.インストール

プラグインアーカイブを解凍し、中にある RebuildIndexFilter フォルダを plugins ディレクトリにアップロードしてください。

本格版はアップロードした後に管理画面にアクセスすると、次のようなアップグレード画面になりますので、「アップグレード開始」をクリックし、画面にしたがって操作を進めてください。簡易版はこの画面は表示されません。

MT4の画面(MT5以降も同じです)
プラグイン一覧

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

プラグイン一覧

5.使用方法(本格版)

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

MT4の画面
再構築イベントの種類

MT5.1の画面
再構築イベントの種類

データベースは、Movable Type のアップグレードによる不具合を避けるため、独立したテーブルを作成しています。

現在確認できている動作は次の通りです。

再構築イベント処理
ブログ記事の投稿/編集 ブログ記事の新規投稿
ブログ記事の編集
プログ記事編集画面からの公開
プログ記事編集画面からの未公開
プログ記事一覧画面からの公開
プログ記事一覧画面からの公開取り消し
プログ記事一覧画面からの削除
ウェブページの作成/編集 ウェブページ新規作成
ウェブページ編集
ウェブページ編集画面からの公開
ウェブページ編集画面からの未公開
ウェブページ一覧画面からの公開
ウェブページ一覧画面からの公開取り消し
注:「削除」では再構築処理が行われないため、プラグインは動作しません
コメント投稿/編集 コメント投稿
コメントの編集
コメント編集画面からの公開
コメント編集画面からの公開取り消し
コメント一覧画面からの公開
コメント一覧画面からの公開取り消し
コメント一覧画面からのスパム
コメント一覧画面からのスパム解除
通知メールからの承認
通知メールからのスパム指定
トラックバック投稿/編集 トラックバック受信
トラックバックの編集
トラックバック編集画面からの公開
トラックバック編集画面からの公開取り消し
トラックバック一覧画面からの公開
トラックバック一覧画面からの公開取り消し
トラックバック一覧画面からのスパム
トラックバック一覧画面からのスパム解除
通知メールからの承認
通知メールからのスパム指定

インデックステンプレート編集画面からの「保存と再構築」、および再構築画面からの再構築については、プラグインの設定とは関係なく、無条件に再構築します。

6.使用方法(簡易版)

インデックステンプレートの中に次のような MTIgnore タグを挿入します。挿入位置はどこでも構いません。プラグインは、この挿入された MTIgnore タグを検索して再構築をフィルタリングします。

再構築イベント

記述する内容は次の通りです。

ブログ記事投稿・編集で再構築を行う場合
<mt:ignore>entry</mt:ignore>
ウェブページ作成・編集で再構築を行う場合
<mt:ignore>page</mt:ignore>
コメント投稿で再構築を行う場合
<mt:ignore>comment</mt:ignore>
トラックバック受信で再構築を行う場合
<mt:ignore>ping</mt:ignore>

何も挿入しない場合は無条件に再構築します。

7.その他

イベントの判定方法はあまりエレガントではないので、完璧に動作するかどうかは分かりません。基本的な動作については正常性を確認しています。

2008.09.10
5項の画面が間違っていたので差し替えました。

2013.04.10
簡易版の説明に誤りがありましので修正しました。

関連記事
トラックバックURL


トラックバック

RebuildIndexFilter(簡易版)のテスト from 移行テスト中…
小粋空間の RebuildIndexFilter プラグイン を公開用のブログ(MT4.37)で便利に使っているけれど、 「0.10 本格版 Movabl... [続きを読む]

Tracked on November 30, 2011 8:56 PM
コメント

先日はありがとうございました。
また質問ができちゃいました。

検索結果ページ、タグページなどがヤフー、グーグルなどにインデックスされているとあぼになりやすいと聞いたのですが、これらのページをインデックスさせない方法をおしえていただきたいです。><

よろしくお願いいたします。

[1] Posted by 名無し : September 10, 2008 10:17 AM

こんにちは。
似たようなプラグインを作ろうと考えていたところだったので、利用させていただきます。

ただ、ソースコードを見たところでは、mt-comments.cgi等のファイル名がソースに直に書かれているので、スパム除け等のためにCGIのファイル名を変えていると、正しく動作しなくなると思います。


[2] Posted by 壱 logo : September 10, 2008 10:22 AM

こんにちは。
無理やり丸ごとモジュールにして、キャッシュさせてましたが、これですっきり出来ます。
簡易版を使うと、テンプレート側でキャッシュ指定も出来ますね。
紹介しまくろうっと。

[3] Posted by oscar logo : September 10, 2008 6:39 PM

こんばんわ^^

RebuildIndexFilter プラグイン使わせてもらいました。
わたしのサイトでもインデックステンプレートを毎回再構築する必要のないものは手動に設定することで負荷の軽減を行ってました。

再構築条件を設定できるんのはとっても嬉しい機能ですね (●´∀`●)

で、実際に使ってみて一点ご要望があります。

現状では、ドロップダウンリストからはコメント投稿時、トラックバック受信両方を選択することができません。

これをコメント/トラックバックの何れかを満たしたら再構築・・・という選択肢は可能でしょうか。
もしカンタンにできるようでしたらお時間があるときに対応して頂けると嬉しいです。

ご無理を言ってすいません。

[4] Posted by bzbell logo : September 10, 2008 10:53 PM

>名無しさん
こんにちは。
ご質問の件ですが、下記のサブテンプレートをヘッダの 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へのカラム追加で考えていたため、その場合、複数のチェックデータをプラグインから制御(結合・分割)できず、プルダウンに変更してしまいました。
その後、別の観点で、カラム追加から別のテーブルを作る方式に変更した(=プラグイン側でチェックデータ制御可能)のですが、チェックボックスにする思考が抜けてしまってました。
バージョンアップしたら別途エントリー致します。

[5] Posted by yujiro logo : September 11, 2008 9:49 AM

yujiroさん、こんにちは。

RebuildIndexFilter本格版を mt4.35 で便利に使わせていただいておりました。
このほど、5.12にアップグレードして、プラグインディレクトリにRebuildIndexFilterを置いたのですが、プラグイン一覧に表示されず、再構築がエラーになりました。
何か設定を見落としているのでしょうか。ご指摘がありましたらご教示ください。

どうぞよろしくお願い申し上げます。

[6] Posted by s.fujino : November 26, 2011 4:22 PM

yujiroさん、すみません。追加です。

RebuildIndexFilterはシステムの中に出てくるのですね。
とりあえず無効にして再構築しましたが、
今後も利用させていただきたいと思います。

どうぞ、よろしくお願いします。

[7] Posted by s.fujino : November 26, 2011 5:04 PM

yujiro さん、追加の報告です。

本格版では、再構築の時に
failed loading package RebuildIndexFilter::CMS for routine RebuildIndexFilter::CMS::save_rebuild_event: Can't locate MT/RebuildIndexFilter.pm in @INC (@INC contains:...
のようなエラーが出ました。

また、インデックステンプレートのオプションに「再構築イベント」も表示されませんでしたので、簡易版に入れ替えて MTIgnore タグで使ってみたら、エラーにならず動作しているようです。

できれば、以前のように本格版を使いたいと思っています。

[8] Posted by s.fujino : November 28, 2011 2:22 AM

yujiroさん、たびたび失礼します。

MT5.12で簡易版0.02もうまく動かないようです。
(テスト用のブログからトラックバックしました。)

[9] Posted by s.fujino : November 30, 2011 9:00 PM

>s.fujinoさん
こんばんは。
ご返事遅くなってすいません。
情報ありがとうございます。動作確認してバージョンアップしたいと思いますのでお待ち頂けますでしょうか。
それではよろしくお願い致します。

[10] Posted by yujiro logo : November 30, 2011 11:51 PM

yujiro さん、こんばんは。

コメントどうもありがとうございました!
お待ちしておりますので、どうぞよろしくお願いいたします。

[11] Posted by s.fujino : December 1, 2011 12:03 AM

いつも参考にさせていただいています。

mt4.25 を xserver で運用しています。

mySQL5.0.95 です。

RebuildIndexFilter バージョン 0.09を導入させていただきました。

(MTはコメントやトラックバックをリネームしています。)

ところが「アップグレード開始」で画面が進みません。


最初は2行ほどコメントが出たようですが、記録していませんでした。

現状は、ログインしようとすると「アップグレード開始」画面で何もできない状態です。

データベースを基に戻すしか方法はないのでしょうか。

[12] Posted by https://www.google.com/accounts/o8/id?id=AItOawlJkeAEfcJlf3Mw_8npg1N9z7bBWtZLnE4 logo : January 3, 2013 6:02 PM

こんばんは。
いつもご覧くださりありがとうございます。

ご質問の件ですが、インストールしたRebuildIndexFilterプラグインをpluginsディレクトリから削除してみて、ログイン画面から進むことができるか確認していただけますでしょうか。

アップグレード開始から進まない事象については別途確認致します。

[13] Posted by yujiro logo : January 4, 2013 2:40 AM

ご返答ありがとうございます。

インストールしたRebuildIndexFilterプラグインをpluginsディレクトリから削除で、もとに戻りました。

[14] Posted by japantn logo : January 5, 2013 7:59 AM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)