「Scala Matsuri2017」に参加してきました

readable scala

  • readable codeを基準に
  • 他の人が最短時間で理解できるコード

記号が多いから読みづらい?

  • APIドキュメントを読めばすぐ分かる
  • 記号の意味が認知されているなら記号のメソッドの方読みやすい
  • そうでない場合は分かりづらくなってしまう
  • 記号がいいかは読み手の知識に依存する

implicit

  • howとwhatを分離できる機能
  • whatを書くことに集中できる
  • impicitの値は直感的で自明な定義である必要がある
  • abstractで抽象化すると定義を自明にできる

implicit conversion

  • ...

竹添さん

scala warrior

  • ruby warrior に影響されscala warriorを作った
  • scalaはアカデミックなものだと思われている、と思っている
  • 気軽に覚えてもらうためにゲームを作った
  • フロントもサーバも全部scala

全部scalaで作るには

  • scala tags
    • htmlをタイプセーフに
    • ほんとにこれを使うのかって感じ
  • scala css
    • cssをタイプセーフに
    • htmlよりかはまだまし
    • css定義によって渡せるパラメータをタイプセーフにできる
  • scalajs-react
  • scalajs
  • サーバ用とjs翔の両方でコードを共有できる
  • 既存のjsライブラリも使える
    • けど型定義ファイルが必要
    • tsの型定義から作成することもできる
    • 型を使わないければjsライブラリをそのまま使うこともできる
  • 問題点
    • 生成されるjsファイルがでかい
    • 定義ファイルの作成メンテ
    • フロントエンドエンジニアにscalaを書かせるべきなのか
      • react or angular <-> scalajs <-> scala
      • フロントエンドでも見た目のとこは既存のもので
      • ロジックのとこはscalajsにしてライブラリとして使う

大きな課題だったこと

  • 既存ライブラリを使うことが退園
  • でも最近はできるように
    • commonjs形式で

まとめ

  • all or nothingではない
  • 適切な役割分担でscalaのメリットを活かす

前出さん

  • cirkit breaker
  • bulkhead
    • 隣の家の火事の被害を受けないように壁を作る
    • dispathcerを分ける
  • cluster
    • akka cluster
    • node間で死活監視
    • データは永続化しておく
      • そのデータでリトライすれば復元できる
    • backoffspervisor
      • 永続化したデータを闇雲にリトライしない
  • split brain resolver
    • ネットワークが切れたらどうするか
    • ネットワークが切れたら死んだように見えて分断されてしまう
    • 分断されて両方動いても困るからどれを残すか決める
      • 一定数以上のノードが残っている方を残す
      • 50%以上残ってる方を残す
      • 最古のノードが残ってる方を残す
      • 指定したノードが残っている方を残す
    • この機能はOSSに含まれていない
  • idempotence
    • 冪等性が担保される設計にする

GraphQL

  • facebookが作った
  • jsとかでも実装できる
  • RESTだとリクエストが大量発生する
  • GraphQLだと単一リクエストで複数リソースを要求できる
  • Endpointが1つ
    • bodyにいろいろ書くから1つにできる
  • ドキュメントが充実してる
  • リクエストは基本POST
  • json形式で書くのでヘッダーにはjsonと設定する
  • サーバサイドにどんなクエリがきても対応できるようにしておく必要がある
  • クライアントでリクエストを組み立てるのが大変
  • 他システム連携するならそっちも対応してもらわないといけない