はじめに
mojoliciousでアプリの雛形を生成するときのメモです。
ゆーすけべーさんのブログをかなり参考にさせていただきました。
→ PerlのWAFはMojolicious推しな件とそのノウハウAdd
あじぇんだ
- mojoliciousいれる
- Mojolicious::Liteのアプリの雛形を生成する
- Mojoliciousアプリの雛形を生成する
- plenv x carton x Mojolicious x plackupでサラっとおさらい
1. mojoliciousいれる
cpanmなんかが入ってれば打つだけですね。
$ cpanm Mojolicious
2. Mojolicious::Liteのアプリの雛形を生成する
Mjolicoius::Liteはお試しで何か作ってみたい場合なんかは重宝しますね。
生成してみる
生成すると1ファイルで完結したアプリが生成されます。
$ cd アプリを置きたいディレクトリ $ mojo generate lite_app hoge.pl $ ls -l -rwxr--r-- 1 hoge 1522739515 545 8 9 15:45 hoge.pl
どんなのができるか
- hoge.pl
#!/usr/bin/env perl use Mojolicious::Lite; # Documentation browser under "/perldoc" plugin 'PODRenderer'; get '/' => sub { my $c = shift; $c->render(template => 'index'); }; app->start; __DATA__ @@ index.html.ep % layout 'default'; % title 'Welcome'; <h1>Welcome to the Mojolicious real-time web framework!</h1> To learn more, you can browse through the documentation <%= link_to 'here' => '/perldoc' %>. @@ layouts/default.html.ep <!DOCTYPE html> <html> <head><title><%= title %></title></head> <body><%= content %></body> </html>
起動してみる
生成したままmorboコマンドで起動できるのでお手軽!
$ morbo hoge.pl Server available at http://127.0.0.1:3000
3. Mojoliciousアプリの雛形を生成する
ある程度のアプリを作成する予定ならMjolicoiusアプリの方を生成します。
まずは普通に
冒頭に参考としてのせたゆーすけべー先生のアプリ構成で生成するのがオススメですが
まずは普通に生成してみます。
生成してみる
$ cd アプリを置きたいディレクトリ $ mojo generate app Hoge $ ls -l drwxr-xr-x 8 hoge 1522739515 272 8 8 19:14 hoge
どんなのができるか
Mjolicoius::Liteと違い、1ファイルではなくフレームワークっぽい構成で生成してくれます。
$ tree ./hoge ./hoge ├── lib │ ├── Hoge │ │ └── Controller │ │ └── Example.pm │ └── Hoge.pm ├── log ├── public │ └── index.html ├── script │ └── hoge ├── t │ └── basic.t └── templates ├── example │ └── welcome.html.ep └── layouts └── default.html.ep
起動してみる
こちらもmorboコマンドで起動を確認できます。
一見、何を起動するのかわかりずらいですが、上記の構成でいうと./hoge/script/hoge
が起動ファイルになっています。
# hogeの一個上の改装からだと # Can't find application class "Hoge" in @INC # とclassへのパスが見えないので注意 $ cd ./hoge $ morbo script/hoge Server available at http://127.0.0.1:3000
ブラウザでアクセスしてこんな感じに表示されると思います。
フォルダ構成を工夫する
こちらがゆーすけべー先生のアプリ構成ですね。
非常にいいです。
生成してみる
$ cd アプリを置きたいディレクトリ # ::Webをつける $ mojo generate app Fuga::Web $ ls -l drwxr-xr-x 8 hoge 1522739515 272 8 9 16:03 fuga_web
どんなのができるか
上記のふつうに生成した場合と見比べてみるとわかりやすいですが、
アプリ名::Web
と指定して生成すると./アプリ名_web/lib/アプリ名/Web
な感じにディレクトリを切ってくれます。
こうすることで例えばDB系のモジュールを作成する際は
./アプリ名_web/lib/アプリ名/DB
のように後からディレクトリを切りやすくなりますね。
tree ./fuga_web/ ./fuga_web/ ├── lib │ └── Fuga │ ├── Web │ │ └── Controller │ │ └── Example.pm │ └── Web.pm ├── log ├── public │ └── index.html ├── script │ └── fuga_web ├── t │ └── basic.t └── templates ├── example │ └── welcome.html.ep └── layouts └── default.html.ep
起動してみる
plackupでの起動もOKです。
$ plackup -p 3000 ./script/fuga_web HTTP::Server::PSGI: Accepting connections at http://0:3000/
4. plenv x carton x Mojolicious x plackupでサラっとおさらい
plenvやcartonの詳細は書きませんが
plenvからcpanm、cartonからmojoliciousを使いたいときもあるかと思います。
ここまでの流れをplenvでperl 5.18.4入れるところからサラっと書いておさらいします
# plenvでperl5.18.4をインストール $ plenv install 5.18.4 $ plenv local 5.18.4 # plenv経由でcpanmインストール $ plenv install-cpanm # plenv経由でcartonインストール $ plenv exec cpanm Module::Install $ plenv exec cpanm Carton # cpanfile作る&Plackインストール $ echo "requires 'Task::Plack';" > cpanfile $ plenv exec carton install # 念のためrehash $ plenv rehash # plackup立ち上げる(アプリがないので怒られるがplackupが動いてればok) $ carton exec plackup # cpanfileに追記してMojoliciousのインストール $ echo "requires 'Mojolicious';" >> cpanfile $ plenv exec carton install # mojoliciousアプリのgenerate $ carton exec mojo generate app Hoge::Web # mojoliciousアプリの起動 $ carton exec plackup -p 3000 ./script/hoge_web
こう見ると結構サラっといけますね。
補足
perlbrew、plenv、cartonあたりを入れてみたい場合は下記も参考にしてみてください。
まとめ
mojoliciousはわかりやすくてサラっと入れられるしいろいろ便利です。
Mjolicoius::Liteを使えばさらにライトなのでmock作成するときなんかもサラっといけますね!