MTのプラグインを開発したい方に

先日行われたCSS Nite MT4LP5で、私のセッションの後の質疑応答の際に、「プラグインを作ってみたいが、どこから手をつければよいのか」といった質問をいただきました。
この点について整理します。

1.Perlを学ぶ

Movable Typeは、「Perl」という言語で作られたシステムです。
プラグインもPerlで記述します。
したがって、プラグインを開発するには、Perlを使いこなせることが必要です。

しかも、Movable Typeは「オブジェクト指向」という考え方で作られています。
そのため、Perlのオブジェクト指向プログラミングについても、ある程度の理解が必要です。

Perlは歴史が長い言語で、多くの人が使っていますので、情報はかなり豊富です。
解説書も豊富にありますので、本を片手にPerlを徐々にマスターすることから始めてみていただきたいです。

個人的には以下の本がお勧めです。

初めてのPerl初めてのPerl
オライリー・ジャパン
3,780円

Perlの基本を解説したものです。

続・初めてのPerl 改訂版続・初めてのPerl改訂版
オライリー・ジャパン
3,360円

Perlのオブジェクト指向の入門的な内容になっています。

また、Perlに限らず、プログラミングをマスターするには、とにかく手を動かして実際にプログラムを作ってみることが重要です。
本を全部読んでからではなく、本を少しずつ読みながら、その場その場でプログラムを作っていくと良いでしょう。
また、いきなり自分でゼロからプログラムを作るのではなく、本に書いてあるコードを少し変えて動かしてみるなどすると、より理解しやすいと思います。

もっとも、Perlを熟知していないとならないかと言えば、そうでもありません。
かく言う私もPerlはさほど得意ではなく、見よう見まねでやっている面も多々あります。

2.プラグイン開発に関するドキュメント

Perlをある程度マスターしたら、プラグイン開発に進みます。
その際には、Movable Typeの内部構造や、プラグイン開発の一般的な作法など、知っておくことが必要な情報があります。

MOVABLETYPE.ORGのサイトには、「Movable Type Developer Guide」というコーナーがあります。
このコーナーには、プラグイン開発の基本や、各種のプラグインの開発手順、またMovable Typeのオブジェクトの仕様などが掲載されています。
英語なのでわれわれ日本人には読むのがつらい面もありますが、そこはぐっと我慢です。

また、日本のシックスアパートのサイトにも、3.3時代の情報ではありますが、以下のようにプラグインの開発に関する情報があります。
4.xでは「レジストリ」という仕組みが導入されていて、その点は3.3とは異なりますが、それ以外の基本的な考え方は3.3と同じですので、以下の情報も参照すると良いでしょう。

さらに、Movable Type本体のソースコードや、他の人が作ったプラグインのソースコードも、お手本として非常に役に立ちます。
私も、他の方のソースコードを読み漁って、いろいろな技をいただいています。

ちなみに、Movable Typeのソースコードを見る場合、以下の2つが特に重要です。

  • MT_DIR/lib/MT/Template/ContextHandler.pm

    Movable Type標準のテンプレートタグは、すべてこの中で定義されています。

    テンプレートタグを拡張したい場合に、このソースコードが見本になります。
  • MT_DIR/lib/MT/App/CMS.pm

    Movable Typeの管理画面のコードです。

    管理画面をカスタマイズしたい場合に、参考になります。

3.プラグインの雛形を作る「MTPlugin-Starter」

Movable Typeのプラグインでは、ファイルの配置方法や、必要なファイルなどに、定型的な「お作法」があります。
このような定型作業を、プラグインを作るごとに毎回行うのは、面倒なことです。

そこで、プラグインの雛形を簡単に作成できるツールとして、エムロジック(株)の「エムロジック放課後プロジェクト」で「MTPlugin-Starter」が公開されています。
いくつかの質問に答えるだけで、プラグインの雛形を作ってくれる優れものです。

ただし、MTPlugin-Starterを実行するには、シェル上でPerlを起動することが必要です。
Linux等、Perlを実行できる環境が必要になります。
また、こちらで試した限りでは「YAML」と「Template」の2つのPerlモジュールをCPANからインストールすることも必要でした。