Movable Typeでダイナミック・パブリッシング
Posted by 琉羅 at 2007年04月13日 16:28
はじめにでも少し述べましたが、当ブログではサイトマップ以外のページはダイナミック・バブリッシング(動的生成)によりページを表示させております。このダイナミック・パブリッシングによるメリットは色々とあるのですが、
- 再構築が不要
- スタティック(静的)生成と違って、サーバーにファイルを保存しない
この2つが大きいな理由ではないかと思います。特に1.はMovable Type
を使い続ける限り向き合っていかなければならない問題で、エントリー数が増えれば増えるほど、この再構築に頭を悩まされることになります。
しかし、このダイナミック・パブリッシングにもデメリットはあります。
- Perlプラグインがそのままでは利用できない
- ページの表示がスタティックに比べて遅くなる
1.については今回ご紹介する方法で回避できます。2.についてはサーバーの能力に直接関わってくる問題ですので、実際にダイナミック・パブリッシングを利用していないと分かりませんが、当ブログはさくらインターネット
のスタンダードプラン(DBはSQLite)で運営しており、ある程度の参考になるかと思います。
それでは具体的な導入方法についてですが、今回ご紹介するのはさくらインターネット
(ライトプランはPHPが利用できないため不可)で利用することを前提に説明させていただきますので、その点はご注意ください。
Perl版ダイナミック・パブリッシングの入手
今回ダイナミック・パブリッシングを導入するに当たり、Movable Type
が最初から実装している機能ではなく、The blog of H.Fujimotoさんが作成されたプラグインを利用します。何故このプラグインを利用するのかというと、前述した「Perlプラグインがそのままでは利用できない」というデメリットが無くなるからです(MTのプラグインはほとんどがPerl)。
Perl版ダイナミック・パブリッシングの詳細や動作環境についてはThe blog of H.Fujimoto:再構築不要化カスタマイズ(全SQL対応・その1)を熟読の上、下記よりプラグインをダウンロードしてください。
Perl版ダイナミック・パブリッシング導入前の準備
ダウンロードして解凍した後、プラグインをインストールする訳ですが、その前にさくらインターネット
を利用している場合は、まずサーバーにアップロードされている全てのphpファイルの属性(パーミッション)を755に変更しておきます。
その後、mt/mt-confing.cgiの一番最後に
HTMLUmask 0022
DirUmask 0022
HTMLPerms 0777
と付け加えます。さくらインターネット
ではPHPにもCGIと同様、属性に755を与えておかないと"500 Internal Server Error"となってしまいますが、上記を付け加えることによりMTで生成されるファイルに自動的に属性755が付加されるようになります。
更に、ダイナミック・パブリッシング化する各テンプレートの先頭部分に
<?xml version="1.0" encoding="<$MTPublishCharset$>"?>
のようなXML宣言がある場合は削除するか、下記のように修正しておいてください。
<?php echo '<?xml version="1.0" encoding="<$MTPublishCharset$>"?>'."\n" ?>
ダイナミック・パブリッシングはPHPを利用してページを生成するので、<?~?>で囲まれた部分はPHPの構文として誤認識してしまい、結果
Parse error: parse error, unexpected T_STRING in .../index.php on line 1
のようなエラーが出てしまいます。
これでさくらインターネット
でダイナミック・パブリッシングを導入する準備は整いました。
Perl版ダイナミック・パブリッシングの導入
準備が完了したらThe blog of H.Fujimoto:再構築不要化カスタマイズ(MT3.3専用版・不具合修正&FastCGI対応)を参考に、プラグインをインストールします。インストール自体はそれほど難しいものではありませんので、説明どおりに作業すれば問題ないでしょう。
1つ注意しなければならないのは、さくらインターネット
の場合は生成される.htaccessファイルの記述に問題がある箇所があります。具体的には「8.Perl版ダイナミック・パブリッシングの初期化」が完了した時点で.htaccessファイルが自動で生成(書き換え)されますが、下記の赤字部分"Options -Indexes +SymLinksIfOwnerMatch"の一行を
## %%%%%%% Movable Type generated this part; don't remove this line! %%%%%%%
# Disable fancy indexes, so mtview.php gets a chance...
#Options -Indexes +SymLinksIfOwnerMatch
<IfModule mod_rewrite.c>
# The mod_rewrite solution is the preferred way to invoke
# dynamic pages, because of its flexibility.
:
"#"でコメントアウト(青字)して、.htaccessをサーバーにアップロードし直してください。これを忘れるとやはり"500 Internal Server Error"となってしまいます。この辺りの詳細は下記サイトをご参考ください。
これでダイナミック・パブリッシングの導入は完了しました。ブラウザで確認して無事にページが表示されていればOKです。
Perl版ダイナミック・パブリッシングの注意点
問題なく導入できればそれでいいのですが、私もつまづい点がいくつかありました。当ブログはダイナミック・パブリッシングの導入前にSSIを利用してモジュール化していたのですが、これらがことごとくNG。ダイナミック・パブリッシング自体がPHPで動作しているので考えてみれば当たり前のことだったんですが、当初は訳が分からず困りました。で、肝心なのはPHPでモジュール化している場合もNGだということです。
具体的には、通常PHPでインクルードする場合、
<?php include("<$MTBlogURL$>filename.php"); ?>
などと記述するんですが、ダイナミック・パブリッシングの場合は、MT本来のテンプレート・モジュールを利用し、
<$MTInclude module="モジュール名"$>
と書き直してやれば問題なく動作します。
それに加えてPHP化していた方は、多くの方がMTPaginateプラグインを利用してページ分割をされていると思いますが、これはPerl版ダイナミック・パブリッシングでも利用することができません。ページ分割を利用するには、同じくThe blog of H.Fujimotoさんが作成されている、
- The blog of H.Fujimoto:ページ分割プラグイン(Perl版ダイナミック・パブリッシング専用)・その1
- The blog of H.Fujimoto:ページ分割プラグイン(Perl版ダイナミック・パブリッシング専用)・その2
のプラグインを利用することで解決できます。ただし、このプラグインはPerl版ダイナミック・パブリッシング専用です。それ以外で利用することができませんのでご注意ください。
最後に
これで、当ブログのダイナミック・パブリッシング化は完了しました。現状でも全く問題無く動作しており、再構築不要で非常に快適です。このようなプラグインを多数開発されているThe blog of H.Fujimotoさんには、この場を借りて改めて御礼申し上げます。
それと余談になりますが、Movable Type
本来のダイナミック・パブリッシングでも、実はPerlプラグインが利用できたり、ページ分割できたりするそうです。詳細は、
をご覧いただければ。しかし、お手軽にダイナミック・パブリッシング化したいなら、小難しい知識不要な今回ご紹介した方法が私的に一押しですね。
トラックバックスパム防止のため、末尾の XXXXXX 部分を上記画像の数字に置き換えてからご利用ください。お手数ですがご協力よろしくお願いいたします。
>TAKEOさん
初めまして。
わざわざコメントくださり、ありがとうございました。
確かに私も当初はダイナミック・パブリッシングは色々な制約があり、敬遠してた時期もありました。しかし、TAKEOさんのエントリーを見て、MT標準でも今までと同様のことができると教えていただきました。
これからも参考にさせていただくことがあると思いますが、その時はよろしくお願いします。
2. Posted by 琉羅
at 2007年04月16日 07:54



初めまして。
トラックバックありがとうございます。
ダイナミック・パブリッシング、いいですよね。
Perl版ダイナミック・パブリッシングがあるのは知っていますが、私は以下の理由でMT標準ダイナミックを使っています。
1.Perl版はcgiなので、頁表示時のサーバー負荷がMT標準版(PHP版)より大きい。
2.MT標準を使っていないとSix Apartへのバグのフィードバックができない。
MT標準のダイナミックは管理画面からチェックを入れるだけで動作しますので、Perl版よりもはるかに導入はお手軽です。小難しい知識も不要です。頁分割機能もMT標準ダイナミックには最初から備わっていますので、プラグインすら不要です。
最近はダイナミックに対応したプラグインも増えてきてますので、ダイナミックに対して「プラグインが使えない」という表現は時代遅れになりつつあるのでは?と思っています。
初期の頃に広まった誤解や先入観がいまだ根強く残っているようなので、それを少しでもなくすことができたら嬉しいと思っております。
1. Posted by TAEKO at 2007年04月14日 11:09