カンファレンスの総括
ここからは筆者の主観による総評です。
「スケールアップ」と「リファクタリング」
今回のカンファレンスで特に印象的だったのは、2本のキーノートがいずれも「スケールアップ」と「リファクタリング」をテーマにしていたことです。
というのも「Elmの良さは知っていて、小さなサンプルがうまく動くのは知っている。じゃあ大きなアプリケーションの作り方は一体どう作ればいいのか」というのが、今のElmコミュニティの大きな関心事だったからです。
それに対して答えを用意したのが、Evan Czaplicki氏とRichard Feldman氏の発表です。
と言っても、「これが大規模にも堪えられる完璧な設計だ」という話ではありません。ビジネスからの要求が常に変わっていくことを前提に、その時々で考えうる最もシンプルな方法で実装し、必要に応じてリファクタリングしていこうという話です。
Evan氏は一見似ている2つの機能が、全く異なる方向に拡張する例をあげながら、漸進的なアプローチの重要性を説明しました。Richard氏は、リファクタリングによって、どのような問題を解決するのかを意識することが重要だとし、具体的な方法とアンチパターンを紹介しました。
両者の話に共通して特徴的なのは、例がとても具体的であることと、言語仕様のレイヤーから大きく離れていることです。
Elmの言語仕様はかなりシンプルであり、言語機能を一通りマスターするコストは比較的低くなっています。その代わり、Elmはプログラミング言語としては珍しくアプリケーション設計をかなり重視します。そのため、今回のトークのように言語の作者自身が、アプリケーションの作り方にかなり突っ込んできます。
もうひとつ指摘すべき点は、これらの話はリファクタリング「できる」ことが前提になっているということです。常識的には後の仕様変更に堪えられるように(つまりリファクタリングしなくても済むように)、万能な枠組みを考えがちですが、そのせいで必要以上に複雑になってしまいます。Elmは強力な型システムの恩恵で、かなり安全にリファクタリングを行うことができます。型が厳しいことによって、設計の変更に関して柔軟な対応が可能になっているのです。
プロダクション事例の増加
去年のカンファレンスに比べて、プロダクションにElmを導入した話が増えました。
このカンファレンスに限らず、Twitterなどでも本番リリース報告を、以前より頻繁に見かけるようになったと思います。
今回もCTOやビジネスの観点から、Elmの導入がどう役に立ったのかという発表(Elm from CTO perspective・Elm from a Business Perspective)があり、プロダクションに責任を持つ層にリーチしていることが分かります。
Elm採用の決め手としては、やはり型の恩恵で大きなリファクタリングがしやすいこと、新規参入者でも、すぐに安全に機能追加を行えることが共通項としてあるようです。
また、導入を決定する人自身がものすごい熱意を持って、事前にいくつも小さなアプリケーションを作って素振りをしているという点も、プロダクション導入にとって重要な要素でしょう。
Elmに詳しい人がチームを先導していくのは成功の秘訣の一つであり、公式ブログ記事「How to Use Elm at Work」でも言及されています。
豊富なビジュアルコンテンツとデモ
Elmは画面を作るのための言語というだけあって、作ったアプリケーションの紹介が視覚的に楽しめるものもElmカンファレンスならではです。
スライド自身がElmで書かれていたり(Bringing Fun to Graphics Programming・Dive:Building Prezi-like Presentations with Elm)、アンケートをElmアプリを使ってその場で集計したりと(Elmception - supercharging presentations with Elm)、趣向を凝らしたトークが多くありました。
型によるモデリング
Elmの型はシンプルながら高い表現能力を持っています。そのため、型を使ってデータモデリングに役立てようという趣旨の発表が多くありました。
例えば「Understanding Style」では、CSSで特に混乱しがちなレイアウトを、Elmの型で表現するアプローチを紹介しています。
その他にも「Cooking with Elm」や「Music Chords Charts in Elm」など、あらゆる事柄を型で表現してしまうのは、Elmプログラミングの面白さのひとつです。
Elmへのフィードバック
トークの目的は、参加者に知識を提供したりノウハウを共有するということもありますが、Elmの使い勝手を作者のEvan氏にフィードバックするという意味もあります。
Evan氏にとってElmが何に対してどのように使われているかという情報は、言語の方向性を決める上でとても重要です。
例えば、ニーズの多いサーバーサイドレンダリングのサポートも検討されていますし、ネイティブアプリをターゲットにしたいというニーズが高まれば(Elm Native UI in Production)、そちらのサポートも視野に入ってくるかもしれません。
「The State of Elm 2017」では、コミュニティを中心としたElmユーザー対象の事前アンケートを分析し、どういうバックグラウンドの人がどういうシチュエーションで使っているか、何を良いと感じていて何を不満に感じているか、という統計をとっており、とても興味深いものになっています。
具体的には、バージョンは常に最新版に追従すること、フォーマッター(elm-format)は今すぐ使うこと、質問にSlackを利用することなど、イベントの開催者はこの統計結果を使う事を提案しています。
より敷居の低い関数型言語へ
Elmがターゲットとしているのは一般的なWeb開発者で、関数型言語の経験者のためのものというわけではありません。
しかし、実際には関数型言語の経験者の方が学習が高速で、そうでないJavaScriptの開発者は、依然として学習コストを高く感じているという話がちらほらありました。また、そうした状況を踏まえて、関数型言語の初心者向けのトークもありました。
「Persistent collections: How they work, and when to use them.」では、基本的なデータ構造の解説と、それぞれの特性を踏まえて、いつ何を使えば良いのかを丁寧に解説しています。
またEvan氏も「Functional Programming in Elm」と題した読み物(ドラフト版)を、関数型言語の初心者向けに公開を開始しました。
このように、Elmコミュニティは初心者に対してかなり開かれています。
何か質問があればSlackで聞くのがベストと推す声が多くありました(How to unblock yourself with Elm)。
まとめ
いかがでしたか。いまElmでは熱狂的なアーリーアダプターたちによって面白いものが次々と生み出されている最中です。本記事によってその雰囲気を少しでも多く感じ取っていただき、またElmを試すきっかけが生まれれば幸いです。
ちなみに次のカンファレンスは2017年9月28日、アメリカ・セントルイスにてStrangeLoopと同時開催です(公式サイト)。興味のある方はぜひ参加してみましょう!
