ScalaのWebフレームワーク事情 2015年版 - たけぞう瀕死ブログ
Scala界隈のWebフレームワークやJsonライブラリは良くも悪くも混沌を極めている(?)わけですが、それにしても竹添さんが紹介してるやつだけでは個人的に不公平感というか、混沌としている感が全然伝わらないと思ったので、全部に詳しい訳ではいですが、自分なりに現状を書きたくなったので紹介しようと思います。
どうせ全部を本当に知り尽くしている人なんでいないので、これはこれで不公平というか偏った見方にもなってるかもしれませんが、そんなこと言ってたらこういう記事をいつまで経っても書けないので、思い切って書くことにしました。
いつもの注意書きですが、あくまでこれ書いてる2015年10月現在の状況であり、1年程度経過しただけで状況は劇的に変化する可能性あるので、ご了承ください。
そもそも、あまりこういうの書きたくないのは、わりと求められている情報で影響力大きい可能性ある?ので、ちゃんと調べて書かないと失礼な気がしているわけですが、とはいっても普段からわりと全体的に色々観察している自覚もあるので、細けぇことはいいから自分も書くしか無い、みたいな雑な思いになりました。
まず、自分の意見含めたちょっとしたtwitter上での議論まとめもどうぞ
ScalaのWebフレームワークに関するちょっとした議論 - togetter
というわけで、少し前に書いたstar順
2015年9月26日現在のScalaのweb frameworkのgithubのstar数での順位
や、skinnyよりもstar数下だけど、わりと注目すべきフレームワーク?を自分の知ってる限り紹介。上記のtogetter内で言ったように、個人的感覚としては
「Webフレームワークが、APIサーバー作るのに向いてるかhtml返すのに向いてるか、ってトレードオフではないと思ってて、直交するというか、基本両方を同時に満たせる」
と思ってる面もあるので、その2つをあまり区別せずに紹介します。というか、どちらかに向いてるとしても、そこまで個々のweb framework把握してないので書けない、という面もありますが。
あと、servletかどうか?の判断基準も人によってはすごく重要だったりそうじゃなかったりするようですし、たしかにservletベースという意味ではscalatraは今でも有力ですが、ひとまずservletか否か?もそこまで考慮せず全部をひたすら紹介しますね
https://github.com/playframework
(以前計測時点で) star数2位のfinagleが3815というのに比べて、6831というのは、かなり圧倒的です。ある意味、もうここ1、2年はデファクトスタンダードを完全に確立した感じがあるし、そういう意味ではこれ以上今回playframeworkを解説する必要はないとは思われるので、あまり解説しません。
もちろんstar数以外の、メーリングリストの活発さや、開発のリソース的にも、圧倒的だと思います。
https://github.com/twitter/finagle
finagleは、つい先日専用のカンファレンスが開かれるくらいには、かなりコミュニティが成長しています。
http://finagle.github.io/finaglecon/
また、twitterで作られて、twitterで今でも中心的なものとして使っているわけですが、twitter以外でもかなり多くの実績があります。公式に一覧があるわけですが、以下にもコピーして挙げておきます
https://github.com/twitter/finagle/blob/5f4f8b8b9420082468fb99c95e90fd5f924e09e5/ADOPTERS.md
twitterが「finagleやめるわ」と言い出したりしないかぎり、このエコシステムの発展はしばらく続くと思われます。というか、ここまで広まっているなら、twitterがやめると言い出したとしても、しばらく色んな人がメンテして、すぐには衰退しない程度には広まっているといえるでしょう。
また、後述するように、finatraやfinchというfinagleベースのものが複数出現している、という点においても、エコシステムの大きさを感じます。
https://github.com/spray/spray/
あまり知らないのに批判というか悪口(?)だけ書きたくないのですが、正直sprayの将来が以前からよくわかっていません。akka-httpに移植されつつ形を変えて生き残るはず?かもしれませんが、誰かsprayそのものの将来について詳しい人いませんか?
ただ、昔からあって、安定性はそれなりにあるとは思うし、速いらしい?という話もありますが、速さで選ぶにしても、実際のところどうなのかは、やっぱり個々に計測してみないと危険そうです。
以下の開発のグラフをみても、開発が活発ではなくなっているのは明らかだと思うので
https://github.com/spray/spray/graphs/contributors
これを、マイナスに捉えるか、逆に「安定してて、それほどやることない」と捉えるかは難しいところですね。
ただ、sprayの開発者の人達は、typesafeに合流したわけで、ここ1、2年はakka自体やakka-httpの開発のほうにリソースを割いている、というのは相変わらずのようです。
akka-http
ある意味sprayの生まれ変わりであり、元sprayの人含めたtypesafeの人達がリソースを割いている、という意味ではかなり注目すべきフレームワークなわけですが、akka-http単体の利用実績がどのくらいあるのかは把握してないので、現状での安定性的な意味ではどうなんでしょうね?
あと、akkaのモジュールとしてはまだexperimental(細かくバイナリ互換を保証しないモジュール)です。
そして、次期play(おそらく2.5?)では、akka-streamというかakka-httpベースになるらしいですし、デファクトスタンダードでダントツ1位のplayの内部に本格的に使われるようになる、という意味でも注目です。
https://github.com/scalatra/scalatra
serveltベースでは今でも上位で有名なわけですが、瀬良さんが
という発表をしているように、Future組み合わせようとすると、色々大変なようです。といっても、変にFuture組み合わせないで同期的に書くとすればいいだけ、とも捉えられますが。
古くからあって、それなりに安定してて、情報もある、という面ではそんなに心配することないのですが、
- scalatra作者がhttp4sの開発に興味がいってる
- Future頑張るためのマクロが一瞬入ったけど、問題あってrevertされた
みたいなのを見ているけど、全然致命的ではないけど、開発は順風満帆というわけでもなさそう?だし、今後http4sとの関連や、新しいservletのversionの対応など、ロードマップ的に注目すべきこともあるので、使う人はそのあたりもなんとなく追っていったほうがいいとは思ってます。
https://github.com/lift/framework
詳しくないし、今更どこを褒めればいいのかよくわかってない(ひどい)ので省略・・・。
開発自体は、止まってはいなく、地道に続いているようではあります
https://github.com/twitter/finatra
finagleの上に、scalatraのようなインターフェイスをかぶせたもの?自分の知ってる限りの歴史を説明しておくと
みたいな経緯だったはずです。
かなり昔にみたときは、随分mutableが多くて雑な作りだな―、全然使う気にならないなー、と個人的に思った印象ありますが、昔の印象だけでdisるのよくないので、だれか最近どうなってるのか?のリポート期待してます。これがmutableであまり関数型にこだわってないことにより、後述するfinchが発生した要因だとも思っています
https://github.com/jdegoes/blueeyes
おもにprecogという今はなくなった(創業者は今は似たようなslamdataという会社やってる)、当時のかなりなScala界隈のスターを集めたベンチャーで使われていた関数型なイケイケの(?) フレームワークでしたが、もう全然メンテされてなさそうなので、わすれてください・・・。
今slamdata社のScala事情はどうなってるのかなぁ・・・
https://github.com/unfiltered
- かなり古くからあり
- 抽象レイヤーがあることにより、netty4にもservletにも対応していて便利
- パターンマッチで記述できる
- 埋め込みサーバーが作りやすい
という機能的な観点で言えば、他にあまりない特徴を備えていて、とてもよいフレームワークだと思っているのですが、そういう観点で見る人が少なく、最近playframeworkや他の何かに押され気味なのは、正直もったいないなーと思っています。
わりと古くからあるので、それなりな実績があるらしい?
http://unfiltered.databinder.net/Who%E2%80%99s+Using+Unfiltered%3F.html
というか、NewYork界隈のScalaコミュニティなどで流行っていた(今も流行っている?のかは不明)はずです。
で、こういうのもあまり書きたく感はありますが、もともとやること無いという意味ではよくもわるくも開発そんなに活発じゃない、という面はありました。ただし、重要な情報として、原作者で1番コミット数が多いn8hanさんが少し前に転職したらしく、転職先ではfinagle書いてる
This is my first time really working with a Twitter project (Finagle) and it's as nice as everybody says.
みたいな発言していたことがあり、そういう意味ではちょっと将来の開発心配な感じはしています
https://github.com/skinny-framework
瀬良さんもしくは他の利用者の人が書けばいいというか、自分はそんなに詳しくないので省略・・・?
自分でもskinnyに対してやけに厳しい感じありますが、ある意味期待というか瀬良さんへの個人的評価が高いから、逆に厳しいこと言ってるんじゃないですかね、みたいな自己分析・・・?(偉そう・・・。ツンデレ・・・?)
知名度的にはまだそこまでではないですが、目指す方向性的にはよいとは思ってる(ただし個人的ユースケースにはそんなに合わないので、個人的にそんなに使うことなさそう)ので、頑張って欲しいです。
ただ、6年もScala界隈の色んなライブラリの衰退や発展を見てきた経験から言うと、Webフレームワーク界隈で安定してシェアを取りつつ発展を続けるのは、かなりな努力が必要だと思うので、道のりは険しそうです
https://github.com/http4s
skinnyよりはちょっとstar数は下ですが、より関数型な方向を目指しているという面や、scalaz-stream(fs2)ベース、http2対応、抽象化レイヤーを用意して下位レイヤー切り替え可能(?)みたいな面からは、とても特徴的で、今後注目だと思っています。
ただ「今後注目」のままで終わりそうな気も十分にしていて、scalaz vs 猫騒動により、依存どうするんだ?(作者は猫派)という話や、今までの作者の他のライブラリの関わり方みると、勢いだけあるけど飽きっぽい面もあるような気がして、いつになったら安定するのか?実は安定してるのか?scalatraに組み込まれるのはいつになるのか?本当にscalatraをhttp4sベースにする気あるのか?のロードマップが個人的にあまりハッキリとは見えてこなくて心配な面はあります。
https://github.com/finagle/finch
日本でまだ全然知名度高くないと思いますが、個人的には最近一番注目、期待してるやつです。finatraと同じようにfinagleのラッパーなわけですが、こちらはかなり関数型によっていて、argonautやcirce、shapeless、猫、のような関数型なライブラリに依存していく方針なのも特徴です。
とても個人的なひいきというか感情が入ってるのですが、なんといっても「travisbrownさん」が開発に参加というか2番目のコミッターで中心人物、というのが大きいですね。
twitterの中の人(中の人ではなくなりました)ですが、猫派な人だったり、明確に「twitterがscalaz使わない理由」を説明してたりしますが、shepelessに超詳しかったり、stackoverflowでscalazの質問に誰よりも答えていたり、個人的にはScala界隈での実力的にも人格的にも1, 2位を争うほどに尊敬している人の一人です。
さて、travisbrownさんベタ褒めな変な感じになりましたが、そもそもtwitterの中の人がリソース割いて開発している以上、もしtwitter社内である程度本格的に使われたら、それにつられてtwitter社外のfinagle利用者もfinch使うようになって、うまくいけば爆発的に流行る?みたいなパターンがあるのでは?と期待してます。というか、以下にリンク貼りますが、いくつかは既にtwitter以外の企業で実際に使われているようですね
https://github.com/finagle/finch/tree/7efe2e2aa6d8b4aa226c55b8e0dd22c2d64323a0#adopters
あと、そのtravis brownさんがつい最近発表したfinchの動画も貼っておきます
というわけで、現状のカオス感が伝われば幸いです。といっても、playframeworkはデファクトスタンダードと言っていいでしょうし、単体でカンファレンス開催できるほどのfinagleのエコシステムの大きさを考えると、
「playframeworkとfinagleの2強時代」
と言っても良い気がしますが、それだとservelt派が全然考慮されてなくてあれだし、一言で表すのは難しいですね、というか一言で表す必要ないですね(?)
カオスな感じはしばらく続くでしょうし、それがOSSのいいところ(競争が働く)でもあるはずなので、このカオスな感じを楽しめるようになりましょう?今回書いたのも、1年2年経過したら全然変わっている可能性もあるんでしょうけれど、そのときはまた書くかなぁ・・・。