SlideShare a Scribd company logo
1 of 19
Download to read offline
GraphQL
合同会社FullSailing
横山 巧
目次
§1 GraphQL
§1.1 GraphQLとは
➢ RESTとの比較
➢ エコシステム
➢ ユースケース
§1.2 GraphQL SDLについて
➢ GraphQL Playgroundの紹介
§1.3 GraphQLクライアントについて
➢ タグ付きテンプレートリテラル
➢ Apollo Clientの使用例
§1 GraphQL(続き)
§1.4 GraphQLサーバーについて
➢ リゾルバー
➢ Apollo Serverの使用例
参考文献
目次(再掲)
§1 GraphQL
§1.1 GraphQLとは
➢ RESTとの比較
➢ エコシステム
➢ ユースケース
§1.2 GraphQL SDLについて
➢ GraphQL Playgroundの紹介
§1.3 GraphQLクライアントについて
➢ タグ付きテンプレートリテラル
➢ Apollo Clientの使用例
§1 GraphQL(続き)
§1.4 GraphQLサーバーについて
➢ リゾルバー
➢ Apollo Serverの使用例
参考文献
§1.1 GraphQLとは
GraphQLは、API(Application Programming Interface)を記述するためのクエリ言語。
典型的なクライアント - サーバー通信を行うWebアプリケーションにおいては、
❖ クライアントが、GraphQLの仕様にしたがったクエリを作成し、リクエスト
❖ サーバーは、すべてのクエリを1つのエンドポイントで受信
GraphQLの仕様にしたがって解析、要求されたデータを過不足なくレスポンス
といった形式で活用される。
REST APIのもつ弱点を克服するべく登場した背景があり、APIを利用するクライアントに
とって柔軟なデータの送受信を可能にする点が強みである。
注意︎
"データベースの技術"であると間違われることもあるGraphQLだが、実際には
データベースに依存しない技術である!
➢ RESTとの比較
GraphQLでは、クライアントが作成したクエリの内容によって、サーバーはレスポンスする
データの構造を変化させる。
このレスポンスの柔軟性により、REST APIを利用するとき問題となる "Overfetching" -
"Underfetching"(取得するデータの過不足)を回避することができる。
https://www.howtographql.com/basics/
1-graphql-is-the-better-rest/
エンドポイントごとに
レスポンスのデータ
構造は固定
リレーションがある
データの取得には、
複数回の通信を
必要とする
REST GraphQL
エンドポイントは
1つだけ
リレーションがあるデータを
1度に過不足なく通信可能
➢ エコシステム
GraphQLは、以下の3つを組み合わせ、活用される。
❖ GraphQL SDL(Schema Definition Language = スキーマ定義言語)
クライアントおよびサーバーが、APIを利用して送受信するデータの構造を
記述するための構文。
1つ1つのデータに型付けをすることができる。
❖ GraphQLクライアント
APIを利用して取得したいデータを、SDLに対応したフォーマット(=クエリ)として
渡すことにより、GraphQLサーバーとの通信を行うもの。
❖ GraphQLサーバー
リゾルバーと呼ばれる関数により、SDLによる定義と対応したデータを生成し、
API呼び出しに応じてレスポンスするもの。
➢ ユースケース
GraphQLを活用したアプリケーションの構成には、
GraphQLサーバーにおけるデータ取得元の違いから
バリエーションが存在する。
例えば、GraphQLサーバーを
❖ データベースと接続
❖ 既存システムと統合
❖ データベースと接続し、既存システムと統合
することで必要なデータを取得、加工・整形し、
GraphQLクライアントに対してレスポンスする。
レスポンスの柔軟性から、クライアントデバイスに
応じて最適化されたデータ通信を実現できること、
などがメリットとして挙げられる。
https://www.howtographql.com/basics/
3-big-picture/
§1.2 GraphQL SDLについて
GraphQLには独自の型付けシステムがあり、APIを用いて送受信するデータの構造を
定義するのに、下表のデータ型を使用する。
型名 説明
Object
いくつかのフィールドから
構成されるオブジェクト。
Scalar
Int(符号付き32ビット整数)や
String(UTF8文字列)などの
具体的なデータ。
Enumeration
(Enums)
決められた値のうちで、いずれか
1つとなるScalar。(列挙型)
Interface
型を定義するために含めなければ
ならないフィールドのグループ。
Union
Objectの組み合わせ。いずれか
1つのObjectが送受信されること
を示す。
Input
検索や書き込みなどのパラメータ
として使用されるObject。
"!"記号により、nullでない
ことを示せる。
"[ ]"により、リストである
ことを示せる。
GraphQLスキーマの例
§1.2 GraphQL SDLについて
Objectには、"ルート型"と呼ばれる3つの特別な型が存在し、クライアントがサーバーに
対してクエリを実行するときの、エントリーポイントとして定義される。
❖ Query
読み取り操作を実行するとき、指定可能なフィールドで構成する。
❖ Mutation
書き込み操作を実行するとき、指定可能なフィールドで構成する。
❖ Subscription
リアルタイム接続を確立するとき、指定可能なフィールドで構成する。
クライアントまたはサーバーにおいて、特定のイベントが発生したときリアルタイムに
データを送受信することができる。
➢ GraphQL Playgroundの紹介
GraphQLのIDEである"GraphQL Playground"により、開発に役立つ機能が利用できる。
"JavaScript + Apollo Server Tutorial"より、Hackernewsのクローン(ローカルホスト)
スキーマに定義された
オブジェクトのフィールドで
取得したいものをエディタに
書き込み、再生ボタンを押下
(クエリの作成・実行)
☞ GraphQL PlaygroundでAPIドキュメントを閲覧、任意︎のクエリを実行 >>
§1.3 GraphQLクライアントについて
GraphQLは多くのプログラミング言語で
サポートされており、新規・既存を問わず
様々なプロジェクトに導入するチャンスが
ある。
GraphQLクライアントが提供する機能の
例として、
❖ 宣言的なデータの取得
❖ UIと取得したデータの統合
❖ データのキャッシング
❖ ビルド時のバリデーション
などが挙げられる。
https://graphql.org/code/#language-support
➢ タグ付きテンプレートリテラル
JavaScriptにおいて、テンプレートリテラルに
与えられた形式のひとつで、"タグ関数"による
解析・操作が可能なもの。
参考 : Template literals (Template strings)
人気のGraphQLクライアントの一つである
Apollo Client(JavaScript)は、GraphQL
クエリの作成にタグ付きテンプレートリテラル
を活用している。
タグ関数の例
➢ Apollo Clientの使用例
GraphQLコミュニティとPrismaによる、"React + Apollo Tutorial"の内容を一部抜粋して
紹介する。
ソースコード : https://github.com/howtographql/react-apollo
Hackernewsのクローン(ローカルホスト)
➢ Apollo Clientの使用例
☞ Apollo ClientのセットアップおよびQuery/Mutation/Subscriptionの実行箇所を
コードリーディング >>
❖ セットアップ
react-apollo/src/index.js
❖ Query/Subscription
react-apollo/src/components/LinkList.js
❖ Mutation
react-apollo/src/components/CreateLink.js
§1.4 GraphQLサーバーについて
アプリケーションのもつ多くのデータは、
❖ ノード : オブジェクト
❖ エッジ : ノードどうしのリレーション
を用いて"グラフ"として表現することが
できる。
GraphQLサーバーがクエリを受信すると、
アプリケーションのデータグラフから
必要な部分を抜き出してレスポンスする。
注意︎
悪意︎のあるユーザーから、必要以上に複雑で
大きなデータを要求するクエリが送信される
危険もある。
そのため、タイムアウトやスロットリング
といった対策を組み込むことが好ましい。
https://www.apollographql.com/blog/graphql/basics/
the-concepts-of-graphql/
➢ リゾルバー
GraphQL SDLで定義されたスキーマにおいて、1つ1つの型に存在するフィールドには
それぞれに"リゾルバー"という関数が紐づけられる。
リゾルバー関数は、対応したフィールドのデータを取得するよう、GraphQLサーバーの
開発者によって実装される。
GraphQLサーバーは、受信したクエリに含まれるフィールドを解析し、対応する
リゾルバー関数を実行して得られたデータからレスポンスを作成する。
オブジェクトが得られた場合、さらにそのオブジェクトのフィールドに対応した
リゾルバー関数が連鎖的に呼び出される。
リゾルバー関数には、4つの引数がある。
引数 説明
obj 連鎖的な実行において、直前に呼び出されたリゾルバー関数の返り値。
args GraphQLクエリのフィールドに渡された引数。
context データベースアクセスなど、それぞれのリゾルバー関数に共通して渡される値。
info GraphQLクエリのフィールドに関するスキーマなどの情報。
➢ Apollo Serverの使用例
Apollo Server(Node.js)は、人気のGraphQLサーバーの一つに挙げられる。
GraphQLコミュニティとPrismaによる、"JavaScript + Apollo Server Tutorial"の内容を
一部抜粋して紹介する。
ソースコード : https://github.com/howtographql/graphql-js
☞ Apollo ServerのセットアップおよびQuery/Mutation/Subscriptionの実行箇所を
コードリーディング >>
❖ セットアップ
graphql-js/src/index.js
graphql-js/src/schema.graphql
❖ Query
graphql-js/src/resolvers/Query.js
❖ Mutation
graphql-js/src/resolvers/Mutation.js
❖ Subscription
graphql-js/src/resolvers/Subscription.js
目次(再掲)
§1 GraphQL
§1.1 GraphQLとは
➢ RESTとの比較
➢ エコシステム
➢ ユースケース
§1.2 GraphQL SDLについて
➢ GraphQL Playgroundの紹介
§1.3 GraphQLクライアントについて
➢ タグ付きテンプレートリテラル
➢ Apollo Clientの使用例
§1 GraphQL(続き)
§1.4 GraphQLサーバーについて
➢ リゾルバー
➢ Apollo Serverの使用例
参考文献
参考文献
➢ GraphQL
❖ GraphQL
❖ GraphQL Playground
❖ How to GraphQL
❖ React + Apollo Tutorial
❖ JavaScript + Apollo Server Tutorial
❖ Apollo Docs
❖ Reasons to use GraphQL | Top 5 Reasons Why and How to use GraphQL
❖ GraphQL Concepts Visualized
❖ Introduction to Graphs – Data Structure and Algorithm Tutorials
❖ Template literals (Template strings)
❖ declarative programming

More Related Content

Similar to GraphQLおよびそのエコシステム解説とチュートリアル紹介のためのプレゼンテーション資料

HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
Takatoshi Matsuo
 

Similar to GraphQLおよびそのエコシステム解説とチュートリアル紹介のためのプレゼンテーション資料 (20)

APEX UG Japan meetup 2018#3 - APEX18.1大特集
APEX UG Japan meetup 2018#3 - APEX18.1大特集APEX UG Japan meetup 2018#3 - APEX18.1大特集
APEX UG Japan meetup 2018#3 - APEX18.1大特集
 
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
 
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
GTC Japan 2016 Rescaleセッション資料「クラウドHPC ではじめるDeep Learning」- Oct/5/2016 at GTC ...
 
Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要
 
JDK: 新しいリリースモデル解説
JDK: 新しいリリースモデル解説JDK: 新しいリリースモデル解説
JDK: 新しいリリースモデル解説
 
Web技術勉強会 第31回
Web技術勉強会 第31回Web技術勉強会 第31回
Web技術勉強会 第31回
 
Ruby on Rails 4.0 勉強会資料
Ruby on Rails 4.0 勉強会資料Ruby on Rails 4.0 勉強会資料
Ruby on Rails 4.0 勉強会資料
 
今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう今すぐブラウザでES6を使おう
今すぐブラウザでES6を使おう
 
SAP Extractorのソースエンドポイントとしての利用
SAP Extractorのソースエンドポイントとしての利用SAP Extractorのソースエンドポイントとしての利用
SAP Extractorのソースエンドポイントとしての利用
 
Developer Festa Sapporo講演資料:Java最新動向とこれからの活用
Developer Festa Sapporo講演資料:Java最新動向とこれからの活用Developer Festa Sapporo講演資料:Java最新動向とこれからの活用
Developer Festa Sapporo講演資料:Java最新動向とこれからの活用
 
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状についてClojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
Clojure の各種React系ラッパーライブラリのサーバーサイドレンダリングの現状について
 
GraphQL with React
GraphQL with ReactGraphQL with React
GraphQL with React
 
Rx java x retrofit
Rx java x retrofitRx java x retrofit
Rx java x retrofit
 
ochacafe#6 人にもマシンにもやさしいAPIのエコシステム
ochacafe#6 人にもマシンにもやさしいAPIのエコシステムochacafe#6 人にもマシンにもやさしいAPIのエコシステム
ochacafe#6 人にもマシンにもやさしいAPIのエコシステム
 
Data management of cosmos db using apache gremlin
Data management of cosmos db using apache gremlinData management of cosmos db using apache gremlin
Data management of cosmos db using apache gremlin
 
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 20...
 
実践!Django + GraphQL 実装
実践!Django + GraphQL 実装実践!Django + GraphQL 実装
実践!Django + GraphQL 実装
 
DVGA writeup
DVGA writeupDVGA writeup
DVGA writeup
 
MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良MySQL 5.7とレプリケーションにおける改良
MySQL 5.7とレプリケーションにおける改良
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
 

GraphQLおよびそのエコシステム解説とチュートリアル紹介のためのプレゼンテーション資料