BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース FacebookがJavaScriptの型チェックを提供するFlowをオープンソース化

FacebookがJavaScriptの型チェックを提供するFlowをオープンソース化

原文(投稿日:2014/11/19)へのリンク

@Scale 2014で、FacebookはFlowをオープンソースにした。これは、JavaScriptの静的型チェッカーだ。FlowはMicrosoftのTypeScriptやGoogleのAtScriptとともに開発者にコードの中のバグを見つける方法を提供する。

Flowは開発者を静的型に縛り付けようとはしない。可能な部分は型推論を使ってチェックし、JavaScriptファイルの問題あるなしを検証する。TypeScript風の型を提供することで厳密な型チェックをすることもできる。

Flowを設計したとき、FacebookはほとんどのJavaScriptのコードが“暗黙的に静的型”だと考えられていることを出発点とした。considering that “コードのどこにも型は出てこないかもしれないが、コードの正確さを念頭に置く方法として開発者の頭の中にある”。とブログで説明している。Facebookの型チェックのアプローチはTypeScriptと大きく異なると考えている。TypeScriptは“JavaScriptのコードのほとんどが動的であることを弱く仮定しており、どのコードが静的型なのかは開発者に依存すると考えている”。Flowの場合は、例えば、次のコードは明示的な型アノテーションなしでもエラーと判定する。

function onlyWorksOnNumbers(x) {
  return x * 10;
}
onlyWorksOnNumbers(‘Hello, world!’);

この方法ならば、巨大なコードベースでアノテーションを付ける必要がある場合、多数のキーストロークを節約できる。

Flowの機能は以下の通り。

  • プリミティブ型: numberstringboolean、これらの型の間の暗黙の型変換を禁止する。
  • ファンクション、オブジェクト、配列に関連する厳密な型
  • 多態型
  • ECMAScript 6の多数の機能をサポート。ディストラクティング、クラス、拡張オブジェクト、オプション引数、Map、Set、Promise
  • JSXとReactのサポート

Flowはnull undefined を処理して、実行時にクラッシュしないようにする。例えば、次のコードはエラーになる。

function length(x) {
  return x.length;
}
var total = length('Hello') + length(null);

while this one does not:

function length(x) {
  if (x !== null) {
    return x.length;
  } else {
    return 0;
  }
}
var total = length('Hello') + length(null);

Flowは、Node.jsのモジュールにも対応しており、サーバ上で動作することでスケールし、複数のサーバ上のモジュールに対してチェックを提供する。他のモジュールからアクセスするために型のアノテーションが必要かもしれない。

FlowはMicrosoftのTypeScriptやGoogleのAtScriptと同様、ウェブ開発社のためのJavaScript型チェックツールだ。FlowとAtScriptは両方ともTypeScriptに似た型構文を使っているが、TypeScriptにはない機能も提供している。

TypeScriptは現在、ES6のサブセットであるが、ロードマップに示されているように、バージョン2.0になれば、ES6のほとんどの機能をサポートするだろう。TypeScriptではアノテーション、ジェネリクス、インターフェースを通じてオプション型もサポートされている。

AtScriptはES6をターゲットにし、型やフィールド、メタデータアノテーションを提供する。さらに、実行時にアノテーション経由で型の検証をするためのリフレクションAPIもある。ES5との後方互換性もあり、ES5向け、または、Dart向けにもコンパイルできる。

FacebookのAvik Chaudhuri氏によれば、TypeScriptを使わずにFlowを開発したのは、巨大なコードベースに対応し、Reactをうまく制御するためだ。アノテーションなしのコードの多くの型を推論できるようにし、null undefinedを扱える。さらにこの3つを詳しく比較した記事としては、Axel Rauschmayer氏の“Statically typed JavaScript via Microsoft TypeScript, Facebook Flow and Google AtScript”があるので、読んでみるといいだろう。

JavaScriptの型チェックソリューションが複数あることに戸惑う人もいるだろう。MicrosoftのJonathan Turner氏によれば、Microsoft、Facebook、Googleはこの点について協力しているということだ。

TypeScriptチームはFlowとAtScriptチームと協力して、JavaScriptの型についてのコミュニティが既に作成したリソースがそれぞれのツールで活用できるようにしようとしています。それぞれのプロジェクトはお互いから学んでいます。そして、先に進むために、私たちは協力してベストなツールを開発していきます。長期的には、各ツールの最良の機能をECMAScriptに持ち込むために活動するつもりです。

FlowはLinux向けとMac OS X向けのバイナリがあり、ソースコードはGitHubにある。

この記事に星をつける

おすすめ度
スタイル

BT