San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
San Antonio API Security Summit 2025 に参加しよう!
閉じる
プライバシー設定
ウェブサイト運営に必要なCookieや類似技術を使用しています。追加のCookieは貴社の同意がある場合のみ利用されます。同意は「Agree」をクリックすることでいただけます。どのデータが収集され、どのようにパートナーと共有されているかの詳細は、Cookieポリシープライバシーポリシーをご確認ください。
Cookieは、貴社デバイスの特性や、IPアドレス、閲覧履歴、位置情報、固有識別子などの特定の個人情報を取得、解析、保存するために使用されます。これらのデータは様々な目的で利用されます。分析Cookieによりパフォーマンスを評価し、オンライン体験やキャンペーンの効果向上に役立てます。パーソナライズCookieは、利用状況に応じた情報やサポートを通じ、貴社専用の体験を提供します。広告Cookieは、第三者が貴社のデータをもとにオーディエンスリストを作成し、ソーシャルメディアやネット上でのターゲット広告に使用します。貴社は各ページ下部のリンクから、いつでも同意の許可、拒否、または撤回が可能です。
ご送信ありがとうございます。内容を受け付けました。
申し訳ありません。フォーム送信時にエラーが発生しました。
/
/
API Security

GraphQLプロトコル

本記事では、API開発におけるGraphQLクエリ言語について見ていき、主なメリット・デメリットや関連するセキュリティ課題を解説します。

アプリ開発に携わる方であれば、GraphQLは既にご存知でしょう。この言語は、開発者やセキュリティ担当者に新たな機能をもたらし、従来のデータ取得方法やクエリ効率を向上させ、クライアントとサーバ間の通信を効率化、アプリ開発を加速します。

一方で、セキュリティの脆弱性を軽減しバックエンドの安全性を強化する反面、GraphQLの一部の使い勝手の良さが、設定次第では悪用される恐れもあります。

GraphQLプロトコル

しかし、これらはすべてGraphQLが正しく扱われた時にのみ発生します。

GraphQLの基本と主要なメリット・デメリットを解説するために、本記事を用意しました。

GraphQLとは

一般に、GraphQLはクエリ言語およびサーバー側の実行環境技術であり、クライアントが必要なデータだけを得られるようにするために用いられています。余計なデータがなく、必要なものだけが取得されます。名前の「QL」はクエリ言語の略です。

Facebookが2012年にFBアプリを開発する際に作られたGraphQLは、今日では多くの目的と機能を持っています。具体的には、以下のような役割を果たします。

  • 強力なデータ取得API
  • 学びやすく扱いやすいAPIインターフェース
  • APIを高速かつ柔軟にするオープンソースのクエリ言語
  • APIのセキュリティ管理を簡略化する効果的な方法
  • エキスパートが望む方法でAPIを開発する手段
  • 統合開発環境と容易に連携できるクエリ言語
  • クライアントやエンドユーザの要望に応じたAPI開発の支援
  • RESTに代わる理想的な選択肢

総じて、GraphQLはAPI開発を支援し、セキュリティ上の問題をできるだけ少なくするための自由を提供します。

What is GraphQL

どのように動作するか?

GraphQLの基本が理解できたら、次はその動作方法について学ぶ段階です。以下は、この強力なクエリ言語を活用するためのステップです。

GraphQLスキーマの設計

サーバー側で作成されるこのスキーマの基礎は、アプリのUIを構築するデータです。たとえば、求人掲示板を作成する場合、Job、Company、Locationの各タイプを設計することが最初の目標となります。

リゾルバを既存のデータソースに接続する

スキーマが整ったら、各タイプごとにリゾルブ関数を作成し、データをグラフに接続します。先述の求人掲示板の例では、ジョブデータは外部APIから、所在地データはGoogle Maps APIから取得できます。

必要なものだけを取得するクエリを作成する

最後に、クエリを作成します。必要な詳細を指定でき、余計なデータは取得されません。この段階では、Apollo ClientなどのGraphQLクライアントライブラリの利用が推奨されます。

GraphQLの主な特徴

GraphQLを活用する際、以下の主要な特徴が大いに役立ちます。

開発者体験

GraphQLのデータは宣言的でわかりやすく、APIの開発やAPIセキュリティの確保が手軽になります。強い型付けにより、バグが起こりにくい安定したAPIが実現され、最初から堅実なセキュリティ対策が施されます。

パフォーマンス

GraphQLは、REST利用時によく見られる過剰取得や不足取得といった問題を解消します。必要なデータだけが正確に取得されるため、無駄がありません。

アーキテクチャ

GraphQLを用いることで、開発者自身がスキーマに基づいてAPIを設計でき、プロセスが簡便化されます。また、中央集権的なデータアクセスにより、APIの構成が一元化されます。

コミュニティ

GraphQLは充実したコミュニティ支援があり、Apollo Client、Apollo Studio、Apollo Serversなどのツールが利用可能です。さまざまなコミュニティ開発ツールが開発者をサポートします。

GraphQLをいつ使うか?

GraphQLは、多くの企業のAPIで用いられており、必要な時にAPI経由でリクエストを行わなくても済むクエリ言語です。APIリクエストの手間を省くことで時間を節約し、コードの整理もしやすくなっています。Facebook、GitHub、Netflixなど大手企業でも採用されています。ここでは、GraphQLが人気となった理由のいくつかをご紹介します。

多数のリクエストが必要なAPIや、独自のサーバ構築を目指す場合、GraphQLは優れた選択肢です。軽量で高速、かつ効率的なため、RESTよりも使いやすいと言えます。

APIにとってGraphQLが最適な選択肢か否かを判断するには、いくつかの要因を考慮する必要があります。パフォーマンスが重要で、1分あたりのリクエスト数が多い場合、GraphQLが適している可能性があります。また、現在のアーキテクチャを評価し、GraphQLが複雑さを軽減し効率を向上させるかを検討してください。さらに、既存のAPIに内部変更を加えずに新機能を追加したい場合、新たなバックエンドサービスを構築する手間を省き、既存APIに機能を追加することでユーザの要望に応えることが可能です。

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

どのコインにも表裏があるように、GraphQLにもメリットとデメリットがあります。事前に把握することで、開発者が賢明な選択をする手助けとなります。

メリット 

  • 安定したAPIの開発に適している

GraphQLのデータは宣言的でわかりやすいため、理解に大きな労力が必要なく、安定したAPIを作成することが可能です。

  • 高度なセキュリティ

API安全性の重要な懸念事項の一つは、開発過程で生じるバグです。後になって対処するのは困難なため、GraphQLを利用して安定したAPIを構築することで、最初からセキュリティが強化され、APIがより安全になります。

  • 一貫性があり、脆弱性が低い

しっかりと設計された安定したAPIは、クライアントとサーバ間の誤通信が少なく、正確な動作が保証されます。そのため、セキュリティ上の脆弱性にも耐えられる堅牢なAPIが実現されます。

さらに、GraphQLは以下の点でも有利です:

  • 過不足のないデータ取得が可能
  • 前述の通り、GraphQLスキーマは唯一の情報源を提供し、API全体の統合を容易にする
  • クエリを変更せずにAPIの進化が可能で、クライアントが必要なデータの種類を要求できるため、API開発が促進される

デメリット

  • GraphQLを最大限に活用するには、REST APIの知識が必要
  • データクエリの作業がほとんどサーバ側に集中するため、サーバの負担が増える
  • GraphQLのキャッシュ処理は複雑である
  • 保守を前提としたGraphQLスキーマの作成という追加の責任が生じる
GraphQL and REST

RESTとGraphQL

記事の冒頭で述べたように、GraphQLが誕生した主な理由の一つは、RESTよりもシンプルで使いやすいクエリ言語を実現し、セキュリティに重点を置く点にあります。

なぜ、どのようにこれら二つは異なるのでしょうか。以下をご覧ください。

GraphQLは全体のデータに対して一つのエンドポイントまたはリソースを持ちますが、RESTは異なるデータごとにエンドポイントを使用します。

GraphQLはスキーマ、クエリ、リゾルバを中心に動作し、特定のデータを扱う仕組みです。一方、RESTでは要求内容が複数のAPIを経由して提供されます。

RESTはアーキテクチャの一形態であり、GraphQLはあくまでもクエリ言語です。

API開発は、GraphQLの方がRESTに比べて迅速に進みます。より詳細なRESTとGraphQLの比較については記事をご覧ください。

REST vs GraphQL

GraphQLの例

GraphQLを学び始める際、これはデータベースのクエリ言語ではなく、API用の言語であることを念頭に置いてください。詳しく説明します。

ノードをオブジェクト、エッジをオブジェクト間の関係を示す手段と考えてみてください。この場合、GraphQLはサーバからクエリを通じてスキーマを取得します。

例えば、次のクエリを実行したとします:

{
 fruits {
   name
 }
}

サーバに保存されたデータに基づき、上記クエリは以下のような結果を返す場合があります:

{
 "data": {
   "fruits": {
     "name": "Apple"
   }
 }
}

または、データ量が多い場合、出力は次のようになることもあります:

{
 "data": {
   "fruits": [
       {
         "name": "Apple"
       },
       {
         "name": "Mango"
       },
       {
         "name": "Watermelon"
       }
     ]
 }
}

別の例として、特定の従業員の複数のプロパティの詳細を取得するクエリを示します:

{
 employee(id: "8456") {
   location
   designation
 }
}

この例の出力は次のようになる可能性があります:

{
 "data": {
   "employee": {
     "location": "Manchester",
     "designation": "Senior Developer"
   }
 }
}

結論

GraphQLはAPI用の強力なクエリ言語であり、急速に人気を集めています。Gartnerによれば、2025年までに50%以上の企業が本番環境でGraphQLを利用するとのことです。そのため、固有のセキュリティ面を専用ツールで確実に対応することが重要です。安全なソフトウェア開発プロセスを実践するだけでなく、即時のAPIセキュリティ保護層を加えることが鍵となります。この保護層は、GraphQLの複雑さと高い性能が引き起こす追加のセキュリティ問題を軽減する必要があります。

FAQ

Open
GraphQLは今後の主流となるのでしょうか?
Open
GraphQLはRESTに取って代わるのか?
Open
GraphQLは本当に良いのか?
Open
GraphQLはRESTより速いか?
Open
GraphQLはバックエンドかフロントエンドか?
Open
GraphQLは単なるSQLですか?
Open
GraphQL は REST API より優れていますか?
Open
GraphQLは何に使われるの?
Open
どんな企業が GraphQL を使っているか?

参考資料

GraphQL - Official website

Code using GraphQL

最新情報を購読

更新日:
February 25, 2025
学習目標
最新情報を購読
購読
関連トピック