Module::Pluggableを使って、プラグインを実現する

Perl 5.10以降には、プラグインモジュールの仕組みを簡単に実現する事ができるModule::Pluggableが標準モジュールとして導入されています。

このモジュールを使うと所謂プラグインモジュールを読み込むための仕組みが簡単に実装する事が出来ます。

以下、使い方。こんな構成でサンプルプログラムを用意しました。

$ tree
.
|-- bin
|   `-- Main.pl
`-- lib
    |-- SomeModule
    |   `-- Plugin
    |       `-- Plugin1.pm
    `-- SomeModule.pm

各ファイルの役割は以下の通りです。

  • Main.pl

単にSomeModuleクラスを呼び出しているだけのメインスクリプト。

  • Plugin1.pm

プラグインの実体です。

  • SomeModule.pm

プラグインを呼び出すモジュールです。

Main.plは単にSome::Moduleを呼び出す。

$ more Main.pl 
#!/usr/bin/env perl

use strict;
use warnings;

use lib '../lib';

use SomeModule;

my $app = SomeModule->new();

$app->plug_method();

SomeModule.pmは、プラグインを利用するモジュールです。Module::Pluggableを使う事で、pluginメソッドが使える様になり、インストールされてるプラグインを自動的に検索し、メソッドを呼び出します。

なお、検索対象のディレクトリは任意に設定する事も出来ます。標準では「モジュール名::Plugin::」配下を検索します。

$ more SomeModule.pm 
package SomeModule;

use strict;
use warnings;

use Module::Pluggable require => 1;

sub new {
        my $class = shift;
        my $self  = {};

        bless $self, $class;

        return $self;
}

sub plug_method {
        my $self = shift;

        foreach my $plugin (__PACKAGE__->plugins) {
                $plugin->your_method();
        }

        return;
}

1;

プラグインの本体です。

$ more Plugin1.pm 
package SomeModule::Plugin::Plugin1;

use strict;
use warnings;

sub your_method {
        print "ya!";
}


1;

本格的に使おうとすると、プラグインの管理(インストール、アンインストール、有効にする、無効にするとか)や、メソッド名の衝突とか、色々と作り込まないといけない事が多いと思いますが、プラグイン数が少ないうちは全部読み込んでしまえば良いので、素のままで使っても大丈夫そうですね。

→Perl To The Peopleのインデックスページへ戻る

トラックバックURL

このエントリーのトラックバックURL:
http://ash.roova.jp/mt/mt-tb.cgi/162

コメントする