« 子供に対する怒りって? | IE7をインストールしてみた »

Movable Typeでダイナミック・パブリッシング

Posted by 琉羅 at 2007年04月13日 16:28

はじめにでも少し述べましたが、当ブログではサイトマップ以外のページはダイナミック・バブリッシング(動的生成)によりページを表示させております。このダイナミック・パブリッシングによるメリットは色々とあるのですが、

  1. 再構築が不要
  2. スタティック(静的)生成と違って、サーバーにファイルを保存しない

この2つが大きいな理由ではないかと思います。特に1.はMovable Typeを使い続ける限り向き合っていかなければならない問題で、エントリー数が増えれば増えるほど、この再構築に頭を悩まされることになります。

しかし、このダイナミック・パブリッシングにもデメリットはあります。

  1. Perlプラグインがそのままでは利用できない
  2. ページの表示がスタティックに比べて遅くなる

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さんが作成されている、

のプラグインを利用することで解決できます。ただし、このプラグインはPerl版ダイナミック・パブリッシング専用です。それ以外で利用することができませんのでご注意ください。

最後に

これで、当ブログのダイナミック・パブリッシング化は完了しました。現状でも全く問題無く動作しており、再構築不要で非常に快適です。このようなプラグインを多数開発されているThe blog of H.Fujimotoさんには、この場を借りて改めて御礼申し上げます。

それと余談になりますが、Movable Type本来のダイナミック・パブリッシングでも、実はPerlプラグインが利用できたり、ページ分割できたりするそうです。詳細は、

をご覧いただければ。しかし、お手軽にダイナミック・パブリッシング化したいなら、小難しい知識不要な今回ご紹介した方法が私的に一押しですね。

トラックバック

CAPTCHA
トラックバックスパム防止のため、末尾の XXXXXX 部分を上記画像の数字に置き換えてからご利用ください。お手数ですがご協力よろしくお願いいたします。

コメント
TAEKO

初めまして。
トラックバックありがとうございます。
ダイナミック・パブリッシング、いいですよね。

Perl版ダイナミック・パブリッシングがあるのは知っていますが、私は以下の理由でMT標準ダイナミックを使っています。
1.Perl版はcgiなので、頁表示時のサーバー負荷がMT標準版(PHP版)より大きい。
2.MT標準を使っていないとSix Apartへのバグのフィードバックができない。

MT標準のダイナミックは管理画面からチェックを入れるだけで動作しますので、Perl版よりもはるかに導入はお手軽です。小難しい知識も不要です。頁分割機能もMT標準ダイナミックには最初から備わっていますので、プラグインすら不要です。

最近はダイナミックに対応したプラグインも増えてきてますので、ダイナミックに対して「プラグインが使えない」という表現は時代遅れになりつつあるのでは?と思っています。
初期の頃に広まった誤解や先入観がいまだ根強く残っているようなので、それを少しでもなくすことができたら嬉しいと思っております。

琉羅

>TAKEOさん
初めまして。
わざわざコメントくださり、ありがとうございました。

確かに私も当初はダイナミック・パブリッシングは色々な制約があり、敬遠してた時期もありました。しかし、TAKEOさんのエントリーを見て、MT標準でも今までと同様のことができると教えていただきました。

これからも参考にさせていただくことがあると思いますが、その時はよろしくお願いします。

コメントを投稿

(サラリーマン白書 では不適切なコメントを防止するため、コメントを掲載する前に管理者がコメントの内容を確認しています。コメントを初めて投稿する場合すぐに掲載されませんが、管理者が適切なコメントと判断した場合コメントは直ちに表示されますので、再度コメントを投稿する必要はありません。)

コメントフォーム
*必須

Copyright © 2007 サラリーマン白書, All Right Reserved.