先週ローカルワークした際に、Flowのメリットを社内LTした。もともといくつかのプロジェクトでいれてはいたのだが、今後新規で開発に参加してくるだろう人や、興味のある人に向けてのものだった。その内容を簡単に書いてみる。
なぜ型があったほうがよいか?
- 型エラーの表示
- =>コンパイルを通す前にビルドが失敗することがわかるようになるので、無駄な確認時間を省略できる
- 型情報をツールチップとして表示
- =>関数がどんなオブジェクトを返すかコードを追う時間を省略できる(リファクタも楽になる)
- モジュール/型定義へのジャンプ
- メソッドのサジェスト
- =>ファイルを切り替えてコードを追う時間を省略できる
- 依存関係のあるPromise連鎖などでコードを追う時間を省略できる
- ストリームなど抽象的なオブジェクトを扱う処理でコードを追う時間を省略できる
- =>開発効率の向上
これは言語によっては賛否あるかと思うが、JSにおいては効率を上げると考えている。
TypeScriptの特徴
- 基本的に全てに型がつく(パラメーター、関数が返す値、変数…)
- サードパーティの型サポートが充実
- 型付けに関してサポートされる機能が多い
- JavaScript自体を拡張し、TypeScript独自の便利な構文を使えるようになる
- 場合によってはビルドの仕組みに手を加える必要がある
- Angularが全面採用している
- (個人的にはMicrosoft製である)VSCode推奨
Flowの特徴
- 必須なのはパラメーターくらいで、ゆるい型付けを許容
- 後付で部分的に適用できる
- それ自身ランタイムに全く影響はないのでデタッチするのも簡単
- Facebook製(Reactなどと相性がよくコミュニティとしてのサポートも手厚い)
- 基本的にNuclide(with Atom)推奨
Flow/TypeScriptどっちがいいのか?
これは、ライブラリの選定などにおいても同じだが、個人的には「場合による」と考えている。
観点としては、人、納期、プロジェクト規模、やりたいこと、などで、例えば、大規模になった時に助けられると感じるのはTypeScriptかなと思う。しかし、既存の大量のソースに型を追加するなら、Flowで順次いれていったほうが無難である。また、ReactやAngularなど、それぞれ相性のよいライブラリもあるので、その辺を、現状いる人のスキルセットや納期と照らし合わせるというのが必要かなと思う。
以上、簡単にではあったが、Flowによるメリットの社内LTの紹介をした。
参考
AUTHOR
デロイト トーマツ ウェブサービス株式会社はアマゾン ウェブ サービス(AWS)に
専門性や実績を認定された公式パートナーです。