Perl入門ゼミ

  1. Perl
  2. Mojolicious

Mojolicious::LiteからMojoliciousに移行する場合に考えておきたいこと

仕事でMojolicious::Liteでプロトタイピングをはじめて、Mojoliciousに移行させたのですけれど、そのときにこんな風にMojolicious::Liteを記述しておいたほうが移行が楽だったなぁということを書いておきます。ほとんとどの手順はMojolicious::Guides::Growingを見れば大丈夫です。移行してみるとやはりメンテナンス性があがりますね。

URLをコントローラとアクションのふたつの組にしておく

Mojoliciousへの移行を考えている場合は、次のように定義しておくとよいです。ルート名は自動でも設定されますが、ハイフン区切りにしておくと見やすいでしょう。

# Mojolicious::Lite
get '/foo/bar' => sub { ... } => 'foo-bar';

# Mojolicious
$r->get('/foo/bar')->to('foo#bar')->name('foo-bar');

URLにパラメーターを含めるのはもちろんかまいません。アクションとコントローラには影響がありません。

# Mojolicious::Lite
get '/foo/bar/:id' => sub { ... } => 'foo-bar';

# Mojolicious
$r->get('/foo/bar/:id')->to('foo#bar')->name('foo-bar');

以下のように3つにしてしまったりするとMojoliciousへの移行が大変になります。

# Mojolicious::Lite
get '/foo/bar/baz' => sub { ... } => 'foo-bar-baz';

反対にアクション名がない場合はindexというアクションに対応させるとよいでしょう。

# Mojolicious::Lite
get '/foo' => sub { ... } => 'foo';

# Mojolicious
$r->get('/foo')->to('foo#index')->name('foo');

埋め込まれているテンプレートファイルは自動的にファイルに出力できる

埋め込まれているテンプレートファイルは自動的にファイルに出力できます。自分で記述する必要はありません。

__DATA__

@@ foo-bar.html.ep
<html><body>Hello</body></html>

inflateコマンドを使用します。

perl myapp.pl inflate

出力されたファイルは「foo-bar.html.ep」のようにハイフン区切りになっていますので、「foo/bar.html.ep」のようにコントローラー名を持つディレクトリを作ってその中にアクション名のファイルをいれます。