KOJIKA17

WordPress vs MovableType という疑問

と1ヶ月以上前の記事ですが、上位100ブログの半数がWordPress~「TypePadとMovableTypeは消滅」予測もという記事がありました。

MovableTypeは思い入れのあるCMSです。
消滅されると悲しいので、私なりの視点で気になった概要を書いてみます。

(以後、文章中では一部の文言をWordPressをWP、MovableTypeをMTと省略します。)

ライセンス・金額

WordPress

WPは、WordPress.orgのインストール型のWPを知っている方がほとんどだと思いますが、WordPress.comではホスティングサービスも行っています。
WordPress.orgは、GPLライセンスのオープンソース。
WordPress.comはブログを作るだけなら無料で使えます。

  • WordPress.com(限定的な機能): 無料
  • WordPress.org: 無料

MovableType

MTは、商用で使う場合は有料のライセンスが必要になりますが、個人用ライセンスも用意されており、個人で使用する場合は無料で使えます。
またMTはオープンソース版もあり、ライセンスはWP同様のGPLライセンスです。

  • 商用ライセンス: ¥63,000~
  • 個人用ライセンス: 無料
  • MTOS(MovableTypeオープンソース): 無料

Dynamic(動的)とStatic(静的)

WordPress

WordPressは動的生成です。
動的生成とは、ユーザーの要求によって変動する情報を提供するページのことです。

WPの場合は、PHPを利用して、データベースから情報を取得し、ページを生成します。
ページを表示するたびにデータベースを見に行くので、記事、テンプレートを編集をすると、すぐにその変更が反映されます。

しかしデータベースを毎回見にいくと、サイトの規模やアクセス数が大きくなるにつれて、サーバーに負荷がかかり、ページの表示が重くなる可能性もあります。キャッシュさせるなどの、WPの高速化に関する記事も多く出ているので参照しておくと良いでしょう。

MovableType

MTは基本的には静的生成です。
静的生成とは、データベースの情報をもとに、ファイルとしてページを生成することです。

MTの場合は、「再構築」を行うことで、サーバー上にファイルを生成することが可能です。
生成するファイルの拡張子は、デフォルトではhtml形式になっていますが、css, js, xml, php, aspなどテンプレートの出力形式を個別で好きなように変更し、出力することができます。

ただし、静的生成なので再構築を実行しなければ、ページの変更が反映されません。その仕様上、様々な場面で再構築が必要になり、サイトの規模が多きくなれば、それだけ再構築の時間が長くなります。

また、さくらインターネットやロリポップなどの共用サーバーだと、1つのブログに数百件以上の記事を入れると再構築ができなくなる可能性も出てきます。あらかじめ記事数やサイトの規模が大きくなることが想定される場合は、複数のブログを作れる特徴を生かして記事を分散させたり、キャッシュの設定するなど、あらかじめ再構築への何らかの対策が必要になります。

再構築の問題はありますが、ファイルを生成するので、アクセス数が大きくなったとしても、サーバーの負荷はほぼ関係ありません。
またシステムに何らかの異常が起こったとしても、サイトのファイルはサーバー上に存在しているので、閲覧自体には問題ありません。

テンプレートの記述

WPの記述方法はPHPになります。

MTのシステムはPerlで書かれていますが、テンプレート上でPerlを書くことはほとんどなく、MTMLという、HTMLに近い記述になります。

WPの記事一覧の記述

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<article>

<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<p><time pubdate><?php the_time('Y-m-d'); ?></time></p>

<div class="entry">
<?php the_content(); ?>
</div>

<p class="postmetadata">category: <?php the_category(', '); ?></p>

</article>
<?php endwhile; else: endif; ?>

MTの記事一覧の記述

<MTEntries>
<article>

<h1><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></h1>
<p><time pubdate><$MTEntryDate format="%Y-%m-%d"$></time></p>

<div class="entry">
<$MTEntryBody$>
</div>

<p class="postmetadata">category: 
  <MTEntryCategories glue=", ">
    <a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$></a>
  </MTEntryCategories>
</p>

</article>
</MTEntries>

上記のソースコードで、同じHTMLソースが出力されます。
注目すべきところは、カテゴリ部分の記述の仕方になります。
WPはコード1つでaタグとカテゴリ名まで出力されるのに対し、MTはHTMLでaタグの記述まで必要になります。

より分かりやすい記述の比較を例に出します。

WPのカテゴリ一覧の表示

<ul>
  <?php wp_list_categories(); ?>
</ul>

MTのカテゴリ一覧の表示

<ul>
  <li class="categories">カテゴリー
    <ul>
    <MTCategories>
      <li class="cat-item cat-item-<$MTCategoryID$>"><a href="<$MTCategoryArchiveLink$>"><$MTCategoryLabel$></a></li>
    </MTCategories>
    </ul>
  </li>
</ul>

WPとMTで出力されるHTML

<ul>
  <li class="categories">カテゴリー
    <ul>
      <li class="cat-item cat-item-1"><a href="http://localhost/wp/?cat=1" title="category1に含まれる投稿をすべて表示">category1</a></li>
      <li class="cat-item cat-item-2"><a href="http://localhost/wp/?cat=2" title="category2に含まれる投稿をすべて表示">category2</a></li>
      <li class="cat-item cat-item-3"><a href="http://localhost/wp/?cat=3" title="category3に含まれる投稿をすべて表示">category3</a></li>
    </ul>
  </li>
</ul>

WPはタグによってHTMLまで表示してくれるのに対し、MTのタグは決まったものしか出力ません。
そのため、MTはHTMLまで記述する必要があります。

例えば、状況によってclass="cat-item"を外したいと思う時があります。
WPはPHPで記述し直さなければなりません。
逆にMTはHTMLまで書いてるので、class="cat-item"を修正するだけです。
また今回はHTMLですが、MTならxmlや他の言語に置き換えることが容易にできます。

「それならHTMLまで出さないMTの方がいいじゃないか」という意見も出そうですが、そうではありません。

WPでHTMLを自動で出力するものには、カレント表示(現在位置表示)などを自動でつけてくれます。

例えばWPの場合、「category1」のページにいるとすると、

<ul>
  <li class="categories">カテゴリー
    <ul>
      <li class="cat-item cat-item-1 current-cat"><a href="http://localhost/wp/?cat=1" title="category1に含まれる投稿をすべて表示">category1</a></li>
      <li class="cat-item cat-item-2"><a href="http://localhost/wp/?cat=2" title="category2に含まれる投稿をすべて表示">category2</a></li>
      <li class="cat-item cat-item-3"><a href="http://localhost/wp/?cat=3" title="category3に含まれる投稿をすべて表示">category3</a></li>
    </ul>
  </li>
</ul>

という形で、「category1」のリストには、current-catというclassを自動でつけてくれます。
MTの場合、カレント表示をするなら自前でコードを書かなければなりません。
HTMLを全て出力するWPと、HTMLを出力しないMT、一長一短あります。

CMSとして使う場合

WordPress

WPはコンテンツ配信のプラットフォームとして、高度なカスタマイズが可能なシステムとして発達してきた印象です。
デフォルトではブログとして十分な機能を持っていると思います。

しかしCMSとして扱う場合、ブログのように構築してしまうと、コンテンツの投稿に関して、どこか使いづらさが目立ってしまいます。
WordPressの高度なカスタマイズ性を生かし、マルチサイト化やカスタム投稿タイプやタクソノミーでより使いやすい管理画面にすることができます。
プラグインでこれらの拡張を容易に実装できるものもあります。

CMSのテーマの制作に関しては、雛形のテンプレートを元に子テーマを使ってテーマを拡張しながら構築したり、コンテンツごとに違うテンプレート(カスタムテンプレート)を設定を変更、自由なメニューがドラックアンドドロップでできるカスタムメニューで制作者以外でもメニューが追加しやすくなります。

さらにWordPress公式プラグインディレクトリだけでも19,000個以上のプラグインと数多くのプラグインが存在します。
豊富なプラグインを使い、カスタマイズしていくことも可能です。

MovableType

MTはver.4で、グローバルテンプレートやマルチサイトという形式をとりやすくなりましたが、まだブログという概念が強くありました。
現在のver.5でウェブサイトとブログという2つの構造により、CMSのプラットフォームとして発展してきている印象です。

MTは、システムの中に並列でウェブサイトというものが存在します。
そしてその子の中にブログを作ることができます。

MTのシステムの中に、複数のウェブサイトとブログを作ることができますが、マルチサイトという概念が強くあるため、親と子、兄弟のサイトから、記事の一覧などを容易に取り出すことができます。
MTをCMSとして使用する場合、コンテンツごとにブログで区切って、管理するという方法もあります。

テンプレートの階層も[グローバル], [ウェブサイト], [ブログ]と分けられ、それぞれのテンプレートを設定、または共有ができます。
ただ、マルチサイト化しやすい分、管理画面を多く移動することも出てくるかもしれません。
またデフォルトで再構築する場合は、そのウェブサイト(ブログ)のダッシュボードに移動して、再構築をしなければなりません。構築、運営を考えて、MultiBlogプラグインによる再構築トリガーの設定や、複数再構築のできるプラグインを入れることも考慮すると良いでしょう。

WPほど、管理画面をカスタマイズすることができませんが、デフォルトでのカスタムフィールドは充実しています。
(MTOS - オープンソース版 - はカスタムフィールドを使用できませんが、プラグインを入れることで同じような形式を取れます。)
MTのカスタムフィールドは、細かく設定できます。

カスタムフィールド
  • 場所(カスタムフィールドをどこに追加するか)
    • ブログ記事
    • ウェブページ
    • コメント
    • アイテム
    • オーディオ
    • ビデオ
    • 画像
    • カテゴリ
    • フォルダ
    • テンプレート
    • ブログ
    • ウェブサイト
    • ユーザー
  • 投稿形式
    • テキスト
    • テキスト(複数行)
    • チェックボックス
    • URL
    • 日付と時刻
    • ドロップダウン
    • ラジオボタン
    • アイテム
    • 画像(PDF, ビデオ, オーディオ)
  • 必須項目
  • カテゴリの判別

MTをCMSをとして使う場合には、カスタムフィールドを使うことによってできることの幅が広がります。

これら以外にも、ドラッグアンドドロップでのカテゴリの並び替えや、ブログ記事からテンプレート、アイテムまでを、正規表現や、日付範囲を指定して検索/置換が行えたりと、デフォルトだけでも機能が揃っています。

スマートフォン対応

WordPress

スマートフォン表示に対応してくれるプラグインが複数存在します。バグなどもあるので、複数試してみて最適なものを選んだ方がいいかもしれません。
カスタム投稿タイプなどを使用している場合は、プラグインを使用している場合でも、スマートフォン用のテンプレートを制作する必要があります。

MovableType

MTはフィーチャーフォン・スマートフォン対応の公式プラグインが出ています。
商用の場合、モバイルパック単体なら¥84,000。
個人やMTOSなら、無料で利用できます。
ただ、プラグインを使わずに、MTのテンプレート出力の自由度を生かしてスマートフォンに対応したサイトを構築することも可能です。

メディアアップロード

WordPress

画像投稿が複数からドラッグ&ドラッグで投稿可能で、アップロード先は、主にwp-uploadに格納されます。
サムネイルはメディアで設定することにより、切り出してくれます。テンプレート側で指定する場合は、メディアで指定された最も近い数値からHTMLでリサイズされます。
適切にリサイズされるように、カスタマイズも可能です。

MovableType

MTの場合は、画像アップロードは一つずつ入れることになるので、プラグインを入れておくと良いでしょう。
またアップロードした画像の保存先は、そのブログのURLの直下以降なら自由に変更可能ですが、アップロードフォルダなどは、毎回指定しなければなりません。
クライアントによっては、毎回指定せずにそのままアップロードして、ドメイン直下のサーバーのディレクトリに画像が、ずらり...ということも起こり得るので、対策をしておいた方が良いかもしれません。

まとめ

WordPress

WPは豊富なテーマやプラグインによって、コードを触らなくても様々なデザインのサイトを作ることができます。
WPをベースにプラグインなどを使って、お問い合わせフォームからECサイト、Webサービスまで、多種多様なページを作ることも可能です。

WP自体の開発スピードも速く、WordPress 3.4も楽しみです。 またPHPを覚えるきっかけにもなりやすいので、WP以外にも今後の応用がききやすいのもメリットです。

MovableType

MTのシステムはPerlでできていますが、Perlを触れなくても、MTタグを組み合わせるだけで、CMSを構築できます。

「WPでプラグインを入れれば、MTに似たようなこともできる」という声もあると思います。カスタムフィールドや記事の検索などのMTの機能はWPのプラグインでも再現可能です。
その気になればWPの管理画面をカスタマイズして、MT以上に使いやすいCMSにすることも可能でしょう。

ただそうなると多くのプラグインを探したり、入れたり、管理画面の開発のコストがかかってきます。
MTの場合はデフォルトで多くの機能を揃えているので、WPほどプラグインを入れる必要も少ないと思います。

また静的で出力されることによって、サーバーの負荷の軽減と静的ファイルとして「ログ」を残すことができます。データベースに何かあっても、サイトのコンテンツファイルなどが残るというのは、心強いです。

現在、MTの開発ブランチでは、PSGI対応を進めており、パフォーマンスの向上が期待できそうです。

プラグイン開発やデータベース、セキュリティなど、別の視点から見た場合、違った見方もできると思います。
内容的に足らないところもあると思いますが、深くつっこむとキリがないので、個人的に気になった概要を書いてみました。

WordPressとMovableTypeの対比を書いても「どちらが優れている」とかやっぱりピンときません。
WordPressが選ばれきてるのは、柔軟なカスタマイズ性によって、目的を達成しやすいということも納得しています。

ただメリットとデメリットを考えて、MovableTypeのことを思い出してくれたら嬉しいなと思います。