弊社では「筋肉の人」*1として知られるRichard FeldmanはElmの創造神ことEvan擁するNoRedInkに所属するエンジニア。
Evanが比較的キーノート的なElmの未来やらビジョンを語るトークをする一方で、RichardはどちらかといえばElmをプロダクションで使うにあたって、どのように書くことでスケーラブルにできるか、のようなはなしをメインに据えている感じがある。
彼はアメリカで開催されているelm-confや、ヨーロッパのelm Europeなどで割と長尺のトークを務めることが多く、その内容もElm中上級者になるにはうってつけの内容ばかり。どのトークもElmの基礎的な文法や紹介は完全に端折られていて、Elmを使うこと前提でどのようにうまく使うかにフォーカスしている。
彼の動画は会社のElmメンの会(?)の中で一気に集中して見たことがあり、僕含めみんなにとって非常に学びが多かった。ということで、中でもこれだけは!というものをこの記事では紹介したい。
"Making Impossible States Impossible"
2016年のelm-confでのトーク。Elmではカスタムタイプを使って排他的な状態をモデリングすることで、ビジネスルール上起き得ない状態を作り出すことを不可能にすることができる。たとえば、絶対に空にならないリスト、というモジュールを作りたければ、型をしっかりとモデリングすることで空状態のリストを作れないようにすることができるし、それをコンパイル時に検出することができる。
また、カスタムタイプに対する操作を制限して内部の情報をカプセル化するためのテクニックとして、Elmのモジュールシステムを用いたOpaque Typeが紹介されている。
"Immutable Relational Data"
データソースがアプリケーションの中に分散すると、どうしても同期をとらないといけなくなってしまう。そして、同期をとる部分というのはerror-prone(エラーが起こりやすい)部分でもある。なので、できるだけデータというのは重複しないようにして、パフォーマンス改善のキャッシュ戦略などを除いては可能な限りSingle Source of Truthを守ろう、というはなし。
Elmで配列の値を扱う際、なにも考えないとすぐに「これはListでいいかな」みたいな発想をしてしまいがちだが、ListよりもSetやDictなどのコレクションを適切に使うほうが、そのデータの集まりはどういう集まりなのか(たとえば、ユニークなデータのあつまりなのか、それとも重複を許すのか等)が意図が明確になるのでよい。これはElmに限らずJavaやScalaなど、コレクションの種類が豊富な言語でも同じかなと思う。
"Scaling Elm App"
題名の通りで、デカいElmアプリケーションに起こりがちなあれこれに関するTipsのトーク
上のふたつのトークと比べて、実際のアプリケーションに起こりがちなことにフォーカスしている。たとえば、Modelが大きくなってきたときにはどうするのがいいか。再利用可能なパーツをTEAモジュールにするにはどうすればいいか、などなど。
"Make Data Structures"
2018年のelm Europeでの彼のトーク。個人的には一番推し。
プロダクションで作るようなアプリケーションでどのようにカスタムタイプを使ったデータ構造のモデリングをするのが望ましいかについて話している。
このトークではDreamwriterと呼ばれるサンプルのElmアプリがお題となっていて、アプリケーションの仕様としてデータをWeb APIとIndexedDBへ同時に取得しに行き、どちらにもデータがなければ空の状態とする、というものがある。単純に考えると、すぐに個別のデータの有無をMaybeで表現しようとしてしまいがちだが、カスタム型でデータの取得状態をLoading
/LoadingProblem
/LoadedOne
/Loaded
などのように表現をすることで、仕様上ありえない競合状態を作り出せなくできる。
加えて今回もまたOpaque Typeに言及しており、今回はモジュールのAPIとしてどのような関数を公開すべきか(セッター/ゲッターではなくマッパーを公開しよう、など)という内容も含まれる。非常に充実した内容だ。
余談
この記事を書いたとき、4番目の動画がYoutubeで見つからなかったので本人にメンションしていた。実際には自分の見落としだったけれどリプがもらえて、Elm界隈の距離の近さいいナ〜と思った瞬間でもあった。
This one?https://t.co/ZYkuHtqmY7
— Richard Feldman (@rtfeldman) 2019年8月17日
That was the first Elm talk I ever gave!
- 作者:鳥居 陽介
- 発売日: 2019/02/27
- メディア: 単行本(ソフトカバー)