注意
この記事は 2016/06/29 時点の内容です。FlowのWindows対応は現在進行中のため、ここに書いてあることはすぐに陳腐化する恐れがあります。
はじめに
2016/06/29時点ではFlow (v0.27.0) はWindows環境に正式対応していない。
Requirements
Flow works with:
Mac OS X
Linux (64-bit)
そこで、どうしてもWindows環境でFlowを使いたい場合は、OCamlPro teamによるビルド版を使うという方法があった。過去にQiitaの記事このOCamlPro team版が紹介されていた。
しかしながら、OCamlPro team版は2015年12月以降は更新が止まっており、バージョンが0.19.1と古いままとなっていた。
そんな時、FlowのWindows対応のIssueをsubscribeしていると、二日前に 最新版をWindowsでビルドできるようになったよ というコメントが投稿されたことに気づいた。
oviava commented 2 days ago
You can build the latest version directly with OCAML win:
https://gist.github.com/oviava/9c7f0a5ec2fdcdc737b0a75239e6546f
このコメントを投稿したoviava氏は上記GistでWindowsでの動かし方について書いてくれている。
というわけで自分もこれを参考にして動かしてみた。
事前準備
OCPWinのインストール
FlowのビルドにOCamlが必要なので、Windows版バイナリのOCPWinをこちらから入手してインストールしておく。
なお、oviava氏のGistでは ocpwin64-20160113-4.01.0+ocp1-full-mingw64.exe
が使われていたが、自分は少し新しい ocpwin64-20160113-4.02.1+ocp1-full-mingw64.exe
で試してみている。
ansiconのインストール
コマンドラインでflowを実行すると、ANSIエスケープシーケンスで色付けされるのだがWindows7のコマンドプロンプトやGit Bashだとこれが認識されず、制御文字丸見えで非常に読みづらい。
Windows7だと ansicon をインストールすればこれは解決できるので、入れておいた。
※試していないがWindows10だとANSIエスケープシーケンスのサポートがされたようなのでansiconは不要と思われる。
Flowのビルド
Flowをソースよりビルドする。まずはGitHubよりソースを取得する。
git clone https://github.com/facebook/flow
後は、ビルドスクリプトとして make.bat
があるためこれを叩くだけと簡単。Windowsのコマンドプロンプトを開き実行すればよい。ただし、masterブランチの状態によってはビルドが失敗するケースがあるの注意。
例えば 2016/06/29時点で最新のcommit 120140baef42941b786dfa1e0cb2953b32a6882c
ならビルドできたが、1つ前の commit 92ee96f32c3e327e7bae0e5aae60f8f0050e859c
ではビルドが壊れてしまっているので注意。
c:\Users\wadahiro\src\github.com\facebook\flow>make.bat
c:\Users\wadahiro\src\github.com\facebook\flow>REM No echo arguments will be printed in the current state
find_project_root
...
0.06s flow\flow.cmo [ done ]
0.16s flow\flow.cmx [ done ]
0.98s flow\flow.byte.exe [ done ]
1.84s flow\flow.asm.exe [ done ]
Build Successful in 83.26s. 761 jobs (parallelism 0.8x), 1265 files generated.
ocp-build: Leaving directory `c:\\Users\wadahiro\src\github.com\facebook\flow'
1 個のファイルをコピーしました。
後はビルドされたflow.exe
をPATHが通っているc:\Users\<my_user>\AppData\Roaming\npm\
にコピーしておく。
c:\Users\wadahiro\src\github.com\facebook\flow>copy bin\flow.exe c:\Users\<my_user>\AppData\Roaming\npm
1 個のファイルをコピーしました。
使ってみる
$ flow init
$ flow check
Found 0 errors
エラーケースを試す。下記内容のindex.js
を作成し、
// @flow
function foo(n) {
return n * 2;
}
foo('bar');
flow check
すると、ちゃんと動いていますね!
$ flow check
index.js:7
7: foo('bar');
^^^^^^^^^^ function call
4: return n * 2;
^ string. This type is incompatible with
4: return n * 2;
^^^^^ number
Found 1 error
Nuclideでも試してみた
oviava氏のGistでは、Windows環境のNuclide上でFlowチェックを走らせる方法も書いてくれている。
Gistによると、c:\Users\<my_user>\.atom\packages\nuclide\pkg\nuclide-flow-base\lib\FlowHelpers.js
の修正が必要と書かれているが、実はoviava氏がNuclideに本問題のPull Requestを出しており既にマージさている。なので、最新版(v0.148.0)のNuclideを使えばこの問題は発生せず、修正は特に不要である。
コマンドラインでチェックしたindex.js
をNuclideで開くと、下記のようにこちらも無事に動作することを確認した。
まとめ
ずっと放置されていたみたいだが、ようやくFlowもオフィシャルにWindows対応してくれそうな動きになってきました。ただし、Windows対応のIssueでFlow開発者のgabelevi氏が下記のようにコメントしており、まだ使用はおすすめはしないとのことなので、実プロダクトへの適用はもうちょっと待ったほうがよさそうです。
@oviava - yep, as you've noticed Windows support is getting closer! It builds and mostly works, but I wouldn't recommend it quite yet.