Perl歴1年の自分がMojolicious触ってみた感想2

Perl歴1年の自分がMojolicious触ってみた感想 - She is not Gorilla.

これの続き、実際どういう手順で書いたか。

準備

まずはPlackとMojoiiciousを入れる。

cpanm plack
cpanm Mojoiicious

雛形を作る。

mojo generate app MySyte

mojo generate app <アプリケーション名>で雛形ができる。 ちなみにアプリケーション名はCamelケースじゃないと怒られる。 my_siteの中にできた雛形はこんな感じになっていた。

[my_syte] tree                                                                                                          .
├── lib
│   ├── MySyte
│   │   └── Example.pm
│   └── MySyte.pm
├── log
├── public
│   └── index.html
├── script
│   └── my_syte
├── t
│   └── basic.t
└── templates
    ├── example
    │   └── welcome.html.ep
    └── layouts
        └── default.html.ep

動かす

それぞれのファイルは次で見るとしてまずは立ち上げてみる。

plackup script/my_syte

http://0.0.0.0:5000/ を見るとこんな画面が出ているはず。

aaa

一体何が生成されたのか

ではgenerateコマンドで何が出来たのか、一個一個見ていく。

lib

ロジックを規定しているコードが置かれている。ファイルを見た感じ、lib/MySyte.pmでルーティングを設定するらしい。

$r->get('/')->to('example#welcome');

lib/MySite/Example以下にコントローラがある。あろうことか自分はここにロジックを書きまくってしまったんだけどそんなことはしていけない。ダサいからすぐ直そう。

log

ここにはログが入るらしい。今回は使っていない。

public

index.htmlという静的ファイルが入っていたのでここには静的ファイルが入るんだろうと思ったんだけどどうやらそうみたい。javascriptとかCSSとか、後404.htmlもここに入る。

t

以下のテストを行うテストスクリプトが入ってた。今回はいじっていない。

$t->get_ok('/')->status_is(200)->content_like(qr/Mojolicious/i);

templates

*.html.epってあるからして分かるけどここにはテンプレートが入ってる。

実際書く!

全部の説明をしてしまうと結構長くなってしまうので簡潔にまとめる。 getで何かの値を送るフォームはこんな感じで書いた。

<%= form_for  '/get' => (method => 'get') => begin %>
     <%= text_field 'artist', placeholder => 'input artist you like.' %>
     </br>
     <%= submit_button 'OK', class => 'btn btn-primary' %>
<% end %>

送った値はコントローラーのgetっていうサブルーチン内で受け取る。

sub get {
  my $self = shift;
  artist => $self->param('artist'),

modelでごにょごにょした値はrender関数にハッシュで渡して格納してあげる。

$self->render(tracks => $track_url, artist => $artist);

渡った値はget.html.ep内でデリファレンスしてあげるなりなんなりして展開する。

<p class="lead">They are Based on <%= $artist %></p>

こんなふうに書いていって最終的にはこんな構成になった。 footerとheaderはsharedっていうファイルに入れておのおののtemplate内でincludeするようにした。

├── lib
│   ├── HoundCloud
│   │   └── Index.pm
│   └── HoundCloud.pm
├── public
│   ├── css
│   │   ├── bootstrap
│   │   │   ├── bootstrap-responsive.css
│   │   │   ├── bootstrap-responsive.min.css
│   │   │   ├── bootstrap.css
│   │   │   └── bootstrap.min.css
│   │   └── houndcloud.css
│   └── js
├── script
│   └── hound_cloud
├── t
│   └── basic.t
└── templates
    ├── index
    │   ├── get.html.ep
    │   └── welcome.html.ep
    └── shared
        ├── footer.html.ep
        └── header.html.ep

最後に

  • MojoliciousはRails程ごってりしていないと思った。チュートリアルも簡単だったのでPerlを少しでも触った人には取っ付き易いと思う。
  • 情報の流れが分かりやすいのでMVCを学ぶにも適しているのでは?と思った。

それとこんなブログを見るよりこちらを読みましょう。自分も今から読みます。

Mojolicious最速マスター - Qiita [キータ]

Mojolicious - Liteでないアプリの実用的なディレクトリ構造一例 - Qiita [キータ]