Facebookが”Relay"データフレームワークをリリース

Facebookは,同社の宣言型データフレームワークであるRelayのテクニカルプレビューの終了とオープンソース化を発表した。

Relayは,通常のデータライブラリとは違う方法で,データ要求を処理する。データの取り出しステップをひとつひとつ定義するのではなく,開発者が必要とするデータを宣言すればよいのだ。取得する“方法”はフレームワークが処理する。Relayのローンチを発表した記事の中でTimothy Yung氏は,FacebookがRelayの開発を必要とした理由として,従来のソリューションが脆弱過ぎたことをあげている。

RelayはReactアプリケーションに対して,データを取得する方法を命令的に記述する代わりに,宣言的に要求データを指定する手段を提供します。また,Reactで宣言的なコンポーネントによる効率的なバッチビュー操作が可能なように,Relayでは,宣言的なデータ要求によって効率的なネットワーク操作が可能になります。

Relayの中心となるのは,データ要求の概念を覆すGraphQLである。RESTエンドポイントをコールしてサーバからの応答を処理する方法に代えて,GraphQLでは,クライアントが必要なデータを記述して,サーバがそれに応答する形を取る。GraphQLの要求は次のようなものだ。


{
  album(id: 12) {
    id,
    title,
    artist {
        id,
        name
    },
    releaseDate,
    upc
  }
}

サーバからの応答は標準的なJSONである。

{
    "album": {
        "id": 12,
        "title": "Random Access Memories",
        "artist": {
            "id": 1,
            "name": "Daft Punk"
        },
        "releaseDate": "2013-05-17",
        "upc": "888837168618"
    }

}

GraphQLのメリットのひとつは,1回の要求に対して,サーバがオブジェクト階層全体を提供できることだ。GraphQLに関する記事の中で,Facebookの開発者であるLee Byron氏は,これが“複数のラウンドトリップ(モバイルネットワークではリソースを消費する)を必要とするRESTfulサービスや,SQLの複雑なjoin文”とは異なる点だ,と述べている。

Relayは,データクエリをビューとして同じスポットに配置する,コロケーションをサポートしている。Yung氏はコロケーションについて,“アンダーフェッチ(データはコードのレンダリングに使用されるが宣言されていない)とオーバーフェッチ(データは宣言されているがコードのレンダリングに使用されていない)の両方を容易に検出できるようになる”と説明している。

Albert Still氏は,自身のRelay経験について記事を書いた。その中で氏はRelayについて,パワフルではあるものの,“学ばなければならないことがたくさんある上に,Reactの短くて適切な例題コードに比べると,それよりも長いものが目に付く”,と述べている。氏は,まずRelayに慣れるまで,数日間使ってみるように推奨する。その結果は“魔法”のようなものになるだろう。

Facebookでは,開発者がこのプロジェクトについてより詳しく学べるように,RelayのWebサイトを用意している。