BT

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

| 作者: Abel Avram フォローする 9 人のフォロワー , 翻訳者 徳武 聡 フォローする 0 人のフォロワー 投稿日 2014年12月21日. 推定読書時間: 4 分 |

原文(投稿日: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にある。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT