技術情報提供ブログ
プラグイン開発のためのファーストステップ
シックス・アパートの柳下(やぎした)です。
今回は、プラグイン開発のファーストステップとして、プラグインの開発の全体像を紹介します。
プラグインの種類について
プラグインは、特定の機能や限定された機能を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に対応したファイル名でプラグイン・スクリプトを設定します。
プラグインの開発の手順
プラグインの開発は、次の手順でおこないます。
Movable TypeのAPIリファレンスを参考に、Perlスクリプトを記述します。Movable TypeのAPIリファレンスは、perldoc形式でスクリプトに格納されており、次の例のように画面に表示できます。
$ cd lib $ perldoc MT.pmまた、以下のサイトでも公開しています。(APIリファレンスは、日本語訳を順次公開する予定です。)
作成したPerlスクリプトを、拡張子.plで保存(例: MyPlugin.pl)します。スクリプトの保存先は、プラグインの名前からわかりやすいディレクトリ(例: MyPlugin)にします。前述のディレクトリ構造を参照してください。
プラグインがテンプレート・タグやテキスト・フィルターの場合は、ダイナミック・パブリッシングをサポートするために、PHPスクリプトも記述します。作成したスクリプトは、Perlスクリプトとは別のディレクトリに保存しましょう。
画像やスタイルシート、操作マニュアルや制限事項等を記載したリリースノート等を用意します。操作マニュアルやリリースノートは、プラグインを利用する方にとってとても重要なものです。しっかり、準備しましょう。
配布用のパッケージを作成します。ディレクトリ構造を含めて、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


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