FIVETEESIXONE

Addicted to Vapor


Vapor の最新メジャーバージョンとなる 3.0 が昨日リリースされた。

Vapor 3.0.0 released

「Server Side Swift (SSS)」というのはおそらくまだほとんどの人にとって興味のない領域ではあるだろうが、そこにはいくつかの名の知れた Web Application Framework があり、どれも結構なスピードで進化を続けている。Vapor もその中の1つである。

僕は Vapor はバージョン1の頃から一応触ってみてはいるのだが、今度のバージョン3は概要をちょっと眺めただけでもかなり洗練が進んでいると感じた。

でも何より興味を引くきっかけとなったのは vapor/http の開発を眺めていたときのことで、これはバージョン3に向けての非同期化を進めていたエンジン部分なのだが、今年3月に突然 SwiftNIO というフレームワークが登場したときに、それまでの実装をものすごい勢いで SwiftNIO を利用するものへ置き換える開発が進んで圧倒されたことだ。リリース間近のプロダクトでも Swift Way 的により良い形が出てきたならそうするんだという意思と実現力には正直痺れるものがあった。

そして 3.0 の RC 版も出ていたので GW にちょっと触ってみるか〜なんて考えてたら、結局超熱中して GW の余暇のかなりの時間を Vapor に突っ込むことになってしまった…僕の GW の目標は「腰のためになるべく椅子に座らない」とか「パソコンを見ない」とかだったのだが、結局身体を労わることを放棄した甲斐はあったかもしれない (まだ判断できない) 。Vapor 3 が stable になれば production への投入はリアルに検討するに値すると思う。

これには個人的な事情もある。「SSS はまだ早い」と悠長に構えてはいられないということだ。

どういうことかというと、前から言ってるけど仕事で使うプログラミング言語やフレームワーク選定について考えないといけない局面が続いていて、実際の他社の事例などを伺うにしたがって「これは結局 Go 以外にはないのでは…」という気分になってくる。なので順当に行くと Go になるだろう。

これがあまり自分としては面白くない。Go はもちろん嫌いではないのだが、超好きかと言われると超好きなわけではくて苦手なところも結構ある。リリースした後も長いこと自分たちでメンテしていくのがわかっているなら、使えるなら超好きなものを使いたいのが人情というもの。

ベンチマークだけで見るなら、非同期化の恩恵もかなり大きいようで Vapor 3.0 は相当な好成績を記録しているし、大好きな Swift を使って開発できる目が少しでもあるならその可能性に賭けてみたい気持ちがある…

Vapor Kindergarten

まあそういうわけでとりあえず Vapor 3.0 の情報にあたってみようとしたが、特に日本語の情報というのはツチノコレベルで存在しなかった。Qiita の Vapor タグ も最新のポストが3ヶ月前とかいうレベルだし、まあまだリリース前だったととはいえ、3.0 の具体的なコードなどに触れるものは存在しないに等しい。なので、わからないところは Discord のチャットで質問したりしつつ軽いアプリケーションを作りながら素振りをしている。

Vapor コミュニティはこれまで Slack を使っていたが、最近 Discord に移行した。個人的には Discord の方が嬉しい。質問にもすぐ回答がもらえて素晴らしいコミュニティだと思う。招待リンクは => http://discord.gg/BnXmVGA

英語サイトであれば vapor.university というチュートリアルのリンク集があり重宝している。RC 版の時点でもいくつかの 3.0 対応の記事がすでに存在しており、正式リリースされたこともあってこれから増えていくだろう。

ただ、業務での採用を真面目に考えるなら、日本で Vapor を利用する人が増えることはめちゃめちゃ重要であり、それには日本語の情報が充実していることが必須である。

そういうわけで、お試しで開発している Vapor 3.0 アプリケーションは「Vapor Kindergarten」という Vapor の日本語情報のリンク集にすることにした。とりあえずリンクする記事自体がまだほとんど存在しないので公開はしていないが、一応ごくごくシンプルな MVC の CRUD アプリケーションの機能としては完成しているので、これから自分でも色々記事を投稿してリンクを充実させていきたいと思う。

https://github.com/5t111111/VaporKindergarten