新しいプロダクトでなんでScalaを選んだのか
なんでPerl
- 型チェックしている言語はハッカーが使う言語ではない
- CPAN
そして数年後
- レガシーコードが残っている
- スマホアプリなど様々な需要
- テストやレビューはやるけどそれでも足りなくて500
- やっぱり型システムはいるよね
なんでScala
- mackerelを商用で使ってみよう
- mackerel-agentはもともと社内ツールであった
- 役割ごとに表示
- ホストが変わってもグラフが表示される
Nagios的な警告メール発砲
最初は外注も使ってた
- 初のB2B
- nginxとredis以外は初採用の技術ばかり
- Scala Play Slick Nginx Go Graphite PostgreSQL
なんでScala
- モダンな型システム
- アドホックなポリモーフィズム
- データタイプ
- B2B向けに安定したやつ
実績のある言語
Scalaを書ける人がいた
Java8(リリースされてなかった)
- Haskell(書ける人いなかった)
- Go/Ruby(型システムじゃなかった)
Scala開発について
Play
- ルーティング テンプレートエンジンなどフルスタック
- カスタマイズが自由
- Twirl
- Angularjsのテンプレート
- MVC(Perlのときは状態をもったオブジェクトが多かった)
- 型クラスを使ってマッピング
ルータに型がつくように
routing
型安全
コンパイルが遅いのでモジュールを分割して作っている
- CoreTypes→Core Models Core Views→Core Controllers
Slick
- TypeSafeなクエリ、生クエリ両方書けるクエリジェネレータ
- バージョンアップが大変
- 慣れないと読めない
- 複雑なクエリも簡単かつ安全に書ける
開発フロー
- Gitで管理
- EmacsやVimでもいけるよ
- developブランチへmerge
タスク管理
- GitHub issues/pull request
- Tag
- Milestone
- Scrumでやってて、Sprintがマイルストーン
- CIはJenkins(Perl時代よりまじめにJenkinsを使うようになった)
- 1時間から20分へ
パラレルでやってる
デプロイのプロセスをだれでも出来るようにするために、masterへのPRを執事が自動で生成してくれている
デプロイ
- PerlだとCapistrano(+Graceful Start)
Scalaのよいところ
- 静的型づけがとてもよい
- ライブラリが充実
- 関数型言語
Scalaの悪いところ
- コンパイルが遅い
- モジュールを分割してもなお遅い
- 学習コストが高い
- job queueの標準はどれなのか
- モックがだるい
結論
Perlには戻れない