GraphQLとは?RESTとの違いや導入事例を紹介

GraphQLとは?RESTとの違いや導入事例を紹介

『GraphQL』とは、Facebook社が開発・提供しているWeb APIのクエリ言語です。有名なクエリ言語としてRESTful APIが挙げられますが、近年においてはその利便性からGraphQLのほうに注目が集まっていることをご存知でしょうか。今回は、GraphQLの基本概要とRESTとの違い、導入事例やチュートリアルについて解説します。

GraphQLとは?

『GraphQL』とは、クエリ言語とスキーマ言語で構成されたWeb APIの規格です。クエリ言語という言葉から想像できるように、サーバーにデータを問い合わせることができます。GraphQLは、Facebook社によって2012年に開発がスタートし、2015年にオープンソース化されました。

GraphQLは様々なOSに対応しており、クロスプラットフォーム開発が可能です。また、JavaやJavaScript、Rubyなど多くのプログラミング言語に対応している点も特徴といえます。

そもそもなぜGraphQLを開発する必要があったのでしょうか。開発の経緯をご紹介します。

GraphQL開発の経緯

GraphQLが開発される前、Facebook社はRESTとFacebook Query Languageを運用し、データの取得や操作を行っていました。しかし、RESTは特定のデータシェイプだけを参照することが難しいのです。

例えば、RESTの場合、必要のないデータまで取得してしまうため、大量のデータを処理する必要があります。これにより、処理が複雑になるため、速度が遅くなったり、メモリリークを引き起こしたりする原因になるのです。また、クエリ構造とレスポンス構造が大きくかけ離れており、Facebookを運用する上で課題となっていました。

この問題を解決するために、FacebookのLee Byron氏、Nick Schrock氏、Dan Schafer氏によってGraphQLの開発がスタートしました。そして、2012年にはFacebookのiOSアプリケーションに実装され、2015年にはオープンソース化されました。これにより、様々なサービスで導入が開始され、現在では技術的な注目が集まっています。

大量のデータ

ちなみに、RESTに関する詳しい内容を知りたい方は、「【入門編】Django REST frameworkとは?チュートリアルで解説」をご覧ください。

 

\文字より動画で学びたいあなたへ/

Udemyで講座を探す >

GraphQLとRESTの違いを知っておこう

RESTは、Web APIの設計モデル及びアーキテクチャです。Web APIの仕様を考える上で必要となる概念でデータへ容易にアクセスするための原則に基づいて作られています。そして、この原則に基づいて設計されたAPIがRESTful APIです。

一方GraphQLは、クエリ言語やスキーマ言語、スカラー型などが標準化された言語になります。たくさんの決まりごとが作られているのにも関わらず、エンドポイントが1つになるため処理の簡素化が可能です。また、シンプルな開発を実現できるため、注目が集まっています。他にもGraphQLには、様々なメリットがあるので、詳しくチェックしていきましょう。

GraphQLのメリット・デメリットとは?

GraphQLのメリットは、下記の3つです。

  • 少ないリクエストで複数のリソースにアクセス可能
  • 最小限のデータのみを取得
  • 既存のクエリを残しつつAPIの更新が可能

◎最小限のリクエストで複数のリソースにアクセス

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

◎必要なデータのみを取得

例えば、RESTの場合、1つのリクエストに対して数多くの情報を返すため、名前とメールアドレスの情報しか必要ない場合でも住所や電話番号、経歴、プロフィール紹介などすべての情報を取得してしまうのです。不要なデータが多くなりすぎるので処理が大変になります。データはメモリーに蓄積されるので、メモリがいっぱいになってしまいメモリリークを引き起こす原因にもなりえます。

一方、GraphQLであれば、取得するデータを指定してリクエストすることができます。上記の例でいえば、名前やメールアドレスだけを指定してサーバーに問い合わせることが可能です。これにより、必要なデータのみを取得することができるため、通信の無駄を防ぐことができ、パフォーマンスの向上にも期待ができます。

◎既存のクエリを破壊せずにAPIの更新が可能

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

 

逆に、GraphQLにはデメリットも存在し、大きくわけて下記の2つです。

  • 新しい技術なので情報量が少ない
  • キャッシュが複雑になる

◎学習コストがかかる

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

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

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

 

GraphQLの導入・活用事例!活用したサービスとは?

GraphQLはFacebook社を筆頭に、数多くの大企業が導入しています。GraphQLを活用した代表的なサービスを4つご紹介しますので、ぜひ参考にしてください。

Airbnb

Airbnb画像

Airbnbは、世界各国にバケーションレンタルを行っている企業です。Airbnbでは、数多くのAPIをGraphQLに移行しています。これにより、ページ読み込み速度の高速化などを実現しています。ユーザーパフォーマンスが向上し、快適に使えるサービスに生まれ変わることができたのです。

楽天

楽天

楽天は、インターネット関連サービスを手掛ける企業です。楽天市場や楽天カードなどが有名で、日本を代表する大企業の1つです。GraphQLに移行した際の情報などは少ないですが、すでに導入を済ませている企業のひとつです。

Netflix

Netflix

Netflixは、ドラマや映画などを動画で配信しているサービスです。NetflixはもともとRESTを導入していました。しかし、いくつかの課題を解決するためにGraphQL APIを大規模実装しています。これにより、サービスの規模が大きくなるにつれて複雑化していたサービスを簡略化、容易なシステムの維持を実現することができました。同時に、フロントエンドエンジニアとバックエンドエンジニアの連携の強化が図られていました。

Twitter

Twitter

Twitterは国内でもSNSを代表するサービスの1つです。ツイートやトレンドなどさまざまなデータをやり取りする機会が多いTwitterでもGraphQLが利用されています。そのほかにも、Amazon Web Serviceなど多くのサービスで使われており、注目されていることが理解できるでしょう。

 

GraphQLを始める際におすすめのチュートリアルはある?

GraphQLの学習をはじめる際、チュートリアルを活用したい方もいるのではないでしょうか。最後に、代表的なチュートリアルを3つご紹介します。

rw;eruch

rw;eruch

rw;eruchはGithubのGraphQL APIのチュートリアルを提供してくれるサイトです。そのため、GitHubのアカウントを作る必要があります。また、GitHubにプロフィール情報を追加しなければなりません。チュートリアルの文章は英語になりますが、翻訳機能などを使用することで英語が苦手な方も読み進めることができます。

HOW TO GRAPHQL

HOW TO GRAPHQL

HOW TO GRAPHQLは動画形式で学べるチュートリアルです。視聴時間は全部で5分36秒となっています。RESTと比較しながらGraphQLの紹介を行ってくれる動画です。基礎チュートリアルなので、概要を知りたい人に適しています。

GitHub Docs

GitHub Docs

GitHub Docsでは、ブラウザ上でGraphQLを試すことができます。利用するためにはGitHubアカウントが必須です。記述しながら学ぶことができるので、手を動かしながら勉強したい人はアクセスしてみてはいかがでしょうか。

 

今回は、GraphQLの基礎知識とメリット・デメリット、チュートリアルなどについて解説しました。企業やサービスによってはRESTからGraphQLに移行しており、今後増々注目されることが予想されます。そのため、この機会に学んでおくことで、エンジニアとして技術の流行を先取りすることができるでしょう。GraphQLを学べるチュートリアルなどもあるので、利用して勉強を始めてみてはいかがでしょうか。