Elmの特徴

Elmとは

Elmとは、簡単にブラウザアプリケーションを書けることができるプログラミング言語です。 Evan Czaplickiという方が大学での論文で発表したのがElmの始まりで、以降Evanさんがコミュニティと一緒にElmを作っています。

公式サイトのリンクになります。 http://elm-lang.org/

ElmはHTML、CSS、Javascriptを生成する。

Elmをコンパイルすると、HTML、Javascript、CSSを生成することが出来ます。

ブラウザ上のフレームワークになる。

また、ElmはReactやReduxといったブラウザ上のフレームワークと全く同じ目的として使うことができます。これは、ElmはElmで作るアプリケーションのアーキテクチャを規定していて、このアーキテクチャに沿って作るからです。(このアーキテクチャをThe Elm Architectureといいます。)

Elmはシンプルで小さな関数型言語

ElmはHaskellやいろんな関数型言語を参考にしていて、言語仕様がとても小さく強力なものになっています。

分類の上では「型付き純粋関数型言語」となりますが、そう聞くと「難しそう」「アカデミック」と感じる人もいますが、実際に触ってみると非常にわかりやすくまったく難しくないです(そう作ってある)。コードを眺めてみるとわかりやすそうと感じるのではないでしょうか。

初めての関数型のプログラミング言語の勉強としても最適と思います。構文の詳しくは、Elmの構文のページで解説します。

The Elm Architecture

GUIアプリケーションを作るのに、MVCやMVVMなどの設計方針があります、これをパラダイムとか、アプリケーションアーキテクチャと言ったりします。ElmではThe Elm Architectureという考え方で書きます。

この考え方は主にModel(モデル。アプリケーション内の状態の定義)、update(状態をどう更新するかの定義)、Msg(アプリケーション内で起こるイベントの定義)、view(状態を画面に表示)といった役割の関数と型を書きます。

このパラダイムは、他のパラダイムに比べて非常に静的で、状態の変更や副作用がわかりやすく、拡張性が高いものとなっています。

The Elm Architectureは他のJSフレームワーク(redux、Cycle.js)にも影響を与えた考え方です。詳しくはThe Elm Architectureのページで解説します。

高速

Elmは他のJSフレームワークに比べて描画が速いという結果が出ています。またコンパイルもフロントエンドで使うコンパイルする言語に比べて高速です。

Elmは用意されているHTMLライブラリでHTMLを書くと、自然に仮想DOMという技術を使用します。これにより高速化するのに特に手間がいらないようにもなっています。このHTMLライブラリの簡単な使い方をelm-lang/htmlのページで解説します。

学習を始めやすく続けやすい。

構文に始まり、Elmは学習の始めやすさや学習曲線を大事にしています。教育の現場でも使われています。なるべくシンプルに始めて、順番により高度なことを理解できるようになっています。

例えば、公式Webページには文章やサンプルが多くブラウザエディタやREPLなどで、すぐに試せる環境があります。

またElmは最終的にHTMLという普段親しんでいるデータになるので、ブラウザで動作を確認できて、github-pagesなどで簡単に公開できます。 Elmは自分のステップでプログラミングを習得できると思います。

FRPとは関係のない言語になりました。

Elmはファンクショナルリアクティブプログラミング(FRP)という分野の研究から生まれたこともあって、FRPとしても有名でした。しかし、v0.17へのバージョンアップでその機能(Signal型)を取り除きました。これはFRPの部分がElm初学者の壁になっていたことと、SignalのないElmでもThe Elm Architectureで書くことで、誰しもが以前と遜色ないアプリケーションを記述できることがわかったからです。なのでネットにはElmのFRPの記事等が残っていたりもしますが、今は使いません。

Elmのエコシステム

Elm用のパッケージ管理システムや、デバッガーも用意されています。またファイル監視ツールもあります。ツールのページで解説しています。

純粋、静的、型検査される

Elmは純粋です。この事は、言語の仕様の中に「代入」や、try catchgoto;などの句切り、処理がジャンプしたりさせたりする構文が無いことを表しています。そのことは書かれたコードが正しいことを(人間や型検査からみて)論証しやすいということです。

型検査されるので、Elmをコンパイルして出来るJSファイル(Elmランタイム)は、コンパイルした後は壊れないという信頼性があります。また純粋で静的型付きの機能で安全性が保証されることで、テストも少なくなります。

Elm一つで済む

フロントエンド環境で、「型検査されるフレームワーク」を導入しようとすると、沢山のライブラリを落とし、それらを継ぎ接ぎして管理して、大量の設定を行うという大変な作業が必要になります。Elmでも行く行くはJSと合わせた環境になりますが、それでもElm一つでアプリケーションの大半を賄えて制作できるのはとても楽であります。

バージョンアップ時に、破壊的変更が行われることが多い。

Elmはネットのツールの文化そのままに、バージョン管理を行いながら、常に変化を取り入れていくスタイルです。過去のバージョンとの互換性を捨てより良いツールにする方を優先するので、バージョンアップ毎に大きく変わります。ソースコードの変更はいつも人力で無理のない量ですが、更新時は情報を追う必要があるかもしれません。

Elmの使われ方

Elmの使われ方を紹介します。

・JSを多く使う、よく動作するGUI画面を簡単に作ることが出来ます。

・JSの代わりに静的型付け言語で書くことが出来ます。(== flow type)

・さらにフロントエンドのフレームワークになります。(== redux) SPAも出来ると思います。

・既存のサイトにElmを使うには、特定のページだけElmにするなど、少しづつ置き換える使い方から始めるのがいい様です。

・SEOや動作速度を気にしないツール系(管理画面)が得意です。サーバーの管理画面や、内製ツールの作成の実績を聞きます。

・速度やSEOを気にするWeb系なら、HTMLのテンプレート言語として使うことが出来ます。アニメーションや、Webページの一部分のアプリケーションをElmの埋め込む機能を使い、記述するという使い方もできます。

ElmをコンパイルするとJSになるということは、既存のシステムや環境にElmを組み込むことも容易です。まだ情報が少ないですが、ElectronやReact Nativeなどフロントエンド以外の環境でもElmを使うことが出来ます。

使ってみると

Elmで作ってみるとコードは全体を見渡しやすく、HTML純粋型付きの安全性の力も借りることができ、とにかく作りやすいです。そしてThe Elm Architectureを知れば、もう楽しくて書きまくるだけだという気持ちになるでしょう。

results matching ""

    No results matching ""