search
LoginSignup
2

More than 5 years have passed since last update.

posted at

Organization

[Elm] Web API サポート状況

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 が使えるようになっています。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2