技術情報提供ブログ

プラグイン開発のためのファーストステップ

シックス・アパートの柳下(やぎした)です。

今回は、プラグイン開発のファーストステップとして、プラグインの開発の全体像を紹介します。

プラグインの種類について

プラグインは、特定の機能や限定された機能をMovable Typeに追加する小さなソフトウェアです。Movable Typeのプラグインには、次の種類があります。

テンプレート・タグ プラグイン

標準で提供されているテンプレート・タグを拡張したり、他システムからのデータを取得するテンプレート・タグを追加できます。たとえば、GoogleやYahoo!が提供するAPIを利用し、該当のエントリーに関連する検索結果をエントリーに埋め込むことができます。

フィルター プラグイン

Movable Typeには、グローバル・タグ・アトリビュートとして、dirifyやpadのように様々なフィルターが用意されています。独自のフィルターを適用することで、スペル・チェックやアンカーリンクの自動付加などの処理を追加できます。

Transformer プラグイン

たとえば、Widget Managerプラグインのように、管理画面をカスタマイズし、独自の機能を追加できます。

スパム フィルター プラグイン

SpamLookupプラグインのように、独自の判断基準による迷惑コメント/トラックバックの処理を追加できます。

プラグインのディレクトリ構造について

プラグインのディレクトリ構造は、Movable Typeのそれをベースにしています。MyPluginというプラグインを例に、ディレクトリ構造を整理してみましょう。

MT_DIR/
|__ (plugins)/
|  |__ MyPlugin/
|     |__ MyPlugin.pl
|     |__ my_plugin.cgi
|     |__ lib/
|     |  |__ MyPlugin.pm
|     |__ tmpl/
|        |__ config.tmpl
|
|__ mt-static/
|  |__ (plugins)/
|     |__ MyPlugin/
|        |__ styles.css
|        |__ images/
|        |  |__ logo.jpg
|        |__ js/
|           |__ myplugin.js
|
|__  php/
   |__ plugins/
      |__ init.my_plugin.php
プラグイン・スクリプト

アプリケーション・ディレクトリの下のpluginsディレクトリに、スクリプトを格納するディレクトリを作成し、その中にプラグイン・スクリプトを設定します。このpluginsディレクトリは、環境変数PluginPathで自由に変更ができます。また、各種クラス・ライブラリを格納するlibディレクトリや、画面表示のためのテンプレート・ファイルを格納するtmplディレクトリが、本ディレクトリの下に用意します。

スタティック・ファイル

画像やスタイルシート、JavaScriptなどのスタティック・ファイルは、スタティック・ディレクトリ(例: mt-static)の下のpluginsディレクトリに、プラグインの名前と同じディレクトリを作成し、その中にプラグイン・スクリプトを設定します。このpluginsディレクトリは、環境変数PluginPathで自由に変更ができます。また、必要に応じて、画像を格納するimagesディレクトリを個別に用意することもできます。

ダイナミック・パブリッシング対応スクリプト

プラグインがダイナミック・パブリッシングをサポートする場合、アプリケーション・ディレクトリの下のphp/pluginsディレクトリに、smartyに対応したファイル名でプラグイン・スクリプトを設定します。

プラグインの開発の手順

プラグインの開発は、次の手順でおこないます。

  1. Movable TypeのAPIリファレンスを参考に、Perlスクリプトを記述します。Movable TypeのAPIリファレンスは、perldoc形式でスクリプトに格納されており、次の例のように画面に表示できます。

     $ cd lib
     $ perldoc MT.pm

    また、以下のサイトでも公開しています。(APIリファレンスは、日本語訳を順次公開する予定です。)

  2. 作成したPerlスクリプトを、拡張子.plで保存(例: MyPlugin.pl)します。スクリプトの保存先は、プラグインの名前からわかりやすいディレクトリ(例: MyPlugin)にします。前述のディレクトリ構造を参照してください。

  3. プラグインがテンプレート・タグやテキスト・フィルターの場合は、ダイナミック・パブリッシングをサポートするために、PHPスクリプトも記述します。作成したスクリプトは、Perlスクリプトとは別のディレクトリに保存しましょう。

  4. 画像やスタイルシート、操作マニュアルや制限事項等を記載したリリースノート等を用意します。操作マニュアルやリリースノートは、プラグインを利用する方にとってとても重要なものです。しっかり、準備しましょう。

  5. 配布用のパッケージを作成します。ディレクトリ構造を含めて、tar.gz形式またはzip形式に圧縮しましょう。

はじめてのプラグイン

Movable Type 3.2からプラグインの管理が容易になり、特定のプラグインの実行の可否を管理画面で設定できます。Movable Typeの管理画面でプラグインを管理するには、プラグインの登録という処理を事前にしなければいけません。

はじめて作るプラグインは、このプラグインの登録のみをおこなうプラグインです。


# Sample Plugin: Plugin registration
#

package MT::Plugin::MyPlugin01;

use strict;
use MT;
use vars qw($VERSION @ISA);

@ISA = qw(MT::Plugin);
$VERSION = '1.0';

my $plugin = new MT::Plugin::MyPlugin01({
  name => 'Sample Plugin: registration',
  version => $VERSION,
  description => "Sample: Plugin registration",
  author_name => 'Plugin author',
  author_link => 'http://www.example.com/about/',
  doc_link => 'http://www.example.com/docs/',
});
MT->add_plugin($plugin);

1;

ほとんどの行が、ルールのようなものですから、前述のプラグイン開発の手順に従い保存してください。保存する際には、最後の行が1;であることを忘れないでください。

次に、新しくオブジェクトを作成した際に、指定する値について解説します。

name

プラグインの名前を定義します。

version

プラグインのバージョンを定義します。

description

プラグインの概要を記述します。このプラグインがどんな機能を提供するかを、簡単に解説します。

author_name、author_link

プラグインの作者の名前や作者のホームページへのリンクを定義します。プラグインを解説するページがある場合、author_linkの代わりにplugin_linkを定義してもかまいません。

doc_link

プラグインのマニュアル、リリースノート等のドキュメントへのリンクを定義します。プラグインを利用する上で重要なものなので、必ず設定するようにしましょう。

プラグイン開発のベスト・プラクティス

最後に、プラグインを開発する上でのベスト・プラクティスともいえるノウハウを紹介します。

  • プラグインの名前の先頭にMT-を付けるのはやめましょう。
  • 管理画面上で制御ができるように、プラグインの情報の登録を必ずしましょう。
  • マニュアルやリリースノートへのリンクを必ず用意しましょう。
  • プラグインに独自の設定をおこなう場合は、Movable Typeの管理画面上で設定するようにしましょう。
  • プラグインを実行するためのCPANモジュールは最小限にし、バージョンの差異による問題をおさえるようにしましょう。
  • バージョン間の互換性を維持するために、Movable Type APIリファレンスに従って開発するようにし、直接データベースにアクセスすることは避けましょう。
  • バージョン間の互換性を維持するために、Movable Typeのデータベースへの書き込みは最小限にしましょう。
  • ログイン名やパスワードの情報へのアクセスは避けましょう。
  • プラグインはコンパクトに開発しましょう。これは、使用するメモリーの量をおさえ、パフォーマンスを高めるためです。
  • Movable Typeは、多くのPerlのバージョンの環境で動作するように考慮されています。たとえば、use baseを使わないように、利用するPerlのバージョンを限定しないように開発しましょう。
  • 多くのユーザーの方がダイナミック・パブリッシングを利用しています。テンプレート・タグやテキスト・フィルターのプラグインを開発する際は、ダイナミック・パブリッシングをサポートするようにしましょう。
  • 投稿者 yagishita
  • カテゴリー Plugin

トラックバック

トラックバック URL

コメント

上記サンプルコードですが

> use MT;

use MT::Plugin

ではないでしょうか?

コメント投稿

本エントリーに関係のないご質問はサポートにお願いします。また、Movable Type に関するフィードバックは専用フォームよりお願い致します。

コメント投稿フォーム:

このページのトップへ