Elmを使って失敗のリスクを軽減する

Strange Loop 2015の実際に試してみようというセッションで、Richard Feldman氏が、失敗のリスクを軽減してウェブアプリをより高速に回すため、彼のチームがどのようにElm言語を使い始めたのか紹介した。

どこのJavaScript開発者もおそらくundefined is not a functionというエラーに遭遇してきただろう。Feldman氏はこの苦しみを使って、開発者の体験をより良くするElmの力について理解させようとした。Elmコンパイラは素のJavaScript開発者を悩ませる多くのエラーをキャッチする。Feldman氏によると、Elmアプリでは「いったんコンパイルすれば、通常はリグレッションやランタイム例外なしに、一度で動作する」という。

なぜ私がElmを使っているのか、なぜそんなに心地良いユーザ体験なのかを考えてみると、それは日々素晴らしいと感じさせる、ほんの細かなこと、ちょっとした洗練さ、ちょっとしたユーザ体験のためです。

なじみのない人のために説明すると、ElmはEvan Czaplicki氏によって作られた関数プログラミング言語で、ウェブUIの構築が簡単になるよう設計されている。ElmはJavaScriptにコンパイルされ、Reactのように、インターフェイスを操作するのにバーチャルDOMを使っている。Elmのブログによると、あるベンチマークでは、Reactよりも劇的に高速だという。

Bar Graph of Runtime Speeds for TodoMVC app in various languages. Shows Elm as very performant.

Elmの最もシンプルなコード例は次のようなものだ。

import Html exposing (span, text)
import Html.Attributes exposing (class)


main =
  span [class "welcome-message"] [text "Hello, World!"]

「Elmにあるものはすべて、イミュータブルなデータとステートレスな関数、この2つのどちらかです」Feldman氏はいう。この関数的純粋さ(関数に副作用がない)は理論的には素晴らしいが、ウェブ開発者はたいてい、他のさまざまなシステムとやりとりしなくてはならない。これをうまく避けるため、Elmには「task」と呼ばれるものがある。Feldman氏によると、これは「あなたがやりたいことのデータ表現であり、命令のリストだ」という。

Elmは「port」を使って既存のJavaScriptライブラリとやりとりできる。開発者はアプリの一部をElmコードで入れ替え、portを使って2つをつなげることで、Elmにつま先を踏み入れることができる。

Feldman氏のトークビデオは他のセッションと共にYouTubeに置かれている。また、Feldman氏はElmを使ったサインアップフォーム構築に関するチュートリアル記事を書いている。