9
7

More than 5 years have passed since last update.

Mojoliciousのプラグインを作る

Posted at

動作確認できる環境を作る

とりあえず動作を確認できる環境を作る。
アプリディレクトリにPluginディレクトリを追加。

$ mkdir -p lib/Mojolicious/Plugin

libにパスが通っていれば、
app->pluginで普通に読み込まれるようになる。

プラグインのプログラムを書く

プラグインのプログラムは、以下の形式に従うようにする。

  • モジュールの名前を"Mojolicious::Plugin::*"にする
  • Mojolicious::Pluginを継承する
  • registerメソッドを定義する

以下の様なプログラムになる。

lib/Mojolicious/Plugin/Example.pm
package Mojolicious::Plugin::Example;
use Mojo::Base 'Mojolicious::Plugin';

sub register {
    my ($self, $app, $conf) = @_;

}

1;

registerメソッドに処理を書いていく。
helper機能でControllerに新しいメソッドを追加したり、
フック機能で入力や出力のフィルタ処理を追加したりする感じになる。

例: Controllerに新しいメソッドを追加する

helper機能を使うと、Controllerに新しいメソッドを追加することができる。
例えば、PHPのnl2brのようなメソッドを追加するプラグインは以下のようになる。

lib/Mojolicious/Plugin/Nl2br.pm
package Mojolicious::Plugin::Nl2br;
use Mojo::Base 'Mojolicious::Plugin';

sub register {
    my ($self, $app, $conf) = @_;

    $app->helper('nl2br' => sub {
        my ($c, $text) = @_;
        $text =~ s/(\r\n|\n\r|\n|\r)/<br\/>$1/g;
        return $text;
    });
}

1;

これを読み込むと、Controllerにnl2brメソッドが生える。
テンプレート内では、appでControllerにアクセスできるようになっているので、
app->nl2br($txt)という感じで使用することができるようになる。

myapp.pl
use Mojolicious::Lite;
use lib 'lib';

plugin 'Nl2br';

get '/' => sub {
    my $self = shift;

    $self->stash->{txt} = "テスト1\nテスト2\nテスト3\n";
    # ここでも使える $self->nl2br("テスト1\nテスト2\nテスト3\n");

    $self->render();
} => 'index';

app->start;
__DATA__

@@ index.html.ep
<html>
<head><title>テスト</title></head>
<body>
<%== app->nl2br($txt) %>
</body>
</html>

その他

プラグインを読み込む名前空間を追加

自社やアプリ特有のプラグインを作る場合は、
名前空間を"Mojolicious::Plugin"以外にしたいことがあるかもしれない。

以下の設定で、プラグインを読み込む名前空間を追加することができる。

myapp.pl
push @{app->plugins->namespaces}, 'MyApp::Plugin';

お手本プラグイン

標準で入っているプラグインのプログラムを読めば、
どのような機能が作れるか、どのように実装するのかが分かる。
https://metacpan.org/pod/Mojolicious::Plugins#PLUGINS

CPANでMojolicious::Pluginを検索すれば、
他の人が作ったプラグインも見れる。
https://metacpan.org/search?q=Mojolicious%3A%3APlugin

モジュールの形で開発する

Minilaを用いて開発する。
http://blog.64p.org/entry/2013/05/14/080423

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7