FableはF#からJavascriptへのトランスパイラだ。F#スクリプトもしくはF#プロジェクト全体をJavascriptにコンパイルする。.fsxスクリプトもしくはプロジェクト全体をコンパイルするオプションを付けて、コマンドラインから実行する。Fableはnpmパッケージとして配布されている。
FableはF#コアライブラリの大部分と.NET BCLのほんの一部をサポートしている。基本型はすべて、完全もしくは例外付きでサポートされている。重要な例外のひとつはasync
だ。async計算式は、RunSynchronouslyが使えないことを除けば、期待通りに動く。
Fableはユーザ作成プラグインによって拡張できる。Fableプラグインは通常、コンパイル処理中に外部ライブラリ呼び出しを置き換えるのに使われる。プラグインの作成は、IReplacePluginインターフェイスとその単一のメソッドTryReplaceを実装することで行う。以下に、System.Randomを置き換えるプラグインのスケルトンを示す。
type RandomPlugin() =
interface IReplacePlugin with
member x.TryReplace com (info: Fable.ApplyInfo) =
match info.ownerFullName with
| "System.Random" ->
match info.methodName with
| ".ctor" -> failwith "TODO"
| "Next" -> failwith "TODO"
| _ -> None
| _ -> None
プラグインを使うと、テストフレームワークの変換など、もっと複雑なシナリオが扱える。現在、NUnitはテストをMochaに変換するプラグインでサポートされている。
React Nativeを使うことで、モバイルアプリをFableで作ることも可能だ。React NativeはReactアプリケーションをAndroidやiOSアプリにコンパイルするものであり、React Nativeへのバインディングを提供するFableプラグインが存在している。ただし、React Nativeによるモバイルアプリのサポートは実験的なもので、頻繁な変更に注意する必要がある。
FableはオープンソースプロジェクトでGitHubから入手できる。Fableのウェブサイトにはドキュメントとサンプルコードがある。本格的なプロジェクトでの使用例に、Ionideがある。これはVsCodeとAtomでF#をエディットするためのプラグインで、その2.0リリース以降でFableを利用している。
Rate this Article
- Editor Review
- Chief Editor Action