こんにちは、インフラチームの安達です!

先週金曜日にBizReachさんのオフィスで、BizReachさんとChatWorkでScala合同勉強会を開催しました! BizReachさんと言えばすでにScalaを実戦投入されていることでも有名ですが、 そんなBizReachさんがこれからScalaへ取り組もうとしている弊社と勉強会を開いてくださいました。

今回はBizReachさんにたくさん教わる形となりましたが、ChatWorkも今後の取り組みで得られるScalaのノウハウを発信していきたいと考えています。

さっそく各発表を発表順にまとめてご紹介します!

ChatWorkとScala (ChatWork、安達 勇太)

ChatWorkがどうしてScalaに舵を切ったかという話と、私が先陣切ってScalaを触りはじめた感想を喋らせていただきました。

なぜScalaか?

  • ソースコードをシンプルに、可読性高く
  • 静的片付け言語を使いたい
  • スケーラビリティ

1週間勉強してみた

  • シンプルに書ける? → Yes
  • Scalaの勉強って大変じゃない? → Yes
  • 学習コスト低くないけど、それ以上に学ぶことが大きいと思う
  • JavaScriptを書いてる人なら大丈夫そう
  • Scalaのチームをどうビルドするかが課題

スライドはこちら

BizReachでのScalaへの取り組み (BizReach、竹内 真さん)

CTOの竹内さんに、BizReachさんがどうしてScalaに取り組んでいるのかについてお話していただきました!

現状は主にjavaで開発してる

  • Seasar2, Spring Framework, Struts2などを使っていてレガシー化が表面化

なぜScalaか?

  • Javaの安全性
  • Javaに比べて良いところがおおかった 
  • LLのような生産性の高さ
  • 既存のJava資産とエンジニアを活用
    • BizReachがScalaを選ぶ最大の理由
    • 書いたコードが良いコードなのか判断しやすい
  • 品質を保ちたいというモチベーション
    • コンパイル
    • 問題の起きにくいコードを生産できる
  • 優秀な技術者を採用しやすい?ですか?

Scalaの利用状況

  • 新規事業で全面的に採用
    • 開発チームは6名
  • 社内システムの一部で利用

外部への情報発信

Scala界隈の近況 (BizReach、竹添 直樹さん)

Scala逆引きレシピの著者でもある竹添さんの発表です。 タイトルの通り、Scalaの近況をまとめて教えていただきました!

Scalaのバージョンアップ問題

  • 互換性が無くなる
    • Scala 2.10 (様々な新機能の導入)
    • Scala 2.11 (安定化)
    • コンパイラの性能強化
    • コアライブラリのフットプリント削減
    • マイナーバージョンアップではバイナリ互換性を保証
    • メジャーバージョン間ではソースコード互換性を保証
    • 改善されてきてる

ライブラリも充実してきてる

  • 日本人が開発しているものも多い
    • Skinny Framework
    • Scalike JDBC

トレンド

  • 並列、分散、非同期
  • Play2
    • Netty2による非同期I/O
    • ステートレスなアーキテクチャでスケーラブル
  • Akka
    • アクターモデルを使った並列分散処理
  • Apache Spark
    • オンメモリバッチ処理、ストリーミング処理など並列分散処理のためのフレームワーク
    • HadoopのディスクI/O問題を解決する
    • Reactive manifest
    • サブスクリプション
  • Typesafe社が有償サポートを提供
    • 買わないとSlickで商用DBが使えない (Oracle、DB2)
    • Contact Sales!!!
    • Scala is now growing up!! → Scala is already practical!!
  • 今は実践的なTipsが増えたり、実用的になってきた。

Play2実践Tips集 (BizReach、竹添 直樹さん)

引き続き竹添さんの発表で、Play2の実践的なTipsのお話でした。 プロジェクト構成の話は早速使わせていただきます!HikariCP、調査してみます!

プロジェクト構成

  • IntelliJは1プロジェクトしか開けない
  • sbtのマルチプロジェクトを構成する機能を使う

Tuple22問題

  • Scala2.11で解決される

テンプレート

  • 余計なマークアップが出力されてしまう

BoneCPでコネクションプール

  • バグってる!
  • BoneCP無効化して、HikariCP play plugin
  • 無効化するとEvolutionsが使えなくなる
  • 誰も使ってないから困らない

日本語ルーティング

  • routeにURLエンコードされたルートを書くと…
  • Globalでパスを変換して、日本語ルーティングを書ける

Slick入門 (BizReach、島本 多可子さん)

こちらもScala逆引きレシピの著者である島本さんによるSlickのお話。 特にジェネレータのお話はカスタム例も紹介していただき、とても参考になりました。

タイプセーフ

  • クエリをタイプセーフに書ける

スキーマの定義が必要、手で書くのは面倒臭い→ジェネレータ

  • sbtのタスクとして実行できる
  • テーブル定義、マッピングするケースクラス、TableQuery、GetResultが生成される

ジェネレータはカスタマイズ可能

  • ドキュメントが無いのでポイントがわからないけど、slick.model.codegen以下を見ると良い
  • BizReachさんのカスタマイズ例
  • 基本的なCRUD機能
    • シールドクラスとカラムのマッピング
    • 楽観的排他制御による更新機能

Slickのチートシート

島本さんは、SlickのOracleドライバをOSSで書いてくださるそうですよ!!

Scala + Play2をはじめて触った感想 (BizReach、西山 創さん)

西山さんはScalaをはじめて触った感想をLTで発表されていました。 Scalaのライブラリだけでは足りないので、やっぱりJavaの知識はある程度必要!とのことでした。

記述パターンが多い

  • _が読みづらい場合、読みやすい場合がある
  • if, try, whileも値を返す
  • コーディングルール(方法)はチーム内ですり合わせしないと

returnは書かない

  • 書いたらIntelliJに怒られる

Javaライブラリの知識は必要!

  • PureなScalaのライブラリだけではモノを作れない
  • sbtがあるけど、mavenの知識も必要

Scalaでバッチを作った感想 (BizReach、玉木 信太郎さん)

Scalaはまだまだこれからと仰っていた玉木さん、いざとなったらJavaで書けば納期に間に合う!が面白かったです(笑)

文法の話

  • Mainはどこ!?
  • セミコロン要らない
  • private static finalvalの3文字になる!

コンパイルはやっぱ遅い

Javaとの関係

  • 日付処理は苦手
  • JVMの知識必須
    • heapのサイズ
    • GCログ

まとめ

既にScalaを実戦投入されているBizReachさんならではのお話で、 これからScalaに取り組む弊社のエンジニアにとっては聞き逃せない内容ばかりでした! BizReachさん、今回は本当にありがとうございました。 そしてChatWorkもScalaに関する情報を今後どんどん発信していこうと思います。

関連リンク

チャットワークの新しい開発言語とフレームワークを決める開発合宿を開催!

ChatWorkはエンジニアを募集しています。