NTTドコモ様_dカーシェア
NTTドコモ様_dカーシェア
2016.05.20
#3
イベントレポート

ChatWorkとApplivが実践する「Scalaとの上手な付き合い方」

よっしー

こんにちは! Pooleという転職サイトでメディアディレクター兼CSを担当しているよっしーです。

先日、渋谷マークシティにてChatWork株式会社とナイル株式会社を登壇者として迎え、「あの企業のScala開発秘話」をテーマとしたエンジニア向けイベント『Scala Meetup!ChatWork × Appliv』を開催しました。

現在フツフツと盛り上がりを見せている言語 “Scala” ですが、「導入してみたいけど、社内で通るかわからない……」「比較的新しい言語だし、教育体制はどう整えればいいの……?」と顎に手を添えて悩んでいる方も多いのではないでしょうか?

そんな中、ChatWorkは自社の社名でもあるコミュニケーションツール『ChatWork』で、ナイルはスマートフォンアプリ発見サービス『Appliv』でScalaを利用しているそう 。いかに両社はScalaとうまく付き合っているのか、お話いただきました。

そもそも “Scala” って、なに?

Scalaとは、2003年にスイス連邦工科大学マーティン・オーダスキー教授によって開発されたオブジェクト指向言語と関数型言語の特徴を統合したプログラミング言語です。

Scalaの最大の特徴は、JavaのJVM上で動作すること。Javaのプログラムを使用でき、逆にJavaからScalaのプログラムを使用することも可能です。ちなみに、Twitterのインフラの大部分がScalaで書かれているのだとか。

また最近は、エンジニア企画でScalaをテーマにした日本最大級のカンファレンス『Scala Matsuri』が開催され、その有用性から実用言語としてWeb企業で人気が高まりつつあります。

▼参考
Javaの限界を超えて実用化を目指す新開発言語「Scala」のメリットとは

【ChatWork編】Scalaとの上手な付き合い方

Sucala07
PHPエンジニア 尾崎氏

尾崎さん:ChatWorkがサービスとしてスケールし始めたころ、当時のシステム(PHP+独自フレームワーク)では新機能を追加していく上で、アーキテクチャに限界がありました。そこで、Scalaへ刷新することを決めました。

Scalaの表現力は高く、いろんな書き方ができます。静的言語ですが、その表現力の高さから動くだけのコードを書くのはそこまで難しくありません。

Sucala06
Scalaエンジニア 赤津氏

赤津さん:型推論がいろいろ効くので、記述が減らせますね。 また、型がしっかりしてるので、新規メンバーも簡単なリファクタリングからすぐに参画できるのも利点です。コンパイルしてひっかかるところを直していくだけで大体作業が終わります。コンパイラーに指摘されながら、コードの幅広い部分をちょっとずつみていくので結構なじみやすいです。

尾崎さん:難しいところでいうと、例えば言語仕様、パラダイム、APIと覚えることが結構多かったり、コードは書いたけど標準APIに存在するのに見つけきれなかったり。いままでフィールドに複数行書くコードを見たことがなかったので作法も迷いました。

Scalaは独学でやると習得が難しい言語かもしれません。そこでChatWorkでは社内で勉強会を開いたり、部活動「Scala部」を結成して情報共有の場を設けています。サービス開発の現場では初心者から上級者まで揃うため、簡単な質問からむずかしい話まで、 “どんな質問も気軽に聞ける環境” づくりを重視しています。

 

まとめ
  • Scalaは表現力が高く、いろいろな書き方ができる
  • 新規メンバーが参画しやすい
  • 覚えることが多く作法が難しいため、勉強会などの情報共有をする環境づくりが大事

【ナイル編】Scalaとの上手な付き合い方

Sucala05
Webエンジニア 佐藤氏

佐藤さん:ナイルがScalaを採用することになったキッカケは、「PHPの運用に課題を感じていた」からです。具体的な背景として、PHPは実行するまでエラーを発見できないことが多く、バッチ処理が重複してしまうなど、安全性の低さや並列化が容易でないのが懸念点でした。そのため「Scalaだったらこのような事象が解消できるのでは?」と考え、導入を進めました。

現在はScalaを使ってApplivのマイクロサービス化を進めています。社内にScalaを浸透させるように動いていたんですが「Scalaを使ってくれ!」とだけ言っても使ってもらえないんです。
「そもそもScalaがわからない」「仕事上で実践する機会がない」という社員ばかりでしたから。その施策として、Scalaを使うイベントなどを積極的に企画するようになりましたね。

Sucala04
Webエンジニア ジェームズ氏

ジェームズさん:RubyやRailsと違い、ScalaやPlayはコミュニティやライブラリが少ないです。Scalaの場合、Javaを使えば良いが不具合が起きることもあります。ちなみに、数ヶ月前にデータの一覧のページを作った際は、ライブラリが見つからなかったので、結局自分で実装することになりました(笑)

佐藤さん:ナイルもChatWorkさんと同じく、言語習得のために社員同士で学ぶ機会を設けています。日々の業務において実際にScalaを積極的に使用することに加えて、より多くの “使う機会をつくる” ために、社外の方々を招いて「もくもく会」という勉強会を開催したり、Scalaをテーマとした開発合宿や個別教育も行っています。

ジェームズさん:Scalaは、PHPに比べると綺麗なコードが書けるまでに時間がかかりますが、ある一定のラインを超えると一気に成長速度が加速するなと感じています。
ただ、 “一気に成長速度が加速する” 領域まで早く成長しないと、ソースコードの内部構造を整理することが多くなってしまうので、面倒くさいですね(笑)

まとめ
  • Scalaを使うイベントを積極的に開催し、業務以外でもScalaに触れる文化をつくった
  • PHPに比べ習得に時間がかかるが、一定ラインを越えると成長速度が加速する
  • あとからソースコードの内部構造を整理すると手間がかかるため、早めに習得しておくべき

イベントを終えて

Sucala02

Sucala03

イベント終了後に懇親会を開催しました。最初は皆さん緊張した様子でしたが、お酒が進むごとに和やかな雰囲気になり、登壇者との会話も弾んでいたようです。

会社では普段、メディアディレクターとCSを担当しているので、エンジニアの仕事は “なんとなく” でしか理解ができませんでした。なので、今回イベントに参加したことで「具体的に、こういうところが大変なんだ」と少しでも知ることができ、とても勉強になりました。

参加者の皆さん、ChatWorkさん、ナイルさん、本当にありがとうございました!
以上、よっしーがお伝えしました。

▼ChatWorkやNyleに興味がある!という方へ

furture_bnr