by shigemk2

当面は技術的なことしか書かない

はてなにおけるScala活用事例 #ScalaMatsuri

新しいプロダクトでなんで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には戻れない