QCon London 2017において、noredinkのソフトウェアエンジニアで、Manningから“Elm in Action”という自書を著したRitchard Feldman氏が、Elmへの変更を決断したことによって10万コード行のシステムが2015年以来一度も運用障害を起こしていないという、同社の状況に関して解説した。今回の記事では、その要点を簡単にまとめてお届けする。
Elmは純粋な関数プログラミング言語である。JavaScriptにコンパイルされるこの言語は、ブラウザベースのアプリケーション開発での不変データや静的型付けの利用を促進する。Feldman氏は、氏らが小さなサイドプロジェクトでElmを使用した後に、本格的な開発に取り掛かったことについて、順を追って説明している。特に、Reactを使用した数ヶ月間のプロジェクトを完遂した後、氏は次のようなことに気付いたという。
Elmならば非常に短時間でこれを行なうことができるので、スタックにこの新たなテクノロジを導入することによって、作業に必要な時間の短縮と、生産性の大幅な向上、さらにはメンテナンスの容易化が実現できるでしょう。
Feldman氏は、Elmの使用による生産性と信頼性の向上に関して、注目すべき点をいくつか指摘する。
- Elm用の高度なREPLであるElmライブエディタEllieは、Elmコードの記述、コンパイル、実行の感想なリッチインターフェースを提供する。
- Elmは
null
ポインタをシステム内で自由に伝搬可能にすると同時に、Maybe
値を使った明示的な操作をプログラマに要求する。これにより、いわゆる“one billion dollar mistake”の心配がなくなる。 - ElmはUI全体の状態を表現するために単一の不変値を使用する。モデルは必ずしもモノリシックな値でなくてもよいが、Reactとは異なり、個々のコンポーネントに状態は関連付けられていない。そのモデルを使ってElmはVirtual DOMをアセンブルして、実際のDOMとの
diff
を取り、関連する変更のみを適用する。Reactにもあるこのアプローチは、パフォーマンスの維持と、不変値を扱う容易さの両立を可能にする。 - UI状態を単一の不変値で表現することの大きなメリットのひとつは、一連のUI変更を、関連付けられた不変値のシーケンスとして処理できる点にある。デバッグモードでコンパイルした場合は、関連するモデル値を単にクリックするだけで、以前のUI状態をナビゲートすることができる。さらに、それらの値をセットとしてエクスポートすることによって、他の開発者が、問題のあったUI状態とその手順を簡単に再現することが可能になる。
- Feldman氏によれば、静的なタイプチェックはElmの大きなセールスポイントであり、“コンパイルすれば動作する”をほぼ完全な真実にするものである。
- Elmの信頼性を支える大きな要素のひとつは、JavaScriptとの相互運用性の扱い方にある。JavaScriptにコンパイルされる他のほとんどの言語とは対照的に、Elmはメッセージベースのアプローチを採用しており、JavaScriptコードはサービスの内部で動作する。これによって、静的な型付けによって実現される保証が、型を持たないJavaScriptコードによって失われることを防いでいる。
- 最後に、
npm
ほどの規模は持たないものの、メリットのひとつとして挙げられるのがElmパッケージマネージャである。注目すべきなのは、パッケージ可能なのがElmコードに限定されている点だ。具体的には、バイナリが許可されていないため、npm
よりもセキュアになっている。さらにパッケージは、正常なビルドが可能であることと同時に、セマンティックバージョニングの使用が自動的に強制される。
Feldman氏は結論として、画面で何らかの処理を行なうだけであればJavaScriptの方が簡単だが、Elmを使えば開発速度の全体的な向上が実現する、と述べている。
最後に言及されているのは、Elmのような言語の使用に関する一般的な反対意見である、開発者の雇用が難しいという点についてだ。実際にはElmを使うことで、noredinkは2倍のメリットを得ることができた、とFeldman氏は言う。彼らの仕事のポストが注目を集めたことと、Elmの習得に関心のある開発者を引き付けたことだ。
この記事を評価
- 編集者評
- 編集長アクション