GraphQL

GraphQLとは何か?基礎を分かりやすく解説する【初心者向け】

GraphQLの基礎を分かりやすく解説する【初心者向け】
GraphQLって何?よく分からない。。
仕事で使うことになったからGraphQLの基礎をサクッと学びたいなあ。。

今回はこういった疑問や要望にお応えして、GraphQLの基礎を解説していきます。

前提知識が無い人に向けて、なるべく分かりやすく説明するので、参考になれば幸いです。

では、始めていきます!

GraphQLの概要

GraphQL

 

GraphQLは、クライアントからサーバーに対するリクエストを行うAPIのデータ転送プロトコルの一種です。

要は、APIの新しい規格ということです。

 

APIの新しい規格ということで、よくREST(REST API)と比較されることが多いです。

 

GraphQLのメリットについては、後ほど詳しく解説しますが、クライアント側から必要なデータを指定することで、データを過不足なく取得できるのは大きな特徴の一つです。

 

GraphQLの概要をより詳しく知りたい方は、以下の記事が参考になるでしょう。

HASURA:GraphQLとは何でしょうか。

 

こちらの記事は私自身もGraphQLについて初めて学ぶときに参考にしたものです。図が豊富でイメージが湧きやすいのでおすすめです!

 

GraphQLの歴史

GraphQLを含めたAPIの歴史については、以下の記事に詳しくまとめてあります。

REST APIとGraphQLの歴史を分かりやすくまとめてみる
REST APIとGraphQLの歴史を分かりやすくまとめてみるREST APIとGraphQLの歴史を分かりやすくまとめてみました。...

 

基本的には上記の記事に書いてありますが、大まかな流れとしては以下の通りです。

  1. RPC(Remote Procedure Call)
  2. SOAP(ソープ)
  3. REST
  4. GraphQL

 

それぞれの技術は、以前の技術の課題を解決するために生まれています。

GraphQLも例外ではなく、RESTの課題を解決するために、Facebook(Meta)によって開発されました。

 

REST APIの課題について

では、GraphQLを開発する動機となったREST APIの課題にはどういったものがあるのでしょうか?

 

REST APIが抱えていた課題については、こちらにも詳しくまとめてありますが、基本的には以下の3つです。

  1. オーバーフェッチング(過剰な取得)
  2. アンダーフェッチング(過小な取得)
  3. エンドポイントの管理負荷が高い

 

リソースをフェッチするために必要なリクエスト数が多くなるなど、様々な面で「無駄」が多いのがREST APIの課題でした。

 

そして、これらの課題を解消するために開発されたのがGraphQLです。

以下では、GraphQLのメリット・デメリットをまとめていきます。

 

GraphQLのメリット・デメリットについて

GraphQLのメリット・デメリットについてそれぞれ説明していきます。

 

GraphQLのメリット

GraphQLのメリットの詳細については、こちらの記事にまとめてありますが、簡単な概要は以下の通りです。

メリット
  • 必要なデータだけを取得できる
  • 関連する情報も一つのクエリで取得可能
  • 直感的に記述できるので分かりやすい
  • エンドポイントの管理が不要

 

GraphQLでは、クライアント(フロントエンド)側で取得したい情報を記述したクエリをPOSTすることでデータの取得を行います。

そのため、必要なデータを必要な分だけ取得することができます。

 

また、GraphQLは、REST APIのように複数あるエンドポイントのいずれかを選択してリクエストを投げるわけではなく、単一のエンドポイントに対してリクエストを送信する方式を取っているため、エンドポイントの管理が不要な点もメリットの一つと言えるでしょう。

 

その他にも、GraphQLサーバからスキーマダウンロードと型生成を行うことで、フロントエンドで型安全な開発ができる点や、フロントだけで取得するデータの構造変更等ができるため、小さな仕様変更に強い点もメリットと言えます。

 

様々な面で「柔軟性」が高いのがGraphQLのメリットです。

 

GraphQLのデメリット

一方で、こちらにまとめている通り、GraphQLにはデメリットも存在しています。

デメリット
  • 学習コストの高さ
  • セキュリティ面やN+1など、気を付けないといけない点が多い

 

これはGraphQLに限った話ではありませんが、使えるようになるまで、やはりある程度の学習は必要です。その点はデメリットの一つと言えるでしょう。

 

また、GraphQLは、セキュリティやパフォーマンスの観点で注意しないといけない点も多いです。

素人が何も考えずに手を出してしまうと、痛い目を見る場合もあるでしょう。

 

そのため、実装に組み込む前に、経験者の話を聞いたり、ネット上で情報収拾するのはとても大切です。

 

GraphQLの気をつけないといけない点については、以下のメルカリの記事が参考になるでしょう。

GraphQLを導入する時に考えておいたほうが良いこと

 

また、GraphQLを使った開発をする際の指針としては、以下の記事が参考になります。(こちらもメルカリの記事です)

GraphQL Client Architecture Recommendation 社外版

 

このような有料級の情報を無料で公開してくれるのは、本当にありがたいですね。。

 

GraphQLの動作概念や用語

GraphQLを使って開発を行う際に知っておきたい基本的な概念や用語をご紹介します。

GraphQLの基礎概念は以下の通りです。

GraphQLの基礎動作概念

 

GraphQLサーバーを構成する要素として、スキーマリゾルバーがあります。

 

スキーマには、GraphQLサーバーがどのようなデータ構造やデータの口(クエリ等)を持つかを定義します。

要は、フロントエンドから取得できるデータの種類やデータの取得・更新方法の定義を行うということです。

 

リゾルバーでは、クライアントから受け取った GraphQLリクエストを元に、必要なデータリソースの取得を行います。

 

この「スキーマ」および「リゾルバ」という言葉は、GraphQLを使って開発をしていると必ず出てくるので、覚えておくようにしましょう。

 

また、クライアントからGraphQLサーバーに対して送信できるリクエストの種類として、主に以下の二つがあります。

  • Query
  • Mutation

 

Queryはデータの取得を行います。RESTで言うと、GETに相当します。

 

Mutationはデータの書き込みや更新系の処理を担当します。RESTで言うと、POST,PUT,DELETEに対応します。

 

簡単ではありますが、GraphQLの開発をする際に必要な概念を紹介しました。

GraphQLサーバーを構築する上では必ず知っておく必要がある概念なので、頭の片隅に置いておくようにしましょう。

 

GraphQLを実際に触ってみよう!

次に、実際にGraphQLを触ってみましょう。

GraphQLに限らず、どんな技術でもそうですが、やはり実際に触って試すことで、イメージが深まります。

 

GraphQLを使った開発の流れ

GraphQLを使った開発の流れについて、いくつか参考になる記事をご紹介します。

まず、バックエンドのGraphQLサーバーの構築方法については、以下の記事が参考になるでしょう。

NestJSでGraphQLサーバーを構築する手順
NestJSでGraphQLサーバーを構築する手順NestJSでGraphQLサーバーを構築する手順を解説します。...

 

GraphQLを利用するフロントエンド環境の構築は、以下の記事を参考にしてください。

Next.jsからGraphQLサーバーを叩くまでの手順
Next.jsからGraphQLサーバーを叩くまでの手順Next.jsからGraphQLサーバーを叩くまでの手順を解説します。...

 

さらに、両者を合わせたGraphQL開発の全体の流れについては、以下の記事が参考になるでしょう。

GraphQLとTypeScriptを使った開発の流れ
GraphQLとTypeScriptを使った開発の流れGraphQLとTypeScriptを使った開発の流れを解説します。...

 

GraphQLの基礎を宇宙一分かりやすく解説する:おわりに

今回は、GraphQLについて、概要から実際の開発方法まで網羅的に解説してみました。

GraphQLに対するイメージを深める上で、少しでも参考になっていれば幸いです。

 

最後まで読んでいただきありがとうございました。

こちらのツイッターアカウントでは、GraphQLを含めて、プログラミングやテクノロジーの情報を分かりやすく紹介しています。

ぜひフォローしていただけると嬉しいです!

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA