Elm Advent Calendar 2016 の16日目です。
Web API のサポート状況
A Farewell to FRP で触れられている通り、Elm は Web API を使ったライブラリの公開をコミュニティに許していません。(これについては議論すると長くなるので、詳しくは読みにいってください。)
そこで、よく知られている Web API のサポート状況をざっくり表にまとめました。該当パッケージがない場合は、Port を使いましょう。
API | 該当パッケージ | 補足 |
---|---|---|
History | elm-lang/navigation | いわゆる SPA のためのルーティング。 |
DOM | elm-lang/dom | フォーカス・スクロール・要素のサイズ取得。caret position や mesureText なども候補には上がっている。 |
HTML | elm-lang/html | Virtual DOM。 |
SVG | elm-lang/svg | Virtual DOM。 |
Canvas | (非推奨) evancz/elm-graphics | 最終的にはもっと機能を増やしたAPIを公開するとのこと。... I expect we will eventually have an API specifically targetted at canvas that covers more features. |
WebGL | elm-community/webgl | API改善に向けて elm-dev にて議論中。 |
HTTP | elm-lang/http | |
Web Socket | elm-lang/websocket | |
Geolocation | elm-lang/geolocation | |
Page Visibility | elm-lang/page-visibility | |
Web Storage | N/A | パッケージ未公開。キャッシュとして使うことを前提に LocalStorage をラップ。 |
Cookie | N/A | パッケージ非公開。セキュリティ上の問題からサポートしない事にした(Maybe the Cookies API should not exist)。 |
File / Binaries | N/A | ファイルのアップロードはよく議題に登る。バイナリ一般は先が遠そう。 |
Web Audio API | N/A | かなり先は遠そう。 |
Web RTC | N/A | かなり先は遠そう。 |
Web Worker | N/A | POCがあるので可能ではありそう。 |
Service Worker | N/A | |
その他 | N/A |
見ての通りオーディオなどは本当に弱いです。もし使う予定があれば、最初から Port 前提で設計を考えるのが良いでしょう。Native Module は非サポートなので、がっつり依存すると何が起こるか分かりません。
Port は公式ドキュメントにある通り "JavaScript as a Service" と考えるのが妥当です。関数の代用として考えるときついと思います。ちなみに、Elm 0.17で Port の使い方が変わりました。定数が使えなくなっていますが、Mainモジュール以外からでもport module
と宣言すれば Port が使えるようになっています。