#ScalaMatsuri 2018 Day1 メモ

例によっていつものメモ書き。最近この手のカンファレンス来てなかったから、メモ取る速度が遅くて自分の考えを書き込めなかったのでつらい。

Why Composability Matters

  • Scalaはマルチパラダイム言語
    • でも他の言語も大なり小なり関数型言語のエッセンスはある
  • Scalaと他の言語の違い
    • Composability
  • 意味は?
    • Composition 合成とは
      • いろいろある
      • 同じ概念の異なる要素を合成することで新しい要素を生成する
  • 合成する方法が多い方がComposabilityが高いとこの発表では高いと定義
  • なぜ重要か?
  • Custom Typeを変換する例
    • SpringとPlayの違い
      • 変換処理をするConverterはほとんど同じ
      • 使い回しをするのはScalaのほうが楽に書ける
      • Javaでも言語機能では可能、Frameworkが
  • Scalaだと他の言語よりComposabilityが高い
    • 高いと逆に全体の見通しが難しいのではないかという質問
      • HowとWhatがうまく分離できないと大変になるのはある
      • 意識的に切り分けていけば可読性は上がると思う

How to get along with implicit

  • implicitはふたつある
  • 有名なimplicit
    • JavaConverters
  • implicitはなぜ難しいと思われるのか
    • 3つ
      • 明示的でない
      • スコープが複雑
      • しばしば導出を前提にデザインされる
  • Seq(2,1,3).sortedをもとに例示
  • IntelliJでImplicit Parameterを調べる機能があるので、それがおすすめ
    • 動いているものが必要
    • 暗黙の値を複数つかっているようなものでも解析できる
  • 暗黙の型変換
    • Enrich my libraryパターン
  • 動いてるサンプルを見つけて調べるのがよい
  • 最終的にComposability的な話になってきた
    • 既存のものでやっていく

あなたの集計クエリをお金をかけることなく14倍高速化するには?

  • 他と毛色が違うタイトルなので気になった
  • データウェアハウスなどなどでかいデータの集約
    • データが大量なのでクエリ遅い
    • full scanの発生
  • ユーザーに気づかせないことが大事
  • それほどScalaに関連する話じゃなかった、けど面白い
  • 内容はスライド見るとわかったが、英語のなまりが結構強く、しかもかなり早口だったので通訳のレシーバー借りとけばよかったと思った

もしScala初心者がMonoidを投げ込まれたら

  • 突如投げ込まれるコミット
  • どう対処していくのか
    • チームビルディングの最中でコンテキストの共有が不十分
    • 地道な勉強会、教育、コンテキストの共有
    • モチベーション大事
    • 自分がなにをすべきかが見える
    • 試行錯誤してやっていくしかない
  • 何事もやっていくしかない感じ

Scalaでの部分的な関数型プログラミング

  • Pureな部分とSideEffectのある部分をなるべくわけるようにしていく
    • 2つの層がでてきた pure layer effectful layer
    • 作用の起こす層はpure layerに依存する逆はだめ
    • pure layerはcore business rules

scalaメタプログラミング今昔物語

  • メタプロ
    • プログラムをデータとして扱うプログラム
  • 歴史
    • ~ 2.10 Gen 0
      • 直接さわれない scalapとかから
    • 2.10 Gen 1
      • sclaa.reflect
      • scalacに強く異存
        • DottyやIDEではうごかない
    • Ge 2
      • scala.meta
      • Standard AST
      • AST Converterの実装コストが高い
      • 情報ロス
      • 性能劣化
    • Next Gen
      • scala.macros
        • Standard abstract syntax
        • intellij AST とscalac ASTにそれぞれのラッパーを作る
      • Converterよりラッパーの方が実装が楽
  • ScalaGen
    • 静的コード生成
    • 注目していく価値あり
  • 質問
    • Standard abstract syntaxとQuasiquateとのちがい
      • 回答に質問者あまり納得していなかったようだが……

Haskell + Scala ハイブリッド開発大作戦

  • https://speakerdeck.com/ytaka23/operation-haskell-plus-scala
  • Scalaは純粋か非純粋な関数かが関数名からわからない
  • Haskellはわかる(IO Stringの例)
    • 副作用は隔離すべき
    • コンパイラが型チェックしてくれる
    • これがHaskellの特徴(Side Effectが型になる)
  • EtaからScala呼ぼうとすると隠れたものがあるので、書くのはやめたほうがいい
    • 日本では数人しか持っていない知見
  • JavaからEta, EtaからJava, 最終的にEtaのみでマイクロサービスにしてしまうという移行順序はよさげ
    • EtaからHaskellにしてしまったりできると言ってたが、どの程度手を入れる必要あるのだろうか
    • Haskellでなんらかのサービスを書く……?
  • 純粋な関数にちょっとログみたいとIOをいれてしまうと大変そうという質問
    • もうそういうものとして考えるしかなさそう

リアクティブDDD実践入門

  • AkkaをつかったリアクティブDDDの話
  • メッセージ駆動をつかったactor + DDD = リアクティブDDD
    • Akkaつかうとイベントソーシングも扱える
  • CQRS+ESだとreadとwriteのストレージはわける
    • 論理的でも物理的でもOK
    • そこまで
  • ドメインモデルの候補は言葉にするとでてきやすい
  • Akka persistenceだとDDD Repositoryの実装がいらない
  • Aggregateはインターフェイス層に、関心事がライフサイクル管理や整合性の保証なのでドメイン層ではない
  • CQRS
    • queryが多い場合にpayできる
  • 徐々に疲れで意識が一瞬飛ぶ

会場のWiFiがかなり不安定でその点はちょっと不満でした。明日はどうなるかな。

Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド (impress top gear)

Scalaスケーラブルプログラミング第3版

IntelliJ IDEAハンズオン――基本操作からプロジェクト管理までマスター