##はじめに
「ScalaのフレームワークってPlayしかないよね」ってよく言われたりします。その場では「いや他もいろいろあるよ」って答えますが、自分もPlayしか使ったことが無いので実は他のフレームワークについて全く詳しくて…なのでこの機会で、Play以外他のいろいろについて調べてみました1!
(以下アルファベット順になります)
Chaos
Mesosphere社が出しているRESTサービスを作るためのフレームワーク。最後のコミットがもう一年以上になるのでもう開発止まっているだろうと思いますが名前がすごいのでどうしても書きたくてScalaでRESTサービスを開発するPlayはやりすぎた感がある+他にScalaとの親和性がいいフレームワークがないため作られたそうです。
Colossus
Tumblr社が開発しているI/Oがフレームワーク。いろんなユースケースできますが一番基本とオススメのはマイクロサービスの構築らしいです。
一番基本のコンポネートがInitializer(サーバを起動するための環境設定やセットアップのロジックを持つ)とRequestHandler(リクエストの処理をする)になり、それでサービスを作る感じです。確かにシンプルで単機能のサービスを作るのには向いてそうです。
あと気になるのはI/Oが頻繁に起こるアプリケーションに向いてるという記載があるので、実際のパーフォマンスを検証してみたいですね。今まだ正式版出てないので実際の運用に載せるのは厳しそうですが正式版が楽しみです。
Finatra
Twitter社が出してる、RubyのフレームワークSinatraからインスピレートされた軽量ウェブフレームワーク。自社で作ったFinagleとTwitterServerの上で動きます。Twitter自社のサービスでも使われていることで信頼性が高く、あとTwitterスタイルでウェブアプリケーションを開発できるのも魅力の一つらしいです。ドキュメントを見るとテスト重視な感じで、Feature Testsという、サービスのFeatureにするホワイトボックステスティングとブラックボックステスティングがサポートされます。
Lift
一番の特徴はコントローラーがないことです。(MVCに慣れた人からするとなかなか想像できないかもしれないですね)Viewを先に作って、そこからサーバーサイドで行い処理をsnippetというものに実装して、viewから呼び出し感じです。完全に画面から作っていくview firstのアプローチなので個人的にすごく面白いと思います。
Scalatra
RubyのフレームワークSinatraに似せたScala用のウェブフレーム。こちらも知名度が高いフレームワークだと個人は思っています。わかりやすく、小さく作るのがコンセプトで、7行からアプリケーションを作れるのです(笑)。Playと同じようにMVCウェブアプリケーションを作ることができますが、Playより軽量でパフォーマンスに優れるらしいです。
Skinny Framework
「Scala on Rails」がコンセプトとなるフルスタックウェブフレームワークです。Ruby on RailsのようにMVCパータンで、簡単にすぐアプリケーションを作れるように必要なコンポネートが揃えていますし、環境設定もHomebrewでinstallして終わりますので2、scalaで何か作ってみたい時一番気軽にスタートできるのではないかと思います。
Xitrum
オフィシャルドキュメントからそのまま引用すると「 Netty と Akka をベースに構築された非同期でスケーラブルなHTTP(S) WEBフレームワークです。」またScalatraよりパワフル、 Liftより簡単であることで両者の間のギャップを埋めるのが目的だそうです。
参考したもの
awesome-scala
ウェブフレームワーク以外もScalaのプラグインやライブラリが用途別でまとめられていますので、わかりやすかったです。あと多分一番網羅されていますので大変参考になりました。
終わりに
本当にざっと調べてみただけですが、思った以上にScalaのフレームワーク色々ありました(笑)。Akka Http, http4s, Unfilteredなど一応フレームワークではないので(そこの定義が難しいですね)今回入れていませんが、そちらも含めてウェブアプリケーション作る時実は選択肢たくさんあるのがわかりました。Playはすごく便利かつ強力なフレームワークですが、実際開発している時要件によって機能が過剰になってしまうとかの場合もありますので、要件に合わせて一番適切なフレームワーク/ライブラリ選びも必要だと思います。ここで書いているフレームワークも触ったことがないものが多いのでまたどこかの機会で試してみたいです!
-
2018/12/4までの情報をもとに書いています ↩
-
http://skinny-framework.org/documentation/getting-started.html ↩