June 25, 2015

趣味の Scala サーバーと、おれテクニカルレーダー

もっと Scala が書けるようになるべく、最近 Scalex という Scala むけ Hoogle みたいなものをいじっている。

Scala: 良い

IntelliJ で書いていて思うけど、やっぱり Scala は良い。

JVM の起動速度を考えると git みたいな頻繁に起動と終了を繰り返すソフトウェアには使えないし、ランタイムのサイズを考えると Android むけのアプリケーションに使ったり、JavaScript に変換してブラウザに読み込ませるのも気が向かないけど、サーバーの類を書くのにはむいていると思う。

Scalaz: 良さそうなので使いたい

むかしは「私は map ができて型推論のある Java があればそれでいいので、そういう Haskell みたいなやつはちょっと」と、完全に無視するつもりでいたんだけど

  • Scala を使っているひとをみると、わりとみんな Scalaz も使っている (要出典)
  • Haskell っぽいものは、いろいろなもののネタ元になりがちなので、学んだ方が良さそう

というので、考えを改めた。

Akka: 使ってるけど良いのか謎

Akka も使っているけど、これはまだ

  • どのくらいをまとめて1アクターにするのか
  • 型安全じゃなくなってしまうけどどうするのか
  • アクターをまたいでスタックトレースみたいなものはとれるのか

あたりが謎で、うれしさがよくわかっていない。

型については、Akka team のひとの Fresh from the Oven (04.2015): Experimental Akka Typed and Akka Streams というスライドをみると、Typed Actor ではなく Akka Typed というものを使うのが良さそう。

Ansible: 良い

サーバーの設定は Ansible でやっている。Ansible はだいぶ気に入っていて、定期的に挑戦しては失敗していた Chef は、しばらく勉強しなくてよさそうに思う。

REST: 使ってるけど良いのか謎

以前はとりあえず REST で JSON でも投げてればいいのではと思っていたんだけど、JSON Schema とか見ていると、なんか WSDL みたいになっているし、なにも IDL まで JSON で書かなくてもいいんじゃないかという気持ちになる。REST の

  • 大抵のものは「リソース」に対する CRUD で表現できる
  • 状態はないほうが (ひとつのリクエストにぜんぶつめたほうが) 良い

というあたりは正しかったし、HTTP と JSON は速度と blob がない限りは平和な組み合わせだけど、もうちょっと RPC から持ってこれるものもあった気がする。

EC2: 良い、けど趣味で使うにはちょっと高い

Amazon Web Services は、会社つながりと、時代はクラウドですよというので、機会をみては意識して使うようにしている。今年のこのブログも Hakyll + S3 でやっている。

サーバーは EC2 に置いているけど、趣味でつかうにはちょっと高くつきがちで、やや厳しい。リザーブドインスタンスとかちゃんと使うようにしたい。本当は ELB x 1 + EC2 x 2 で片肺にデプロイ、みたいなものを試したかったけど、ELB もまた高いので、試すぶんには良いけど維持するのはやりすぎかなあと思う。