Flowを使ってアプリケーション開発するためのエディタ環境いろいろ
これはフロントエンドエンジニア Advent Calendar 2016の第7日目の記事です。
今年はほぼずっとTypeScript
でコードを書いていたので、気分を変えてFlow
でコードを書く時の環境について調べてみました。
私は普段Visual Studio Code
でコードを書いているのですが、特に助かっているこの辺りの機能を踏襲した環境を基準にしてみます。
エディタ内で型エラーを表示
何か間違いを起こしてしまったことを知るのは早ければ早いほど良いと思っているので、型エラーは常時エディタに表示されるようにしたいです。
(若干エディタの画面がうるさくなり過ぎる時もありますが...)
変数の型情報をツールチップとして表示
開発中に「あれ、この変数ってどんな型だっけな」と忘れることがよくあります。できるだけ簡単な操作で任意の変数の型を確認できると、ストレス無く開発できます。
型定義へのジャンプ
主に外部ライブラリの型情報をパッと確認するのに使っています。
有名どころのライブラリであれば、詳しいコメントが付いていることも多いので、簡易ドキュメントへのショートカット的に使えるのが助かります。
バージョンを指定できる
特定のバージョンのFlow
と紐付いてしまっていると、バージョンアップに追従していくのが大変です。
Atom
のTypeScript
プラグインで任意のバージョンのTypeScriptを用いることができなかったことで不便だったので。
自分で設定できなくても、プロジェクトのローカルnode_modules
にインストールされたバージョンを利用できるようになっていれば事足ります。
変数名の追跡変更などリファクタリング支援
必須というわけでもないのですが、コードを全文検索しての置換よりエディタ備え付けの変数名変更の方が安心なので、出来れば付いていて欲しい機能です。
私は普段Visual Studio Code
でTypeScript
を、Scala
の勉強をするのにIntellij IDEA
を、その他の言語やブログを書く時はAtom
をそれぞれ使い分けてる感じなので、この3つのエディタ(とIDE)でどういう感じの環境になるのかを調べてみます。
サンプルコードにはFlow公式のExampleを使いました。
(それ以外ではvimやemacs向けのプラグインもあるようですが、普段使い慣れていないものなので割愛しました...)
Atom
Flow
で拡張機能を検索すると、linterやIDE Haskellに影響を受けた簡易IDEが見つかりますが、どちらもあまりメンテナンスされていないようです。
おそらくFacebookが公開しているReact
系アプリケーションの開発を支援するNuclideという簡易IDE的な拡張機能があるからでしょう。
Flow
と同様にFacebook
によって開発が牽引・公開されている辺りを考えると、TypeScript
におけるVisual Studio Code
相当と捉えても良いかも知れません。
ここではNuclide
を試してみます。
まずは導入方法に基いて拡張機能をインストールします。
次に拡張機能の設定画面で、Nuclide-Flow
の項にあるUse the Flow binary included in each project's flow-bin
を有効にします。
これでプロジェクト毎にインストールされた、ローカルのnpm executable
を利用できます。
早速サンプルコードを読み込んでみます。
こんな感じでエラーが出ました。
マウスホバーした時に、変数の型情報がツールチップとして表示されるのも良いですね。
ただ、Atom
のサイドツリーに独自の開発支援機能が入ってしまうので、別物のエディタみたいな使用感になってしまいそうなの気になりました(テーマごと変わっちゃう?)
Visual Studio Code
Flow
公式のflow-for-vscodeという拡張機能が公開されています。
拡張機能の検索タブでFlow
で検索(flow
だと出てこないので注意)してインストールします。
次にsetting.json
にnpm executable
へのパスをこんな感じで書きます。
コードを読み込むと、こんな感じでエラーが出ます。
こちらはエラー箇所(赤波線)にマウスホバーすると、型エラーの情報と一緒に推論された型情報も表示してくれるようです。
Intellij IDEA
※ 基本的にWebStorm
でも同じはず...
もともと2016.2ではIntellij IDEA
では、Flow
の基本的な文法解釈とシンタックスハイライトぐらいしかサポートされていなかったようですが、現行バージョンの2016.3で大幅にサポート内容が追加されたようです。
紹介動画
IDEにサポートが組み込まれているので、プラグインのインストールなどは不要です。
導入方法ページに従ってJavaScript
環境の設定を開き、Languages&Frameworks
でFlow
を選択して、Flow executable
にローカルのnpm executable
を設定します。
こんな感じでエラーが出ました。
こちらはマウスホバーした変数の型情報をツールチップとして表示してはくれないようです。
※実はTypeScript
にも同種の機能が備わっていません。ひょっとしてあまり必要とされていない機能なのか。。。
(内部的に情報は持っているらしく、リファクタリングの時に型情報を出してくれるので、単に表示方法を知らないだけかもしれません。。。)
対応表
まとめるとこんな感じになりました。
-- | Atom | VSC | IDEA |
---|---|---|---|
エディタ内で型エラーを表示 | ◯ | ◯ | ◯ |
エディタ内で型推論の結果を覗ける | ◯ | ◯ | △ |
型定義へのジャンプ | ◯ | ◯ | ◯ |
バージョンを指定できる | ◯ | ◯ | ◯ |
変数名の追跡変更などリファクタリング支援 | × | × | ◯ |
Atom
とVisual Studio Code
は変数の型情報をツールチップとして表示できて、Intellij IDEA
は変数名変更などのリファクタリング支援がある(これはどうもFlow
の機能を用いてというよりIntellij IDEA
が元々独自に備えていたリファクタリング機能の一環という気がします)という感じのようです。
まとめ
Flow
を用いたプロジェクトで、楽をしてコードを書くためにどんな選択肢があるのか簡単に調べてみました。
個人的には最近使っているVisual Studio Code
に必要な機能が大体含まれていたので、TypeScript
/Flow
のいずれもVisual Studio Code
で書いていこうかなと思っています。
以上、参考になればうれしいです。