BT

新しい あなたは、アーリーアダプター?それともイノベーター?そんな皆様に、InfoQの新機能をご案内しています。詳細はこちら

FableでF#をJavascriptにトランスパイルする

| 作者: Pierre-Luc Maheu フォローする 1 人のフォロワー , 翻訳者 笹井 崇司  人のフォロワー 投稿日 2016年9月6日. 推定読書時間: 1分未満 |

原文(投稿日:2016/08/22)へのリンク

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

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT