Facebookのflowをちょっとだけ使ってみた

Facebookのflowを使ってみた。JavaScript向けの型チェックしてくれるやつみたいだ。

使い方とかはドキュメントに書いてあるんだけど、まあメモがてら自分が試してみたことを書いていってみる。

インストール

ここにOS X用のバイナリとLinux(64bit)用のバイナリがあるのでダウンロードして展開する。brewでインストール出来るようになればいいんだけど、って自分で書けばいいのか。

追記

既にformulaが追加されているのでbrewからインストールできる。

展開したらパスを通す。

$ cd ~/Binary
$ curl -O http://flowtype.org/downloads/flow-osx-latest.zip
$ unzip flow-osx-latest.zip
$ rm flow-osx-latest.zip
$ echo 'export PATH=$HOME/Binary/flow:$PATH' >> ~/.bashrc
$ source ~/.bashrc
$ flow --version
Flow, a static type checker for Javascript, version 0.1.0

動いた。

試してみる

とりあえず試してみる。

$ mkdir -p ~/Work/flow
$ cd ~/Work/flow

空でも必ず.flowconfigが必要になるらしいので作っておく。

$ touch .flowconfig

追記

touchじゃなくてflow initの方が良いみたい。

$ flow init

テキトーにindex.jsとか書いてみる。

function test(s: string) {
}

test(1);
$ flow check --all

/Users/macbookpro/Work/flow/index.js:5:6,6: number
This type is incompatible with
  /Users/macbookpro/Work/flow/index.js:1:18,23: string

  Found 1 error

怒られた!

コメントに型を書きたい

型チェックしてくれるのはいいんだけど、Closure Compilerみたくコメントに型を書きたいなーと思ってたんだけど。

Type annotations in comments? #3

どうも読んだのと試した感じだと、JSDoc風のコメントとか独自?のコメントも見ているらしくて、実際

/**
 * @param {string} s
 */
function test(s) {
}

test(1);
$ flow port index.js
/Users/macbookpro/Work/flow/index.js
--- old
+++ new
@@ -1,7 +1,7 @@
 /**
  * @param {string} s
  */
-function test(s) {
+function test(s: string) {
 }

 test(1);

とかやるとdiffを出力してくれるんだけど、

$ flow check --all

Found 0 errors

ってなるのでon the fly的にはまだ出来ないのかな。--helpをflowコマンドとかサブコマンドに渡すといろいろ出してくれるのでもう少しいろいろ見てみようかな。


mizchiさんのQiitaの記事。

facebook/flowファーストインプレッション