MovableTypeとPHPの相性が抜群な件

Movable Typeの再構築が嫌でWordPressに移っちゃう人って結構いるんじゃないかな?正直なところ、ブログウェアとして見るならMovable TypeよりもWordPressの方が優れていると思う。

現行のMovable Type5はウェブサイトとブログの二重構造で、それぞれにテーマ(テンプレート)が必要で、再構築は別々で、ウェブサイトとブログの連携は簡単じゃなくて、と、ブロガーがMTから離れたがるのも納得できる。もっと言ってしまえばCMSとしても成熟していない。

でもね、Movable TypeをPHP化して出来ることはWordPress以上だと思ってる。例えば、再構築の遅さを解消できるのはもちろん、プラグインに依存しがちなことも、ウェブサイトとブログの連携も、簡易的な記事検索機能も、メール送信プログラムだって、テーマ(テンプレート)を工夫するだけで出来ちゃう。

もうMovable TypeがPHPファイルを運用するために作られたといっても過言ではないくらい相性がいい。

今回は再構築を例に、どのくらいMovable TypeがPHPと相性がいいのかWordPressと比較しながら語りたいと思う。

まず、Movable Typeを構成するcgiファイルとWordPressを構成するphpファイルは、サーバーサイド・スクリプトと呼ばれるサーバーで処理されるプログラム。

WordPressはブログの管理からHTMLデータの出力までPHPで処理してる。対して、Movable Typeはブログの管理とhtmlファイルの出力をCGI(Perl)で処理してる。

ここで重要なのは、HTMLデータを出力するのかhtmlファイルを出力するのかという点。WordPressで管理しているのはhtmlファイルではなく、HTMLデータそのもの。アクセスされる度に動的にHTMLデータを生成するという仕組みになっている。という訳で再構築というプロセスが全く必要ない。

逆に、Movable Typeはアクセスされるhtmlファイルをあらかじめ出力するという仕組みなっている。これが再構築ってやつ。

例えるなら、WordPressはレストランで、Movable Typeは弁当屋みたいなもの。WordPressは注文(アクセス)される度に料理(HTMLデータ)を作る。Movable Typeはあらかじめ注文(アクセス)されるであろう弁当(htmlファイル)を作っておく。

で、問題はサーバーの仕事量(負荷)だ。注文(アクセス)が少ない内はレストラン(WordPress)も弁当屋(Movable Type)もそんなに大差ない。が、注文(アクセス)が多くなるとレストラン(WordPress)の方が忙しくなる。なぜって、一度に料理(HTMLデータ)を何百何千と作るのはそりゃ大変だろう。でも、例えば数千種類の弁当(htmlファイル)をあらかじめ用意するのも大変だ。

どちらも大変であることに違いはないが、どの時点でサーバーに仕事させるのかが違う。

WordPressの場合、そもそもが動的にHTMLデータを生成するというソフトウェアな訳だから、選択の余地がない。アクセスがどんなに増えようがサーバーに頑張ってもらうしかない。

しかし、Movable Typeは違う。Movable Typeにはダイナミック・パブリッシングと呼ばれる動的生成もできる。これはあらかじめ弁当(htmlファイル)を用意しないで、注文(アクセス)される度に料理(HTMLデータ)を作る(つまり再構築をしないで済む)。

そしてPHP化すれば、ブラウザに送られるHTMLデータを100%としたとき、50%を再構築で作り、残りの50%をサーバーに処理してもらうなんてやり方ができる。結果として再構築が速くなるってこと。

そして、その比率はテーマ(テンプレート)の作り方次第でどうにでも変えられる。アクセスが少ないなら再構築時に30%アクセス時に70%、逆にアクセスが多いなら、再構築時に70%アクセス時に30%、みたいにね。

ちょっと抽象的すぎて分からないかもしれないので具体例を挙げると、ヘッダー・フッター・サイドバー・メインコンテンツを別々のファイルとして再構築しておき、アクセスがあった時に1つにする。あるいはサイドバーとサイドバー以外を別々のファイルとして再構築しておき、アクセスがあった時に1つにする。みたいなこと。

どういう風にページを分割・構成するかによって、再構築時とアクセス時の仕事量が変えられるという訳。

さらに、再構築するページ量を削減するために、WordPressのテンプレートタグのように関数化することもできる。

↓functions.php
<?php function head() { ?>
  <meta />
  <meta />
  <title></title>
  <link />
  <link />
  <script />
  <script />
<?php } ?>
<?php function header() { ?>
  <header>
    <h1></h1>
  </header>
<?php } ?>
<?php function sidebar() { ?>
  <aside>
    <section>
      <h1></h1>
    </section>
    <section>
      <h1></h1>
    </section>
  </aside>
<?php } ?>
<?php function footer() { ?>
  <footer>
    <p></p>
  </footer>
<?php } ?>
  
↓index.php
<?php include('/function.php'); ?>
<!DOCTYPE html>
<html lang="ja">
  <head>
    <?php head(); ?>
  </head>
  <body>
    <?php header(); ?>
    <article>
      <h1></h1>
    </article>
    <?php sidebar(); ?>
    <?php footer(); ?>
  </body>
</html>

ちょっとザックリとした例だけど。これはずいぶん前に紹介したMTSetVarTemplateで独自タグを作るのに似ている。けど、アクセス時に処理されるという点で違う。

関数には引数、WordPressのテンプレートタグで言うところのパラメータも設定できるので、アイデア次第で色んな独自タグが作れます。

WordPressのテンプレートタグもどきを作って、WordPressのテーマをMovable Typeのテーマとしてほぼそのままのカタチで移植なんてことも可能だと思います。

いかがでしょうか?Movable TypeをPHP化してガッツリいじりたいと思ってもらえたら、この記事も書いたかいがあるってもんです。