GraphQLとは

はじめに

GraphQLとは、Meta社(旧Facebook)が開発・提供しているWeb APIのクエリ言語です。有名なクエリ言語としてRESTが挙げられますが、近年においてはその利便性からGraphQLのほうに注目が集まっています。
本ページでは、GraphQLの基本概要とRESTとの違い、導入事例やチュートリアルを徹底解説します。

GraphQLとは

「GraphQL」とは、クエリ言語とスキーマ言語から構成されるWeb APIの規格です。クエリ言語なので、サーバにデータを問い合わせることができます。
GraphQLは様々なOSに対応しており、クラスプラットフォーム開発が得意です。また、JavaやPython、Rubyなどの多くのプログラミング言語に対応しています。では、どうしてGraphQLを開発する必要があったのでしょうか?

開発の経緯

GraphQLがリリースされる前、MetaはRESTとFacebook Query Languageを運用し、データの取得や操作を行っていました。しかし、RESTは特定のデータだけを参照するのが困難です。
例えば、RESTの場合必要のないデータまで取得してしまうので大量のデータを処理する必要があります。これで処理が煩雑になるので速度が遅くなったり、メモリリーク(コンピュータで実行中のプログラムが確保したメモリ領域の解放を忘れたまま放置してしまうこと)を引き起こしたりする原因になります。
また、クエリ構造とレスポンス構造が大きくかけ離れており、Facebookを運用する上での課題となっていました。この問題を解決するためにGraphQLの開発がスタートしたのです。

GraphQLとRESTの違い

RESTはWeb APIの設計モデル及びアーキテクチャを指します。Web APIの仕様を考える上で必須となる概念でデータへ簡単にアクセスするための原則に基づいて設計されています。そして、この原則に従って設計されたAPIがRESTful APIです。
一方で、GraphQLはクエリ言語やスキーマ言語、スカラー方などが標準化された言語です。数多くの規則があるにも関わらず、エンドポイントが一つになるための処理の簡素化ができます。あるいは、シンプルな開発を実現できるので注目を集めています。
GraphQLとRESTの特徴を徹底比較した記事は以下のようになります。(ただしβ版では閲覧できません)

GraphQLのメリット・デメリット

メリット

GraphQLのメリットは以下の3つです。
  • 少ないリクエストで複数のリソースにアクセスできる
  • 最小限のデータのみ取得
  • 既存のクエリを残しつつAPIを更新できる
それぞれ順番に解説します。

少ないリクエストで複数のリソースにアクセスできる

GraphQLはHTTP構造に依存しないので、複数のページに必要なデータを取得できます。これにより、リクエストが無駄になることがないのでパフォーマンスの低下を招きづらく、またサーバ側に負担をかけません。そのため、ハードウェアにかかるコストを削減できるでしょう。

最小限のデータのみ取得

例えば、RESTの場合、一つのリクエストに対して数多くの情報を返すので、名前とメールアドレスの情報しか必要ない場合でも住所や電話番号、経歴、プロフィール紹介などすべての情報を取得してしまいます。不要なデータが多いので処理が大変になります。データはメモリに蓄積されるので、メモリがいっぱいになってしまいメモリリークを起こしかねません。
一方で、GraphQLでは取得するデータを指定してリクエストを送信できます。上記の例で言えば、名前やメールアドレスだけを指定してサーバに問い合わせることもできます。これによって、必要なデータのみを取得できるので、通信の無駄を防ぐことができ、パフォーマンスの向上に繋がります。

既存のクエリを残しつつAPIを更新できる

フィールドの削除を自分で行わない限り、クエリが破損する心配はありません。これにより、クライアントの振る舞いに影響を与えないので更新後も安定的なリクエストを維持できます。

デメリット

逆に、GraphQLにはデメリットも存在します。
  • 新しい情報なので情報量は少ない
  • RESTよりもキャッシュが複雑になりやすい
それぞれ順番に解説します。

新しい情報なので情報量は少ない

GraphQLは2015年に登場した比較的新しい規格なので情報量が少ないです。独学の場合、少ない情報の中で勉強しなければいけないのでマスターするまでに一定の時間を要します。

RESTよりもキャッシュが煩雑になりやすい

RESTの場合、URLベースでキャッシュを生成するので比較的簡単に扱えます。一方で、GraphQLのキャッシュはURLを生成せずにレスポンス内容も異なるので複雑です。そのため、CDNによるオフロードの実現が難しかったり、クライアントサイドへ悪影響を与えたりする可能性があります。

活用事例

GraphQLはMeta社を代表に、数多くの大企業が導入しています。GraphQLを活用した代表的なサービスを4個紹介しますので、是非参考にしてください。

Airbnb

Airbnbは世界各国にバケーションレンタルを行っている企業です。数多くのAPIをGraphQLに移行することでページ読み込み速度が高速になりました。

楽天

楽天は、インターネット関連サービスを手掛ける企業です、日本企業の中では、GraphQLの導入を終えている企業の一つです。(情報量は少なめですが)

おわりに

企業やサービスによってはRESTからGraphQLに移行しており、今後ますます注目されることが予想されます。そのため、この機会に学んでおくことでプログラマーとして技術のトレンドを先取りできます。
GraphQLを勉強できるチュートリアルもありますので、利用して勉強を始めてみてはどうでしょう?