ScalaをBtoBのサービスに採用した理由

scala-btob

はじめまして。マイトでほぼ一人エンジニアやってます、大宮です。

このたび、『マイトTechブログ』をはじめるにあたって、Scala、Play、Akka番長を命ぜられました。

これらの言語については、私自身、勉強しながら取り組んでいくことになるので、その過程で学んだこと、壁にぶつかったこととその解決策、そしてこれらの良さなどを書きとめていこうと思っています。

自分自身の備忘録としてはもちろんですが、同じ悩みを持つエンジニアの皆さんにも、このブログの内容が参考となればうれしいです。

新しいサービス「ENishi」について

さて、このたび弊社で開発する新しい会員制のサービス「ENishi」(「エニシ」と読みます)は、次のような機能を実装予定です。

  • チャット機能
  • 会員同士がつながる機能(Facebookの「友達」のようなもの)
  • アピールボード機能(順次開発予定)

DB負荷・リアルタイム性を実現する点において、どう考えてもチャット機能の実装が一番大変そうでした。他の部分はどうにでもなるものの、サービスの肝にもなるチャットをないがしろにすることはできません。

というわけで、ENishiアプリケーションの言語選定にあたっては、「チャット機能を一番実装しやすい言語は何か」ということをベースに決めていきました。とりあえずWebSocketに対応してないとお話にならないなと思っていろいろ見てみましたが、別にどの言語でもWebSocket使えちゃうんですね、これが。

エンジニアが社内に私しかいないし、リリースまで4ヶ月弱しかないので、「大宮が開発経験の長い言語でいいんじゃないの?」と言われましたが、それでいくとVB.netというドマイナー言語になってしまう。

いや、VB自体は結構好きなんですが、ASP.NETでチャットとか(笑)という感じでしたので。そもそも私は今までに関わった案件の関係で、半年ごとにコロコロ開発言語が変わっています。なので、新しい言語だから学習コストが云々みたいなのは、あまり気にならないんです。

ここはひとつ、私のこれまでの経験は一切抜きにして、チャットに一番向いていそうな言語を探そう、という事ことで、調査を始めました。

そこで目に留まったのが「Scala」です。

「Scala」との出会い

Twitter, LinkedIn, ChatWork, LINE, サイバーエージェント(あとで知ったんですが、GREEのチャットサービスでも)など、チャットもしくは類似サービスでの導入実績がある言語らしい。

それがScalaとの出会いでした。今年(2014年)の8月末くらいの話です。もう、なんかノリとしてはこの時点で「Scalaにしよう」になっていた気がします。

他にもいろいろと言語を見てみましたが、Scalaのインパクトには及びませんでした。
すごくざっくり書き出してみますが。

PHP
いま運用しているサービスがPHPだし、人も集めやすいけど、コード汚くなるしメンテナンス性が悪い。
Ruby
前職でのRuby成果物がことごとく重いんで、なんか嫌だ。
あとChatWorkがRuby→Scalaシフトしてるのもポイント低い。
Hack
PHPよりも速いPHPらしいけど、リリース2014年って最近すぎね?アップデート対応大変そう。
Phyton
悪くはないんだけど、別に良くもない。
Node.js
コードが汚くなるからそもそもJSって嫌い。あとデバッグがしづらい。そもそも今から?

最終的にはPhytonかNode.jsかScalaかというところまで絞ったんですが、結局「Scalaでコーディングやりたくて仕方がなくてたまらない!」という直感が勝ってScalaになりました。

直感とかいう用語を使うとなんか頭悪そうに見えますが、実際にはちゃんとしたScalaの魅力を理解した背景があって、「どうしてもやりたい!!!」となってますよ!!たとえばこんな感じでしょうか。

  • 高速にリアルタイム通信をおこなう技術に強み
    • →PlayフレームワークにWebSocket標準搭載。Akka良い。
  • ソースコードがシンプルに書けるので、保守性、メンテナンス性に強み。
    • →FilterとかCaseクラスとかパターンマッチとか神ですか。セミコロン不要万歳!!
  • 実行速度がC, Javaに次ぐ3位
  • Javaのライブラリが使える!!!
  • Slickも素敵!!
  • eclipseのコンパイルエラー検知やコードの自動整形機能が使えるので、開発効率が良い(※)。!
  • 「Scalaの開発会社はひっぱりだこ」らしい。ちゃんと作れれば、マイトの知名度もあがるかも?
  • 注目している企業・導入実績のある企業が多くて何かワクワクする
    • →乗るしかない、このビッグウェーブに!!!!

社内にエンジニアが一人しかいない状態で、そいつがいつまでも「Scala、Scala、Scala」言い続けていたら、そりゃもうScalaにせざるを得ないわけです。学習コストだとか、安全圏取るとか、そういった意見、反論はあったんですが、それでもへこたれることなくScalaで通し続けました(笑)

で、社内だけで決めきれずにいてもしかたがないので、社外の有識者にも相談。すると「いいと思うよ、おもしろいじゃん!」とおっしゃっていただけたので、「じゃあ、Scalaで!」と正式に決まったわけです。

大企業だったらこういう決定の仕方しかたは絶対あり得ないんだろうなーと思っているので、自分で決めた言語で開発できる楽しさを噛みしめつつ、今は粛々と開発してます。

また、自分であれだけやりますといって言語を決めたからには当然最後までやりきらないといけないので、適度な緊張感もありつつ仕事に臨めているなーと思います。

ただし、ドストレートでScalaに決まったかというとそうでもなくて、懸念事項もありました。

一緒にScala開発しませんか

なかでも最大の懸念にして、今早くも痛感しているのが、

人・材・難 !!!!!!!!!!!!

ほんとScalaエンジニアって少ないですね。いろいろな開発会社の方に使用言語を聞いたりしましたが、業務での使用経験のある方というのは本当に少ないみたいです。Scalaできちゃう方は大企業に行っちゃうのかなあというのが所感です。

リリースまであと1ヶ月半くらいなのに、工数足りないし、リリース後も盛り込みたい機能がたくさんあるし、みんなの相談窓口の案件もちょいちょい入ってくるし、サーバーも気にしないといけないし、むむむむむ。。。

でも、私もScala始めて1ヶ月くらいでお粗末ながらそこそこ作れるようになってるので、Scala開発経験ない方でも、業務での開発経験が2年くらいあれば全然いけちゃうんじゃないかと思っています。

あと、フロントはガンガンJS組んでいるので、その辺自信のある方であれば、Scalaもきっと入っていけると思います。もちろん、Scala開発経験やサーバ運用経験豊富な方であれば、私もいろいろ教えていただけるので非常にありがたいです。たぶん、来ていただいた時点でCTOみたいな感じになると思います(笑)。

→ Scalaエンジニアの採用について、詳しくはこちら

※結局使ってみたらeclipseのUIが気に食わなくてSublimeTextで開発してますが。。。

Scalaエンジニアの求人