MODX Evolution

MODX Evolutionとは、オープンソースのコンテンツ管理システム  である。PHPおよびMySQL環境にて動作する。開発チームは、日本版開発者・ウクライナ版開発者を含む3人で構成される。

MODXのひとつで、別バージョンとして、MODX Revolutionがある。

1. 特徴
-----

MODX Evolutionの特徴は以下の通りである。

高速出力
省メモリ設計
コンパクトなパッケージサイズ
HTMLエクスポート機能

2. CMSとしての機能
------------

2.1. デザインワークとの親和性
-----------------

テンプレートの作り方は「編集可能領域」をコンテンツ部分として埋め込むDreamweaverの方式とよく似ており、普通のHTMLのタグをほぼそのまま利用できる。投稿画面上の各フィールドとテンプレート上の動的出力部分が直結している。[*pagetitle*] [*content*]

たとえば上記のように記述した場合、投稿画面上の「リソース名」と「内容」が、テンプレート上ではそれぞれpagetitleとcontentに対応している。CMS独自のルールを通さず、コンテンツと直接つながっているため分かりやすい。

テンプレートは所属カテゴリーなどに縛られることなく、ページごとに自由に割り当てることができる。ポップアップウィンドウのような単発性の高いページも手軽に作ることができる。

2.2. テンプレートとチャンク
----------------

「テンプレート」と「チャンク」の仕組みはDreamweaverの「テンプレート」と「ライブラリ」の関係に相当する。

[*pagetitle*] [*content*]

たとえば上記のように記述した場合、「特売バナー」という名前のチャンクの内容をそこに出力することができる。この特売バナーをサイト全体の多数のページに貼り付けておけば、バナー呼び出し元のチャンクひとつを書き換えるだけで全てを一括で更新できる。

2.3. 静的構成のサイトを意識
----------------

自由なURLカスタマイズ・高度なキャッシュ制御による高速出力などにより、MODXによって作られたサイトは通常のhtmlファイルで静的に構成されたサイトと見分けがつかないものにできる。エクスポート機能を使うことにより実際に静的なサイトを作ることもできる。

2.4. コンテンツ構造
------------

多くの有名CMSのコンテンツ構造が制限なくコンテンツを追加していけるスタック型であるのに対し、MODXはサイトの全貌を直感的に把握しやすいツリー型を採用している。WindowsやMacなどPCのファイルシステムがツリー構造であるのとイメージが近く、CMS初心者には理解しやすい構造である。必ずしもリソースの頂上がサイトのトップページになるわけではなく、ツリー内のどのページでも、自由にトップページに指定できる。

MODXのコンテンツ構造は単純さを重視している。「カテゴリーとエントリー」といった概念はないし、出力されるコンテンツがモジュールによって違うこともない。すべて「リソース」によってサイト全体が構成される。リソースはMovable Typeでいうところの「エントリー」のようなものであるが、リソース間には親子の関係はあるものの、親リソース独自の属性・サブリソース独自の属性といったものはない。全てのリソースが対等であるため、リソースの移動・複製・削除は自由にできる。

2.4.1. 動的コンテンツ
--------------

Dreamweaverなどのオーサリングツールでは不可能な、自在なコンテンツコントロールによる動的コンテンツが作れる。新着情報のページをひとつ作ればトップページにも自動的にリンクを張る、などといった運用は簡単である。それは他のCMSでも可能だが、MODXではこれらの動的ギミックを、個々のページとテンプレートの区別なくパーツ感覚で手軽に貼り付けられ、柔軟に使える。たとえばナビゲーションスニペットはテンプレートに貼り付けるといいが、新着情報一覧スニペットはトップページに貼り付けるだけでいい。

2.5. 管理画面
---------

一般的なCMSと、MODXの管理画面の雰囲気は異なる。Ajax技術を活用し、デスクトップアプリケーションに近い操作性を実現している。コンテンツ管理の考え方が単純なため、通常のCMSのように管理画面を設計すると扱いづらい。これを管理画面の操作性で補う考え方になっている。たとえば、任意の記事に対する編集・削除・複写・移動・公開・非公開などの基本操作は、２～３クリック程度で簡単にできるようになっている。

2.6. スニペット
----------

ページ単位で手軽に設置できる「スニペット」と呼ばれる動的出力パーツも特徴のひとつである。スニペットは普通のphp文がほぼそのまま記述でき、MODXのAPIも利用すれば自由度の高い動的サイト作りが簡単に実現できる。配布されているスニペットも多く、その大半はFTPすら利用することなく、管理画面から簡単なコピー・ペーストによってコードを貼り付ければ使用できるようになっており、簡単にインストールできる。ただし高度な働きを持つスニペットは複数のファイルにより構成されており、インストールに際してFTP操作等が必要なものもある。

2.7. チャンク
---------

スニペットと違い、静的なHTML文によって書かれるパーツ的なもの。Dreamweaverでいうところの「ライブラリ」のような使い方をする。たとえば複数ページにスポット的に挿入したいバナーなどに利用する。チャンクの中身を書き換えると、呼び出し先のページの出力も書き換わる。Dreamweaverと同じように、チャンクはリソースにもテンプレートにも手軽に貼り付けることができる。ヘッダやフッタ、ナビゲーションなどをチャンクとしてパーツ化すると、テンプレートをすっきり分かりやすく整理・記述できる。特に複数のテンプレートにより構成するサイトでは便利である。テンプレートを自由に割り当てられるのがMODXの長所のひとつなので、規模の大きいサイトほどチャンクは有効に利用できる。

またチャンクは、パターン出力機能を持つスニペットの出力のひな型として利用することもできる。

2.8. プラグイン
----------

「ページ出力時」など「イベント」に対して動作を関連付けられる「プラグイン」という仕組みがある。たとえばアクセス解析やwiki記法サポートなどに用いることができる。管理画面を操作する場合のイベントにも割り当てられるため、たとえばTinyMCEなどWYSIWYGエディタの実装にも用いられる。スニペットが使われるのがページ単位でありページ内の任意箇所にトリガー的に記述するものであるのに対し、プラグインはサイト全体の機能拡張にも用いられるのが特長のひとつでもある。

2.9. モジュール
----------

MODXの管理画面内に、アプリーケーションのように「モジュール」を追加できる。MODXがもともと持っている機能や画面を拡張するプラグインとは仕組みが全く異なり、モジュールは自らが持つ画面そのものが実体であり、プラグインほどはMODXの働きに密接には関係しない。たとえば「商品管理の画面を作りたい」といった場合にモジュールとして実装するとよい。

2.10. テンプレート変数
--------------

いわゆる「カスタムフィールド」である。多くのCMSが「タイトル」「内容」などといった項目で個々のエントリーを構成するが、MODXではこうした項目の設定をかなり柔軟にできる。テキストフィールドやリストメニュー・チェックボックスなど、入力に用いるインターフェイスを自由に選ぶことができ、出力もフィルター的に自由にコントロールできる点は他のCMSではあまり見られない特長である。たとえば、もしその項目を入力しなかった場合は項目ごと出力しないなどといった制御が簡単にできる。この出力コントロールの仕組みは「ウィジェット」と呼ばれ、CMSならではの出力コントロールを実現するものである。ただしウィジェットで提供される処理はコア内部でハードコーディングされているため自由度には欠ける。自由度を求める場合は、テンプレート変数をスニペットに渡して処理するか、PHxのモディファイアを通すとよい。

2.11. ユーザ管理
-----------

ロール概念に則ったユーザ管理。運営に携わるメンバーを管理するユーザ体系と、会員制サイトなど利用者としての参加を管理するユーザ体系の2つを持つ。ユーザ単位で割り当てられる属性は多く、きめ細かい。思いつく限りの自在なコントロールが可能。

3. 日本版Evolution・ウクライナ版Evolution・ClipperCMS
------------------------------------------

ローカライズ版として開発が始まった[1]は、本家版の開発が停止している間に独自の改善が多数搭載され、現在では実質的にフォーク版となっている。ロシア語圏でも同様の動きがあり、[2]が配布されている。[3]は、日本版・ウクライナ版の開発者が共同で開発を進めている。フォークであることを最初から明示してプロジェクトが始まった[4]や実験的なフォークプロダクトである[5]などもあり、Evolution系のCMSは本家版を含めて合計で5つ存在する。

4. 脚注
-----

5. 関連項目
-------

MODX
MODX Revolution

6. 外部リンク
--------

[6]
[7]
[8]
[9]
[10]
[11]
[12]