Flowの速い環境変化

Flowの0.54.0が出てたのでアップグレードしたら、挙動が変わった。

# .flowconfig
[ignore]
.*/sass/*
.*/static/*
.*/bin/*
.*/pkg/*
.*/src/*
.*/vendor/*

[include]

[libs]

[lints]

[options]
suppress_comment= \\(.\\|\n\\)*\\flow-suppress
esproposal.decorators=ignore

設定がスッキリしてしまいました。Immutable.jsの型定義ファイルは、libsエントリに入れずともnode_modulesの下から検索してくれるようになったようです。エントリを残しておくと、Flow組み込みのReactのほうにもある「Iterable」型定義を上書きしてしまう不都合が発生します。また、node_modulesの下は型チェックに行かなくなったみたい。ignoreエントリに明示しなくても動きが変わらなくなった。

History、material-ui、react-hot-loader、react-router-redux、redux-form、redux-form-material-uiの型定義スタブがなくてもエラーにならなくなった。現在唯一にスタブが必要なのはbrowser-cookies、マイナーだからか?

EslintにFlowを一緒にやってもらう

WebStormの機能をもちいてFlowの型チェックエラーをエディタに反映してもらってましたが、バックグラウンドでFlowサービスをずっと動かして重いせいなのか、今日はベイエリアも珍しく摂氏34度を超える猛暑になってるのでPCのファンが止まらない。WebStormじゃないところで動かすことも考えて、FlowをEslintに組み込みます。

github.com

すでに入れてるeslint-plugin-flowtypeはユーザーにFlowの型定義を利用したプログラムを書くように促すもので、eslint-plugin-flowtype-errorsはFlowの型チェック機能を随時呼び出しては出たエラーや警告をEslintのエラーや警告としてくれるものです。Eslintとエディタの連携はAtomSublimeなど既に多くで提供されていて、もちろんWebStormでもあります。

// package.json
  "babel": {
    "presets": [["es2015", { "modules": false }], "react", "stage-1", "flow"],
    "plugins": ["transform-decorators-legacy", "react-hot-loader/babel"],
    "env": {
      "JEST": { "plugins": ["transform-es2015-modules-commonjs"] }
    }
  },
  "eslintConfig": {
    "parser": "babel-eslint",
    "plugins": ["flowtype", "flowtype-errors"],
    "extends": ["airbnb", "plugin:flowtype/recommended"],
    "env": {
      "browser": true,
      "jest": true
    },
    "rules": {
      "indent": ["warn", 4, { "SwitchCase": 1 }],
      "max-len": ["warn", 120],
      "react/jsx-indent": ["warn", 4],
      "react/jsx-indent-props": ["warn", 4],
      "flowtype/require-valid-file-annotation": "error",
      "flowtype/semi": "error",
      "flowtype-errors/show-errors": "error"
    }
  },

ドキュメントのとおりに何の疑問もなく動き、完了。WebStormでのFlowサーバー常駐を解きました。

しかし、どうなんだろう

Flowへ全部のソースコードを対応してみると…これってTypeScriptなんじゃね?という疑問が。。。今週はLabor Dayのお休みで連休なのだけど、普段は涼しいために家庭にクーラーが無い地域を襲った猛暑で外に行く気が起きない。喰わず嫌いをやめてTypeScriptの研究もしてみるとかしてみないとか。TypeScriptはApache License Version 2ですしね。とにかく型は正義。