Elm について (はじめに)

Elm は JavaScript にコンパイルできる関数型プログラミング言語です。 ウェブサイトやウェブアプリケーションを作るツールという面では React のようなプロジェクトだと言えます。 Elm はシンプルであること、簡単に使えること、高品質であることを大切にしています。

このガイドは以下のことを目指します。

  • Elm によるプログラミングの基礎を身に着けてもらうこと
  • The Elm Architecture を使ってインタラクティブなアプリケーションを作る方法をお見せすること
  • あらゆる言語で使える法則やパターンを重視すること

最終的にはあなたには Elm を使って素晴らしいウェブアプリをただ作れるようになるだけでなく、Elm をうまく使えるようになるための核となるアイディアやパターンを理解してもらえればと思います。

Elm に対して様子見の立場である方も、Elm をちょっと試してみて実際に何かプロジェクトで使ってみると JavaScript や React のコードがいままでよりもうまく書けるようになっているはずです。 Elm で得られた知見はいろんなところで簡単に役立てることができます。

Elm を知るためのサンプルコード

もちろんこのガイドの原著者である Evan は Elm の作者でもあるので、Elm を素晴らしいものだと信じていますが、読者の皆様にも同じように感じてほしいと思っています。 そのために簡単な Elm のプログラムをお見せします。

以下のコードはカウンターのサンプルです。 このコードは、カウンターをインクリメント(+1)したりデクリメント(-1)したりするものです。

import Browser
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)

main =
  Browser.sandbox { init = 0, update = update, view = view }

type Msg = Increment | Decrement

update msg model =
  case msg of
    Increment ->
      model + 1

    Decrement ->
      model - 1

view model =
  div []
    [ button [ onClick Decrement ] [ text "-" ]
    , div [] [ text (String.fromInt model) ]
    , button [ onClick Increment ] [ text "+" ]
    ]

updateview が完全に分離されていることにお気づきになることでしょう。 また、HTML を宣言的に書くだけで、Elm が DOM に関するめんどうごとを全部引き受けてくれます。

なぜ関数型を採用しているか

まず「関数型プログラミング」について今までに聞いた話をすべて忘れてください。 なんだかよくわからない用語を使ったり、今まで見たことないような特殊な考え方だったり、実際にアプリケーションを作るのには向いていなかったり... 反吐が出ますね。

Elm はもっと実用的な以下のものを実現するために手段として関数型の考え方を使っているだけです。

  • 実用上ランタイムエラーがでないし、nullもないし、undefinedが関数だなんて話はありえません
  • とてもわかりやすい親切なエラーメッセージによってより素早くあなたのコードに機能を追加できます
  • コードの規模が大きくなっても全体の設計が壊れることがありません
  • すべてのElmパッケージにおいて、決められたルールに則って自動的にバージョン番号が付与されています

JSをそのまま使ったらどんなライブラリを使って工夫してもこれらを実現することはできませんが、ElmならJSという言語の枠に縛られずに簡単に実現できます。 こんな素晴らしいことが可能になるのは、Elmが「静的型付関数型言語」という40年以上の歴史を持つ研究成果を活用しているからにほかなりません。 そのためElmにとって、関数型というのは目的ではなく手段であり、こういった現実的なメリットを得るという目的のために関数型言語を採用しているに過ぎません。 もちろん関数型言語という少し見慣れないパラダイムを使っているElmを学ぶには時間が少しかかりますが、このガイドを読むのに使うたった数時間の投資に十分見合うだけの価値をもたらしてくれます。

作者のEvanはElmを簡単に学んで使いはじめられるように多大な注力をしているので、Elmを少し試してみてぜひあなたの感想を教えてください。 (訳注: elm-jpでは日本語でElmについてやりとりできるdiscordを用意していますので、ぜひ招待リンクから参加して感想をお聞かせください)

Elmによって楽しく新鮮な感動を覚えていただけると幸いです。

results matching ""

    No results matching ""