GraphQL ロゎGraphQL

よくある質問 (FAQ)

はじめに

なぜGraphQLを䜿うべきですか#

ナヌスケヌスによっお異なりたすが、䞀般的にGraphQLにはいく぀かの重芁な機胜がありたす。䟋えば、GraphQLを䜿甚するず、

ホヌムペヌゞでは、GraphQLを䜿甚する理由をさらに詳しく説明しおいたす。

アプリケヌション党䜓を曞き盎さなくおも、GraphQLを詊すこずができたす。䟋えば、既存のREST呌び出しをラップする単䞀のHTTPリク゚ストから始めるこずができたす。GraphQLスキヌマずビゞネスドメむンモデルは埐々に拡匵できたす。最初は1぀のナヌスケヌスに焊点を圓お、そのために必芁なスキヌマの郚分だけを構築するこずをお勧めしたす。

GraphQLはRESTに取っお代わるものですか#

いいえ、必ずしもそうではありたせん。どちらもAPIを凊理し、ビゞネスの芳点から同様の目的を果たすこずができたす。GraphQLはRESTの代替手段ずしお考えられるこずがよくありたすが、決定的な眮き換えではありたせん。

GraphQLずRESTは、実際にはスタック内で共存できたす。䟋えば、GraphQLサヌバヌの背埌でREST APIを抜象化するこずができたす。これは、ルヌトレゟルバヌを䜿甚しおREST゚ンドポむントをGraphQL゚ンドポむントに隠すこずで実珟できたす。

GraphQLずRESTの比范に関する意芋に぀いおは、How To GraphQLをご芧ください。

GraphQLはSQLのようなデヌタベヌス蚀語ですか#

いいえ、これはよくある誀解です。

GraphQLは、通垞、リモヌトクラむアントサヌバヌ通信に䜿甚される仕様です。SQLずは異なり、GraphQLはデヌタの取埗ず倉曎に䜿甚されるデヌタ゜ヌスに䟝存したせん。デヌタぞのアクセスず操䜜は、レゟルバヌず呌ばれる任意の関数を䜿甚しお実行されたす。GraphQLはこれらのレゟルバヌ関数からデヌタを調敎および集玄し、結果をクラむアントに返したす。䞀般的に、これらのレゟルバヌ関数は、さたざたな基盀ずなるデヌタ゜ヌスずの通信を担圓するビゞネスロゞックレむダヌに委任する必芁がありたす。これらのデヌタ゜ヌスは、リモヌトAPI、デヌタベヌス、ロヌカルキャッシュ、その他プログラミング蚀語でアクセスできるほがすべおのものになりたす。

GraphQLをデヌタベヌスず連携させる方法の詳现に぀いおは、レゟルバヌに関するドキュメントをご芧ください。

GraphQLをどのように孊習できたすか#

GraphQLの孊習に圹立぀倚くのリ゜ヌスが利甚可胜です。このりェブサむトもその䞀぀です。ドキュメントには、重芁なGraphQLの抂念ずその仕組みを説明する蚘事が掲茉されおいたす。コミュニティペヌゞには、参照できるリ゜ヌスや参加できるグルヌプがたくさんありたす。

より実践的なガむドに぀いおは、How to GraphQLのフルスタックチュヌトリアルりェブサむトをご芧ください。edXでは無料のオンラむンコヌスExploring GraphQL: A Query Language for APIsも提䟛しおいたす。

孊習を始める前に、APIずは䜕か、クラむアントずサヌバヌ間の通信が䞀般的にどのように機胜するのかを理解しおおきたしょう。

GraphQLはReactたたはJavaScript開発者だけのためのものでしょうか#

いいえ、そうではありたせん。GraphQLは仕様であり、あらゆる蚀語で実装できたす。コヌドペヌゞには、さたざたなプログラミング蚀語で利甚できるラむブラリの長いリストがありたす。

しかし、そう考えるのも無理はありたせん。GraphQLはReactカンファレンスで発衚され、GraphQL.jsは珟圚最も広く䜿甚されおいる実装の1぀です。これが混乱を招く可胜性があるこずを理解しおいるので、ドキュメントの改善ず、JavaScriptで蚘述されおいないコヌドサンプルの远加に取り組んでいたす。

䞀般

GraphQLはフロント゚ンドですか、バック゚ンドですか#

䞡方です。GraphQLは、クラむアントずサヌバヌ間で情報を亀換する方法を指定したす。これには、サヌバヌが利甚可胜なデヌタず操䜜を瀺す方法、クラむアントがリク゚ストをフォヌマットする方法、サヌバヌがこれらのク゚リを実行する方法、クラむアントがレスポンスずしお受信するものが含たれたす。

GraphQLはHTTPを䜿甚したすか#

はい、GraphQLは通垞HTTP経由で提䟛されたす。これは、HTTPプロトコルが業界で広く普及しおいるためです。しかし、単䞀のHTTPリク゚ストを䜜成するこずでGraphQLを詊すこずができるため、圹立ちたす。HTTP経由で動䜜するGraphQLサヌバヌの蚭定に関するガむドラむンは、HTTP経由での提䟛ドキュメントに蚘茉されおいたす。

HTTPはクラむアントサヌバヌプロトコルの最も䞀般的な遞択肢ですが、唯䞀の遞択肢ではありたせん。GraphQLはトランスポヌトレむダヌに䟝存したせん。そのため、䟋えば、リアルタむムデヌタを䜿甚するために、HTTPではなくWebSocketsをGraphQLサブスクリプションに䜿甚できたす。

GraphQLは補品のパフォヌマンスにどのように圱響したすか#

䞀般的なGraphQLバック゚ンドでは、各型のすべおのフィヌルドに、その倀を解決するための集䞭型で単䞀目的の関数が甚意されおいたす。たた、クラむアントでのデヌタバッチング凊理を詊みる代わりに、GraphQLはそのロゞックをサヌバヌに移動したす。その結果、いく぀かの固有のパフォヌマンス䞊の利点がありたす。オヌバヌフェッチを最小限に抑え、サヌバヌぞのラりンドトリップを枛らすこずがその2぀です。

GraphQLの実装を構築する際には、その他のパフォヌマンス芁因も考慮する必芁がありたす。䟋えば、GraphQLサヌビスが「チャッティ」になり、デヌタベヌスから繰り返しデヌタを読み蟌む可胜性がありたす。これは、䞀般的にバッチングテクニックを実装するか、DataLoaderのようなツヌルを利甚するこずで解決されたす。

GraphQLクラむアントずは䜕ですかたた、なぜ䜿甚するのでしょうか#

GraphQLクラむアントは、ク゚リ、ミュヌテヌション、およびサブスクリプションをGraphQLサヌバヌに凊理するのに圹立ちたす。GraphQL APIの基盀ずなる構造を䜿甚しお、特定のプロセスを自動化したす。これには、バッチ凊理、UI曎新、ビルド時のスキヌマ怜蚌などがありたす。

さたざたな蚀語のGraphQLクラむアントのリストは、コヌドペヌゞにありたす。それらの利点の詳现な説明は、How To GraphQLにありたす。

ただし、GraphQLを䜿甚するために特定のクラむアントは必芁ありたせん。通垞のHTTPクラむアントでGraphQLの結果を発行するこずから始めるこずができたす。その埌、アプリケヌションの耇雑さが増すに぀れお、GraphQLに最適化されたクラむアントに切り替えるこずができたす。

GraphQLはORMに取っお代わるものですか#

いいえ、GraphQLは通垞、リモヌトクラむアントサヌバヌ通信に䜿甚される仕様です。䜿甚されるデヌタ゜ヌスに䟝存したせんし、オブゞェクトリレヌショナルマッピングテクニックを実装したせん。しかし、GraphQL甚に特別に構築されたORMもありたす。それらのいく぀かは、コヌドペヌゞのサヌビスセクションに蚘茉されおいたす。

GraphQLはFacebookが所有しおいたすか#

いいえ、GraphQLはGraphQL Foundationによっお管理されおいたす。

぀たり、この仕様はもずもずFacebookで開発され、FacebookはGraphQL Foundationのメンバヌです。䞀郚のGitHubリポゞトリのラむセンスがただFacebook Inc.の䞋に蚘茉されおいるこずに気付くかもしれたせん。それらを曎新しおおり、GraphiQLやDataLoaderなどの䞻芁プロゞェクトはすでに新しい著䜜暩「Copyright (c) 2020 GraphQL Contributors.」に倉曎しおいたす。

GraphQL の開発元は#

倚くの人々です。GraphQL の仕様曞ず関連プロゞェクト党おはオヌプン゜ヌスなので、誰でも貢献できたす。ずはいえ、リポゞトリの背埌には構造が存圚したす。これはコミュニティ内の衝突を解決し、技術的な意思決定を導くために存圚したす。

GraphQL Foundationが GraphQL の倧郚分の監督を行っおいたす。それは数十の異なる䌁業の代衚者で構成されおいたす。

たた、GraphQL Foundation によっお管理される月次のバヌチャルGraphQLワヌキンググルヌプ (WG) 䌚議もありたす。これらの䌚議は、䞀般的に䜿甚されおいる GraphQL ラむブラリやツヌルのメンテナンス担圓者、そしお GraphQL コミュニティぞの重芁な貢献者を䞀堂に䌚わせるこずを目的ずしおいたす。WG 䌚議は完党に公開されおいたす。誰でも参加し、議題に項目を提案するこずができたす。

2020幎11月のWG䌚議では、GraphQL が今埌、技術諮問委員䌚 (TSC) を持぀こずが発衚されたした。詳现に぀いおは近日公開予定です。

分かりにくい堎合はご心配なく - 倚くのこずが進行䞭です。より芖芚的で高レベルの抂芁に぀いおは、GraphQL Landscapeをご芧ください。

GraphQL Foundation ずは䜕ですか#

GraphQL Foundation は、GraphQL のガバナンスを提䟛する䞭立的な財団です。これには、オヌプン゜ヌスリポゞトリのベンダヌニュヌトラルな監芖、資金調達、むベントなどが含たれたす。Linux Foundationの䞋でホストされおおり、数十の異なる䌁業の代衚者で構成されおいたす。GraphQL コミュニティのための公平でオヌプンなホヌムであるこずが目的です。

foundation.graphql.org を蚪問しお、詳现を確認できたす。

ベストプラクティス

GraphQL はスケヌラブルですか#

はい、GraphQL はスケヌラブルになるように蚭蚈されおおり、倚くの䌁業で非垞に高い負荷の䞋で本番環境で䜿甚されおいたす。

GraphQL には、圹に立぀組み蟌みのパフォヌマンス向䞊機胜がいく぀か甚意されおいたす。しかし、本番環境に導入したら、むンスタンス間でのスケヌリングずパフォヌマンスの監芖はあなたの責任になりたす。

GraphQL はオフラむン䜿甚をサポヌトしおいたすか#

いいえ、少なくずもネむティブではありたせん。しかし、オフラむンファヌストを構築できるGraphQL クラむアントがありたす。これらは、キャッシングやサヌビスワヌカヌなど、オフラむン時にデヌタ操䜜を実行するように蚭蚈された機胜を䜿甚したす。

各皮蚀語の GraphQL クラむアントのリストは、圓瀟のコヌドペヌゞにありたす。

GraphQL のセキュリティ䞊の懞念事項は䜕ですか#

GraphQL に関連するセキュリティ䞊の懞念事項の倧郚分は、任意の API やサヌビスで䞀般的です。いく぀かの䟋ずしおは、SQL むンゞェクション、サヌビス拒吊 (DoS) 攻撃、たたは欠陥のある認蚌を悪甚する人がいたす。しかし、GraphQL に固有の攻撃もありたす。䟋えば、バッチ攻撃です。これらの攻撃は、GraphQL が単䞀のネットワヌク呌び出しで耇数のク゚リたたは耇数のオブゞェクトむンスタンスに察するリク゚ストをバッチ凊理するこずを蚱可しおいるこずが原因で発生する可胜性がありたす。

懞念事項にかかわらず、予防措眮を講じるこずは重芁です。GraphQL サヌバヌを保護するための方法はたくさんありたす。タむムアりトの䜿甚、ク゚リの最倧深さの蚭定、完了に必芁なサヌバヌ時間に基づいおク゚リの調敎などは、すべお考えられるアプロヌチです。

䞀般的なセキュリティ䞊の懞念事項ずその察凊方法の抂芁に぀いおは、How to GraphQL のセキュリティチュヌトリアルずOWASP の GraphQL チヌトシヌトをご芧ください。

GraphQL で承認を蚭定するにはどうすればよいですか#

ビゞネスロゞックレむダヌで承認動䜜を適甚するこずをお勧めしたす。そうすれば、承認の単䞀の真実の情報源を持぀こずができたす。

より詳现な説明に぀いおは、圓瀟の承認ドキュメントを参照しおください。

GraphQL で認蚌はどのように機胜したすか#

OAuthやJWTなどの䞀般的なパタヌンを䜿甚しお認蚌を実装できたす。GraphQL の仕様内では、認蚌に぀いお特別なものは䜕もありたせん。

いく぀かのGraphQL ラむブラリには、認蚌のための特定のプロトコルも含たれおいたす。ただし、パむプラむンモデルを䜿甚しおいる堎合は、GraphQL をすべおの認蚌ミドルりェアの埌に配眮するこずをお勧めしたす。

GraphQL.jsを䜿甚しお API サヌバヌを構築する堎合は、Express ミドルりェアを䜿甚した認蚌の凊理に関するドキュメントがありたす。

GraphQL はマむクロサヌビスアヌキテクチャの蚭蚈に適しおいたすか#

はい、可胜です。マむクロサヌビスアヌキテクチャに GraphQL を統合する堎合は、クラむアントが耇数の GraphQL サヌビスず通信するのではなく、API ゲヌトりェむずしお 1 ぀の GraphQL スキヌマを䜿甚するこずをお勧めしたす。このようにしお、バック゚ンドをマむクロサヌビスに分割できたすが、それでも単䞀の API からフロント゚ンドにすべおのデヌタを収集できたす。

API ゲヌトりェむを䜜成するには倚くの方法がありたす。GraphQL を䜿甚するこずの利点は、キャッシング、リク゚ストのバゞェット、ク゚リのスケゞュヌルの蚈画などの機胜を利甚できるこずです。

GraphQL でのバヌゞョン管理はどのように機胜したすか#

他の REST API ず同様に、GraphQL サヌビスのバヌゞョニングを劚げるものはありたせん。ずはいえ、GraphQL は蚭蚈䞊、バヌゞョン管理を回避したす。

代わりに、GraphQL はスキヌマを継続的に構築および進化させるためのツヌルを提䟛したす。たずえば、GraphQL は明瀺的に芁求されたデヌタのみを返したす。これは、砎壊的な倉曎を䜜成したり、既存のク゚リの結果を膚らたせたりするこずなく、新しい機胜および関連するすべおのタむプずフィヌルドを远加できるこずを意味したす。

GraphQL でのバヌゞョン管理のしくみに぀いおは、ベストプラクティスセクションで詳しく読むこずができたす。

GraphQL API をドキュメント化するにはどうすればよいですか#

GraphQL の利点の 1 ぀は、本質的に自己ドキュメント化されおいるこずです。GraphiQLなどのむンタラクティブツヌルを䜿甚するず、GraphQL API によっお公開されおいるデヌタフィヌルド、タむプなどを調べるこずができたす。description フィヌルドを远加しお、゚ンドポむントに関する補足的なメモを提䟛するこずもできたす。この description フィヌルドは、文字列ず Markdown をサポヌトしおいたす。

倚くの人にずっお、これは十分な API リファレンスドキュメントを提䟛したす。しかし、他の圢匏のドキュメントの必芁性を枛らすわけではありたせん。䞀般的な抂念が特定のナヌスケヌスにどのように関連しおいるかを説明するガむドを䜜成する必芁があるでしょう。

仕様曞

仕様曞のリリヌスをフォロヌする最良の方法は#

GraphQL 仕様曞の最新のワヌキングドラフトリリヌスは、spec.graphql.org/draftにありたす。以前の゚ディションも、リリヌスタグに察応するパヌマリンクで利甚できたす。

各リリヌスの背埌にあるプロセス党䜓はオヌプン゜ヌスです。graphql-spec リポゞトリのプルリク゚ストをフォロヌするこずで、仕様曞の提案を監芖できたす。たた、さたざたな提案に関する過去の GraphQL ワヌキンググルヌプの議論をYouTubeで確認するこずもできたす。

GraphQL の仕様にどのように貢献できたすか#

GraphQL はただ進化しおおり、貢献は倧歓迎です仕様曞最新のワヌキングドラフトを含むはオヌプン゜ヌスです。コントリビュヌタヌガむドラむンは GitHub で入手できたす。

しかし、仕様曞以倖にも、GraphQL に関わる方法は他にもありたす。このりェブサむトずドキュメントのコンテンツの曎新などです。graphql-js、graphql-http、GraphiQL、たたはGraphQL Foundationによっお維持されおいるその他倚くのプロゞェクトの 1 ぀ぞの貢献などです。

GraphQL 仕様曞のメンバヌシップずは#

GraphQL 仕様曞ず関連する参照実装は、Joint Development Foundation プロゞェクトLinux Foundation ファミリヌの䞀郚でもありたす。個人たたは䌁業の貢献者は、無料でドキュメントに眲名し、貢献がプロゞェクトのオヌプン゜ヌスラむセンスに埓うこずに同意したす。これは GraphQL Foundation のメンバヌシップではないため、仕様曞のメンバヌは予算の䜿い道を決定したせん。

GraphQL 仕様曞のメンバヌシップ文曞に眲名するには、任意のGitHub の GraphQL リポゞトリに察しお PR を開いおください。

あなたの組織が GraphQL を䜿甚しお恩恵を受けおいる堎合は、䌚瀟を代衚しお PR を開き、GraphQL Foundation に参加するこずを怜蚎しおください。

サブスクリプションのドキュメントはどこにありたすか#

ただこのりェブサむトにはありたせんが、珟圚䜜業䞭です。サブスクリプションに関するガむドの䜜成にご協力いただける堎合は、お知らせください。

珟時点では、仕様曞にサブスクリプションの曞き方ず実行方法の詳现が含たれおいたす。

フロント゚ンド

GraphQLはReduxや他のステヌト管理ラむブラリに取っお代わるものですか#

いいえ、GraphQLはステヌト管理ラむブラリではありたせんが、ステヌト管理ラむブラリの必芁性を軜枛するこずができたす。

Reduxのようなステヌト管理ラむブラリの利点の1぀は、APIレスポンスをアプリケヌションが理解できる圢匏に倉換できるこずです。GraphQLでは、リク゚ストするデヌタを制埡でき、通垞、グラフのデザむンによっおクラむアントフレンドリヌな圢匏で結果がフォヌマットされたす。そのため、この利点は既に組み蟌たれおいたす。倚くのクラむアントラむブラリもステヌトの管理に䜿甚でき、キャッシュなどの機胜が組み蟌たれおいたす。それでもステヌト管理ラむブラリを実装するこずを遞択できたすが、レスポンスデヌタのフォヌマットに䜿甚するこずは䞀般的には必芁ありたせん。

GraphQL Foundation

GraphQL Foundationは䜕をしおいるのですか#

Foundationの䞻な責任は、GraphQLコミュニティの持続可胜性を最倧限に高めるためのポリシヌ蚭定ず予算配分です。メンバヌは毎月開催される理事䌚に参加し、資金の配分方法を決定したす。

メンバヌになるず、資金はどこに䜿われたすか#

GraphQL Foundationは、メンバヌのサポヌトによっおのみ資金提䟛されおいたす。理事䌚は、䌚費をコミュニティの最倧限の利益のために䜿甚する幎間予算を蚭定したす。Foundationが䌚員シップを通じお集めた資金の分配方法は次のずおりです。

  • 䞭立的な圹割で掻動しおいるコアコミュニティ開発者ぞの助成金ずスポンサヌシップの提䟛。
  • コアコミュニティITむンフラストラクチャぞの資金提䟛。
  • FoundationずGraphQLプロゞェクト゚コシステムのための調敎、財務、法的サポヌトプログラムぞの資金提䟛。
  • その他のコミュニティおよび開発者サポヌトプログラム。

GraphQL Foundationの予算は、コミュニティのニヌズの倉化に合わせお調敎されたす。

意思決定はどのように行われたすか#

他のLinux Foundationプロゞェクトず同様に、理事䌚は投祚によっお意思決定を行いたす。すべおの投祚は平等であり、メンバヌに特別な投祚暩や特暩はありたせん。珟圚の憲章では、理事䌚のメンバヌ数を25名に制限しおいたす。

誰がGraphQL Foundationに参加できたすか#

GraphQL Foundationの䌚員資栌は、GraphQL゚コシステムを支揎したい䌁業に開攟されおいたす。GraphQL FoundationはLinux Foundationにホストされおいるため、メンバヌはLinux Foundationにも参加する必芁がありたす。

GraphQL開発に参加するためにFoundationに参加する必芁がありたすか#

いいえ、Foundationの䌚員資栌は技術開発コミュニティずは別です。GraphQL開発に参加する費甚はかかりたせんが、参加するには無料のGraphQL Specification䌚員契玄に眲名する必芁がありたす。これら2぀は別物です。

メンバヌは、必須の資金を提䟛し、その䜿甚方法に関する意思決定に参加するためにFoundationに参加したす。開発者は、アむデア、コヌド、その他のコンテンツを提䟛するためにGraphQL Specificationに参加したす。倚くの䌁業は䞡方を行っおいたす。

技術開発にはどのように参加できたすか#

ぜひご参加ください始めるのに最適な堎所は、毎月開催されるGraphQLワヌキンググルヌプです。議題に自分自身を远加するPRを開けば、参加できたす。

それ以倖では、他のプロゞェクトに参加できたす。

組織を蚭立したのは誰ですか#

GraphQL Foundationは、Apollo、AWS、Butterfly Network、Dgraph Labs、Facebook、Gatsby、GraphZen、Hasura、IBM、Intuit、Neo4j、Novvum、Pipefy、Salsify、Solo.io、およびThicitによっお蚭立されたした。

珟圚メンバヌになっおいるのは誰ですか#

GraphQL Foundationの䌚員ペヌゞで、䌚員に぀いお詳しく知るこずができたす。

どのように参加できたすか#

䌚員申請フォヌムに蚘入するこずで、GraphQL FoundationずLinux Foundationのメンバヌになるこずができたす。