ダイナミック・パブリッシングで perl のプラグインを利用する

ダイナミック・パブリッシングで perl のプラグインを利用する

Posted at May 10,2007 1:50 AM
Tag:[DynamicPublishing, MovableType, MTInclude, Plugin]

Movable Type のダイナミック・パブリッシングを利用する際、外部で配布されているMTプラグインの適用にあたっては制約があります。このエントリーではこれを解消する方法をいくつか紹介したいと思います。

ダイナミック・パブリッシングのメリットとスタティック・パブリッシングの併用

Movable Type のダイナミック・パブリッシング機能を利用することで、再構築処理が大幅に削減、あるいは不要になることについて、ご存知の方も多いと思います。これを利用すればブログでよくみかける「再構築に時間がかかる」とか「500エラーになる」という問題が減るかもしれません。*1

ただし、ダイナミック・パブリッシングはページ表示時にデータベースから情報を収集し、再構築を行なうため、アクセスが多いとその分サーバに負荷がかかります。「キャッシュ機能」や「条件付きGET」を利用すればこの問題を解消することは可能ですが、本来的にはアクセスの多いメインページやRSSフィードはスタティック・パブリッシング(静的なファイルを出力)にすることが望ましいと考えます。

特にレンタルサーバを使用する場合、この条件が重要になってきます。ダイナミック・パブリッシングはページ表示を PHP で処理するのですが、PHP が CGI で稼動するレンタルサーバでは、モジュール版で動作する場合よりレスポンスがやや遅く、サーバにも負荷がかかります。詳細は「PHP における「モジュール版」と「CGI 版」の比較 + WordPress の適用例」をご覧ください。

Movable Type の良い点は、アーカイブ別にダイナミック・パブリッシング/スタティック・パブリッシングを選択できることです。
先に述べたように、メインページやRSSフィードはスタティック・パブリッシングにし、カテゴリー・アーカイブや日付アーカイブ等をダイナミック・パブリッシングにするといった、アクセスに応じて柔軟な対応が可能です。

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

ここからが本題です。そういう訳で個人的には Movable Type のダイナミック・パブリッシング機能は非常に優れていると感じているのですが、利用するにあたっては問題がひとつあります。それは

ダイナミック・パブリッシング対応のMTプラグインが少ない

ということです。ここで言う「MTプラグイン」は、変数タグ・コンテナタグ・条件タグといった、テンプレートに記述するMTタグを提供するものを指します。

ダイナミック・パブリッシングを行う場合、標準のMTタグは Perl で実装されたプログラムを処理するのではなく、PHP(Smarty)が動作します。Movable Type のインストールアーカイブに php/lib ディレクトリがあると思いますが、この配下にダイナミック・パブリッシング用のタグおよびグローバルアトリビュートのプログラムが配置されています。

したがって、MTタグを提供するプラグインをダイナミック・パブリッシングで利用する場合、標準のMTタグと同様に PHP の実装が条件となります(プラグインに php ディレクトリが存在すれば多分対応しています)。
現在、当サイトで公開している「Movable Type プラグイン一覧」で挙げているプラグインは 200 を越えていますが、多くのプラグインが対応していないのではないかと推測します(私自身然り)。またこれがダイナミック・パブリッシングがメジャーにならない要因のひとつでかもしれないと懸念しています。

前置きが長くなりましたが、この問題を解消する方法等についていくつか紹介したいと思います。同時にダイナミックパブリッシングに精力的に活動されているサイトも紹介させて頂きます。

1.MTIncludeタグを利用する

これは、ダイナミック・パブリッシングに対応していないMTタグを使ったリスト等を、一旦インデックス・テンプレートにモジュール(部品)として追加し、それをダイナミック・パブリッシングしたアーカイブから MTInclude タグ+ file 属性を利用して引き込むというテクニックです。

このテクニックは下記のサイトで詳しく紹介されています。

WingMemo」さんのところではダイナミック・パブリッシングに関する記事が多く掲載されています。ダイナミック・パブリッシングを検討されている方の手助けになると思いますので是非ご利用ください。

WingMemo

なお、このテクニックで作成したインデックス・テンプレートは必ず「インデックス・テンプレートを再構築するときに、このテンプレートを自動的に再構築する」にチェックを入れてください。
試しに MTCollate を使った「最近のコメント」を出力してみたところバッチリでした。

2.PHP化されたプラグインを利用する

あんちもん2.Lab」さんは、個人プロジェクトとして Perl 版プラグインをダイナミックパブリッシング対応にリファクタリング(PHPize)されているサイトです。

あんちもん2.Lab

これまでにもいくつかの既存プラグインをダイナミック・パブリッシング対応にされており、先の MTInclude で対応できないケースもこのリファクタリングで解決することができます。個人的には大変期待しておりますので、「このプラグインをダイナミック・パブリッシング対応して欲しい!」とお願いすれば作ってもらえるかもしれません。*2

3.Perl 版ダイナミックパブリッシングを利用する

The blog of H.Fujimoto」さんで配布されている、Perl 版のダイナミック・パブリッシングを利用することで、ダイナミック・パブリッシングに対応していないプラグインをそのまま利用することができます。

The blog of H.Fujimoto

ダイナミックパブリッシングの今後

サイトを訪問する側からすればストレスなくページが表示されることが好ましいので、全ページをスタティック・パブリッシングとするのが望ましいのですが、大量の記事を有するサイトでの運営の効率化を考慮すると、ダイナミック・パブリッシングは今後益々有効な手段として利用されていくのではないでしょうか。

私自身、サイトのダイナミック・パブリッシング化を検討していますし(それ以前に3.3にアップグレードしなければですが)、冒頭に述べたモジュール版 PHP がレンタルサーバ界に普及することが、Movable Type に限らず、ページを動的生成するブログがスタティック・パブリッシングに近づくための重要な要素のひとつであると思います。


*1:サーバのスペックによっては解消しない場合もあります。
*2:元サイトの配布プラグインのライセンスによっては対応できないものもあります。

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


トラックバック

ダイナミック・パブリシングの功罪 from WEB Okanos Customize
先に絵文字プラグインMT4.01 MT4.1で書きましたが、絵文字のプラグインがMT標準のダイナミックパブリシングには未対応ということで、いろいろググって... [続きを読む]

Tracked on March 12, 2008 2:39 PM
コメント

こんにちは。いつもお世話になっています。
記事紹介ありがとうございます。

ところで今気がついたのですが、自分の記事の中でperlがparlになっていました(^^;。直しましたので、お時間のある時でいいですからこちらのリンクも修正していただければ嬉しいです。

この機会に自分のエントリー内でPerlとperlがごっちゃになっていたのも全部Perlに統一したのですが、大文字小文字はどちらでもいいのでしょうかね。

[1] Posted by TAEKO : May 10, 2007 11:29 AM

こんにちは。

ちなみに、当Blogでは、現在ではPerl版ダイナミック・パブリッシングは使っていません。
静的再構築を利用してエントリー等のデータをPHPの変数に割り当て、ページにアクセスがあったときに、それらの変数をテンプレートに当てはめるという仕組みをとっています。
再構築がほとんど不要になり、その上負荷も比較的抑えられるというメリットがありますが、テンプレートが複雑になるのがネックです。
現在のテンプレートは<?php ・・・ ?>のオンパレードで、WordPressのようになってしまっています(笑)。

[2] Posted by : May 11, 2007 12:20 AM

>TAEKOさん
こんばんは。
お世話になります。
記事の件、目からウロコでした!
ご質問の件ですが、言語の意味で用いる場合は大文字、コマンドラインから入力する説明で用いる場合は小文字にしています。
あ、リンクも修正しておきました。

>壱さん
こんにちは。
新たな技を駆使されているみたいですね。(笑)
いずれにしても、いかにストレスなく表示させるか(なおかつ自分も楽をする)というのは大事だなと思う今日この頃です。

[3] Posted by yujiro : May 11, 2007 10:13 PM

はじめまして。いつもテンプレートなどありがたく使わせていただいております。

ためしに私もダイナミックパブリッシングというものを導入してみたのですが、ダイナミックパブリッシングの指定をしたアーカイブが全て真っ白なページになってしまったり(FastSearchの検索結果も真っ白なページしか出ません)、そのうち「SSIエラー」なる表示が出たり(SSIが使用できないサーバであるはずなのですが)、カウンタが表示されなくなったり、リロードを繰り返しても更新が反映されなかったりして、残念ながらまともに利用できるようにはなりませんでした。現在は静的な更新へ戻しています。

やはりCGIを完璧に理解できるようなレベルでないとダイナミックパブリッシングを導入するのは難しいのかと感じております。

勿論すんなり導入できる場合もあるかと思われますが、一例としてこんなトラブルもある、ということを書き込んでおきます。

とはいえいつかは導入したいとも思っておりますので、今後もいろいろなトライアルを期待しております。

[4] Posted by PS/B : May 11, 2007 11:20 PM

>PS/Bさん
はじめまして。
貴重な情報ありがとうございました。
またの導入の際には上記サイト等にも問い合わせて、是非実現させたいところですね。
ではでは!

[5] Posted by yujiro : May 12, 2007 1:55 AM

>PS/B様
横から失礼致します。
データベースは何を使われていますか?
SQLiteでダイナミックをオンにすると上記の症状になります。
SQLiteでダイナミックを使われる時はバージョン2をお使い下さい。

niftyのLaCoocanには現時点でSQLite2は入っていません(mt-check.cgiで確認できます)。
MySQLは導入されていますが、ダイナミックに必要なmod_rewriteに対応していませんので、LaCoocanではダイナミック・パブリッシングは使えないと思います。

ダイナミック・パブリッシングに対応したサーバーでチャレンジしてみて下さい。

[6] Posted by TAEKO : May 12, 2007 10:44 AM

TAEKOさん:

なるほどよくわかりましたo[^^]
実はSQLiteが使えないとわかって、MySQLへDBの変換を行った
のですが、もっと以前のサーバ環境(Apacheモジュール)上で
NGだったとは…。

確かに、.htaccessを削除したとたんにカウンタなどのCGIが
使えるようになったので、何らかのサーバ上の制約があるのでは
ないかとは予想しておりました。

ダイナミック・パブリッシングが使える環境が整いましたら
早速実施してみたいと思います。
こちらでご紹介の、Perlを使ったダイナミック・パブリッシングも
軌道に乗りましたらぜひ使ってみたいと思います。

本来のエントリと違うところでわざわざコメントいただき、
大変感謝しております。
これからも宜しくお願い致します。

[7] Posted by PS/B : May 14, 2007 9:27 PM
コメントする
greeting

*必須

*必須(非表示)


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

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

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

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