先に要点
GraphQLって最近よく聞くけど、結局 REST API と何が違うの? と感じる人は多いと思います。
名前だけ見ると難しそうですが、最初に押さえるべきなのは データの取り方の考え方が違う という点です。
この記事では、GraphQL と REST API の違いを、初心者向けにできるだけ噛み砕いて整理します。
2026年4月時点で、GraphQL 公式ドキュメントと Roy Fielding 氏の REST の一次情報を確認してまとめています。
GraphQLとは?
GraphQL は、クライアントが必要なデータを指定して取りやすくする API の仕組みです。
GraphQL 公式では、API のための query language と説明されています。
初心者向けにかなりざっくり言うと、GraphQL は 1つの窓口に対して、必要な項目をこちらから伝えやすい方式 です。
たとえば、ユーザー一覧画面で 名前 と メールアドレス だけ欲しいなら、その項目だけを取りやすいです。
同じユーザー詳細画面でも、今度は 部署 や 権限 まで欲しいなら、別の形で取得できます。
query {
user(id: "123") {
name
email
department
}
}
このように、ほしい項目をリクエストに書く のが GraphQL の分かりやすい特徴です。
REST APIとは?
REST API は、URL で資源を表し、HTTP の仕組みを活かしてやり取りする 考え方で作る API です。
初心者向けには、URLごとに役割を分けて、GET / POST / PUT / DELETE などで操作する方式 と考えるとつかみやすいです。
たとえば、次のような形です。
GET /users/123
GET /users/123/orders
POST /orders
REST API は、ユーザー情報はこの URL、注文情報はこの URL のように、エンドポイント を分けて整理するのが基本です。
HTTP の素直な使い方と相性がよく、ログや監視、キャッシュ、権限制御の考え方も比較的つかみやすいです。
いちばん大きな違いはどこか
いちばん大きいのは、データをどう取るか の考え方です。
| 観点 | GraphQL | REST API |
|---|---|---|
| 窓口 | 1本に寄りやすい | 複数 URL に分かれやすい |
| 取得項目 | 欲しい項目を細かく指定しやすい | サーバー側が返す形を決める |
| 画面ごとの最適化 | しやすい | 場合によっては複数回取得が必要 |
| HTTP キャッシュ | 一工夫必要なことがある | 比較的素直に扱いやすい |
| 学習しやすさ | 最初は少し独特 | HTTP の延長で理解しやすい |
| 向いている場面 | 複雑な画面、複数クライアント | 公開 API、単純な CRUD、運用重視 |
要するに、GraphQL は 取りたい形に寄せやすい、REST API は 構成が分かりやすい と考えると大きく外しにくいです。
GraphQLが便利だと言われる理由
GraphQL が便利だと感じやすいのは、次のような場面です。
1. 画面ごとに欲しい項目が違う
同じ ユーザー でも、一覧画面では 名前 と 状態 だけ、詳細画面では 所属 や 注文履歴 まで欲しいことがあります。
REST API だと、画面ごとに API を分けるか、少し多めのデータを返すか、複数回取りに行くかを考えることがあります。
GraphQL なら、クライアントが必要な項目を選びやすいので、このズレを小さくしやすいです。
2. フロントエンドとバックエンドの境界を整理しやすい
Web、モバイル、管理画面のようにクライアントが複数あると、同じデータでも欲しい形が少しずつ違います。
こういうときは、GraphQL の方が データの窓口をまとめつつ、返し方は柔軟にする という設計にしやすいです。
3. オーバーフェッチ、アンダーフェッチを減らしやすい
使わない項目まで返ってくる のが オーバーフェッチ、欲しい情報をそろえるのに複数回叩く必要がある のが アンダーフェッチ です。
GraphQL はこの2つを減らしやすい、という文脈でよく紹介されます。
ただし、GraphQLなら何でもよいわけではない
ここはかなり大事です。
GraphQL は便利ですが、実務では 柔軟すぎること が逆に運用の難しさになることがあります。
1. どんな問い合わせが飛ぶか見えにくくなる
REST API は URL ごとに役割が分かれるので、どこが重いのか を見つけやすいことが多いです。
GraphQL は窓口が集まりやすいぶん、1本の API でも問い合わせ内容が毎回違うことがあります。
そのため、どの query が重いのか、どの項目の取得が遅いのか を見えるようにしておかないと、運用で詰まりやすいです。
2. 取得しすぎを防ぐ設計が必要
GraphQL は便利ですが、深い関連を何段もたどれるようにすると、思った以上に重い問い合わせが来ることがあります。
GraphQL 公式の best practices でも、複雑すぎる query を制限する考え方が紹介されています。
3. HTTP の素直なキャッシュをそのまま使いにくいことがある
REST API は URL ごとに意味が分かれやすい ので、HTTP キャッシュや CDN の考え方と合わせやすいです。
GraphQL は POST 中心で使われることも多く、キャッシュ戦略を別で設計した方がよい場面があります。
REST APIの方が向いている場面
GraphQL が話題でも、REST API の方が向いている場面はかなり多いです。
1. シンプルな CRUD が中心
記事、ユーザー、商品、問い合わせのように、一覧を見る / 1件見る / 作る / 更新する / 削除する が中心なら、REST API の方が素直です。
URL の意味も分かりやすく、チームに共有しやすいです。
2. 外部公開 API
外部の開発者向けに公開する API は、分かりやすさ と ドキュメントの読みやすさ がかなり大事です。
REST API は HTTP の基本知識とつながりやすいので、利用者の学習コストを下げやすいです。
3. 監視・ログ・運用をまずシンプルにしたい
小規模なチームや、まず安定運用を優先したい案件では、REST API の方が追いやすいことがあります。
どの URL が遅いか、どのエンドポイントでエラーが多いか を見やすいのは、実務ではかなり大きいです。
GraphQLが向いている場面
逆に、GraphQL の良さがかなり出やすいのは次のようなケースです。
1. 画面の要求が細かく変わる Web アプリ
管理画面、会員向け画面、分析画面のように、表示するデータの組み合わせが細かく変わるときです。
必要な項目だけ取りたい要求が多いなら、GraphQL はかなり相性がよいです。
2. Web とモバイルで同じデータ基盤を使いたい
同じデータを使うけれど、欲しい項目や画面の粒度が違うときは、GraphQL の柔軟さが活きます。
3. BFF 的な役割を1か所にまとめたい
フロントエンドのためのデータ整形を、複数のバックエンドから寄せて1つにまとめたい場面です。
この用途では GraphQL が選ばれることがよくあります。
初心者が最初につまずきやすいポイント
GraphQLは「DBを直接読む仕組み」ではない
ここは誤解されやすいです。
GraphQL はデータベースそのものではなく、API の作り方・問い合わせ方の考え方 です。
REST APIは「古いからダメ」ではない
REST API は今でもかなり広く使われています。
むしろ、分かりやすさや運用しやすさが理由で REST API を選ぶケースは普通にあります。
選ぶ基準は「流行」より「運用のしやすさ」
GraphQL が便利でも、チームが慣れていなければ監視やトラブル対応で負担が増えることがあります。
実務では、誰が保守するか まで含めて選ぶ方がうまくいきます。
実務ならどう使い分けるか
かなりざっくり分けるなら、こう考えると判断しやすいです。
REST API が向きやすい
単純な CRUD、外部公開 API、小規模チーム、監視やキャッシュをまず素直に運用したい案件。
GraphQL が向きやすい
画面ごとの要求差が大きい Web アプリ、モバイル併用、複数データソースをまとめたい案件。
もし Webhook と API の違い もまだ整理できていないなら、Webhookとは?APIとの違いと実務でよくある使い方をわかりやすく解説 もあわせて読むとつながりやすいです。
まとめ
GraphQL は、クライアントごとにほしいデータの形が違う場面で強いです。
一方で、REST API は、URL と HTTP の考え方に沿って整理しやすく、運用面も含めて今でもかなり実用的です。
大事なのは、どちらが優れているか ではなく、その案件でどちらが扱いやすいか です。
最初は、単純で分かりやすいなら REST API、画面ごとの差が大きく柔軟さが欲しいなら GraphQL くらいの整理で十分です。
Next.js などのフロントエンド寄りの構成と合わせて考えたいなら、Next.jsは他のフレームワークと何が違う?React単体・Nuxt・バックエンド系との比較で整理 も続けて読むと流れが見えやすくなります。
参考リンク
- GraphQL 公式 Learn: https://graphql.org/learn/
- GraphQL 公式 Best Practices: https://graphql.org/learn/best-practices/
- Roy Fielding dissertation REST chapter: https://ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm