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」のようにコントローラー名を持つディレクトリを作ってその中にアクション名のファイルをいれます。