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サイトを用意している。