About Dancer2(ja)
この記事は、Perl5 Advent Calendar 2015 の20日目の記事です。
Web Application Framework の Dancer2 について紹介したいと思います。
まずは、YAPC::Asia 2014 の LT から。 こちらは、Dancer2 のリリースマネージャーの SawyerX による、Dancer2の超速紹介です。 Dancer2 の要点が凝縮されたLTです。
目を凝らすとこんなスライドが見えます。DSLで、ルーティングを記述します。
package MyApp;
use Dancer2;
get '/' => sub {
template index => {
name => 'Sawyer X',
event => 'YAPC::Asia'
}
};
JSON を返却するようなAPIも簡単に用意できます。
package MyApp::API;
use Dancer2;
set serializer => 'JSON';
get '/' => sub {
return {
hello => 'world',
}
};
Dancer2 は Plack化されているので、plackupできます。
# app.psgi
use MyApp;
my $app = MyApp->psgi_app;
plackup app.psgi
ここまでが、LTの抜粋です。
Dancer2 は、元々、Ruby のSinatra を Perl に port した Dancer の次バージョンです。 Dancer の DSL はほぼそのままに、設計面での調整が大幅に入っています
例えば、以下のような対応が行われています。
- Plack 対応
- DSL 実装を、Top 空間から、Dancer2::Core::DSL に分解
- Moo 採用
- デザインパターンの調整(デメテルの法則…)
この対応に関して、2011 年の Dancer Advent Calendar にて、(超訳ですが)「全部書き換えるぞい」という記事があります。
利用者が多数のプロダクトにおいて、こういった完全な書き換えは、個人的な興味をそそりました。 今現在も活発に開発され、Dancer という名前を冠するPerl カンファレンスも開かれています。
Dancer を作った sukria のポスト。
最近の開発状況の話。
(Dancer2::XS ってあって、すごいってなった)
もう少し、Dancer2 の特徴を触れて、記事を終わりにしたいと思います。 (と言っても、ほぼ、2014 年の dancer advent calendar ((SawyerX の一人アドベントカレンダー。つよい。)) からの抜粋です。
fatpack、つまり一枚スクリプトにするのをサポートしています。 (なので、XSモジュールは、recommend 扱いです)
ポータビリティを考えると良い選択になるかもしれません。
コマンドラインで利用も考慮されています。
use Dancer2;
warn config->{environment}; # => development
warn dancer_version; # => 0.165000
複数のアプリケーションの同居が考慮されています。 Dancer2 に appname を渡すことで、config やdbh などが、appname ごとに管理されます。
以下の例だと、 MyApp::Foo1, Foo2 で、一つの Dancer2::Core::App obj が作られ、 Bar にもう一つの Dancer2::Core::App obj が作られます。
package MyApp::Foo1 {
use Dancer2 appname => 'foo';
get '/' => sub { ... }
}
package MyApp::Foo2 {
use Dancer2 appname => 'foo';
get '/' => sub { ... }
}
package MyApp::Bar {
use Dancer2;
get '/' => sub { ... }
}
まとめ
- なんだか Dancer2 楽しそうだぞ
明日は、akihiro_0228 さんです。