Movable Type Plugin 開発基礎(その2)

 プラグインを作成するには、それなりのお作法があります。お作法を守らないと「帰ってください。」と言われますのでお作法をきちんと学びましょう。
 まずは、プラグインの作り方の最初の最初でありまして、Movable TypeのプラグインとしてMTがファイルを認識するというところまでを勉強します。プラグイン設置方法(アップロードの方法)は各所情報がたくさんありますので割愛。
  1. Movable Type Plugin 開発基礎(その1) 概要
  2. Movable Type Plugin 開発基礎(その2) プラグインとして認識するファイルを書いてみる

プラグインのファイル名

 プラグインのファイル名はxxx.plとします。YAMLでもプラグインを作成することは可能ですがここではPerlを使ったプラグインの作成方法を紹介しているからです。xxxのファイル名は何でも構いません。しかしプラグイン名やIDなどと連動して名前をつけないとおかしなことになるので注意。また後ほど説明します。

パッケージ名の指定

 PerlでかかれたファイルをMovable Typeのプラグインとして認識させるには、パッケージ名を明示的に指定します。
package MT::Plugin::<パッケージ名>;
(例)package MT::Plugin::test_plugin;    #パッケージ名の指定
まずこのようにしてパッケージ名を指定します。Perlに限らず最近のスクリプトはみんなそうなのですが、名前空間(Name Space)を分けて変数の処理をするようにしています。例えばMTに複数のプラグインを導入している場合には他のプラグインでどのような変数が使われているかわかりません。仮に$stringsなどいう如何にも使い勝手のよさそうな変数名の変数をあなたが使おうとした場合、名前空間をわけていないと変数が重複してしまい期待した動作にならないわけです。ですので、ここであなたのプラグインではあなたの自由に変数を使っていいですよ、というパッケージの宣言とパッケージ名の指定をします。指定したパッケージ内ではMovable Typeで使用されている変数名を気にすることなく自由にあなたはスクリプトを書いてゆくことができます。

モジュールの宣言

 Perlにはモジュールという概念があります。細かい話は後回しにしたとしても、ここで使用するモジュールとはPerlで作られた巨大なサブルーチン(関数)だと思えばよいです。それでも理解できない場合は、ある種のメソッドだと思えばいいです。正確にはかなり間違っていますが...。
 このモジュールを使用する際にはPerlではuseを使います。ここでは二つのモジュールを組み込んでいます。一つはプラグイン開発とは直接関係のないstrictですが、これはPerlの正しい文法を強制させるものです。デバックなどが楽になるのでuse strictは一応読み込んでおいた方が無難です。use strictを使うとどうなるのかというと変数の宣言や文法の正しい使い方を強制させられますので、慣れないとエラーが多くてなかなか開発が進みませんが慣れてくると致命的なミステイクを的確に探せるようになります。
use strict;
 もう一つのモジュールはbaseです。baseはクラスの継承を行います。といっても何のことやらわかりませんが、つまりはMT::PluginというMovable TypeがCMSとしてすでの保持している機能の一部を継承して拝借してしまおうということなのです。use base (<継承するクラス>)という文法ですでに定義されているクラスの機能を継承できるのです。これは先のName Spaceの話とかぶりますが、Name Spaceを分けると変数の重複などを避けることができると言いましたが、同時に機能も分かれてしまいます。そのためせっかく長々と書いたスクリプトの機能が分かれてしまっては困るという場合にはその機能の一部を継承し使えるようにできるというわけです。クレバーな話ですね。
use base qw( MT::Plugin);
 MT:Pluginというすでに定義済みのクラス(モジュール)をプラグインの機能として使えるようにします。また逆にこの継承を行わないとプラグインとして機能しないということになります。

プラグイン情報の設定

 なんかオブジェクト指向っぽくなってきました。勿論これはオブジェクト指向なのです。詳細な概念はさておき、ここではいろんな設定要素を初期化してから設定してプラグインとしての原始的な設定をします!ということをしていると覚えればよいです。
my $plugin = MT::Plugin::<パッケージ名>->new({
  ...
});
 まずはパッケージ名を入力します。先ほど指定したパッケージ名をセットします。それ以外のパッケージ名をつけると困ったことになります。せっかく先ほど宣言したのでわがままをいわずそのパッケージ名をセットしてください。
(例)
my $plugin = MT::Plugin::test_plugin->new({
  ...
});
 パッケージ名をセットしたら、今度はその内容としてid、key、nameを指定します。
my $plugin = MT::Plugin::<パッケージ名>->new({
    id        =>    '<ID>',
    key        =>    '__PACKAGE__',
    name    =>    '<パッケージ名>',
});
 IDはこのペッケージに関して固有のIDを指定します。自由に設定できますが、パッケージ名と関連するIDの方がわかりやすいです。keyでは最初の段階ではいつも'__PACKAGE__',で構いません。nameも自由に設定できますが関連する名前に設定します。
(例)
my $plugin = MT::Plugin::test_plugin->new({
    id        =>    'test_plugin',
    key        =>    '__PACKAGE__',
    name    =>    'test_plugin',
});

機能を追加する

 プラグインとして絶対行わないといけないことは機能の追加です。特に機能を追加しなくてもいいというのでしたらプラグインは必要ないからです(笑)。ここで以下のように機能を追加します。現段階では機能の部分は空っぽになっています。機能は後から追加してゆくとしてここではお作法だけを覚えましょう。
MT->add_plugin($plugin);
 この一行でOKです。

返り値を設定

 これはMovable Typeのプラグインとしてのお作法ではなくPerlのお作法ですが、各呼び込みファイルは最後に必ず返り値として1を返してあげます。通常のスクリプトですと、return 1;みたいな書き方をしますが、Perlの場合は、
1;
だけで大丈夫です。ちなみに「返り血」という変換をしてしまいがちなので注意してください。

プラグインファイルの保存と設定

 ここまでの全体を表示するとこんな感じになります。
package MT::Plugin::test_plugin;    # パッケージ名の指定

use strict;
use base qw( MT::Plugin);             # 機能の継承をする
my $plugin = MT::Plugin::test_plugin->new({
    id        =>    'test_plugin',        # パッケージのID
    key        =>    '__PACKAGE__',        # だいたいいつも同じ
    name    =>    'test_plugin',        # パッケージ名
});

MT->add_plugin($plugin);      # プラグインの機能を追加する
1;    # 返り値
 このファイルを「test_plugin.pl」というようなファイル名で保存しておきます。保存したファイルはMTのプラグインディレクトリにアップロードします。たいていの場合 ./public_html/mt/plugins内だと思います。ファイルのパーミッションは644で大丈夫で実行権限は必要ありません。
 所定の場所にアップロードした後に、ダッシュボードの「システム」→「ツール」→「プラグイン」からプラグインとして認識されているか確かめてください。指定したプラグイン名で読み込まれていたら成功です!
plugin_dev.jpg





プロフィール



  • Name :: 山上オサム ♂(37)
  • Hobby :: 武術
  • Work :: Web Designer