GraphQL入門 オススメ書籍まとめ

GraphQL

GraphQLに入門するのにオススメな書籍をまとめました!

先日フリーランスでの現場を移動することになり、数ヶ月前からGraphQLを業務で使用することになりました!

業務でGraphQLを使用するに当たって、GraphQL関連の書籍を買い漁って読んでみましたので、GraphQLのオススメな書籍を紹介したいと思います!

GraphQLについて

一時期TwitterなどでもGraphQLの単語をよく目にしましたが、最近ではだんだんと多くの企業でGraphQLを採用してきているように思います!

なんとなくGraphQLを学習しようかなと思っている方のために、ざっくりGraphQLについてまとめておきます

GraphQLとは

GraphQLは、APIのための問い合わせ(クエリ)言語です。

GraphQL = Graph Query Languageという名前の通り、グラフ理論に基づいたクエリ言語になります。

今まで何らかのプログラミング言語でシステム開発経験がある場合は、GraphQLはREST APIなどのWeb APIのモデルのうちの1つと言えばイメージがしやすいかもしれません。

REST APIではCRUD形式でAPIを定義するのに対して、GraphQLはSQLのような問い合わせ(クエリ)でAPIを定義します。

皆さんがよく知っているSQLはデータベースに対して実行されるクエリですが、GraphQLはWeb APIに対して実行されるものです。

REST APIとは何が違うの?

じゃあGraphQLは、REST APIと何が違うの?という疑問が湧いてくると思います。

GraphQLが従来のREST APIと大きく違う点は、エンドポイント部分になってくると思います。

ここのエンドポイント部分が異なることにより、様々なメリットやデメリットがありますので、それを次の項で説明します。

GraphQLのメリット

GraphQLを使おうか迷っているけど、結局GraphQLの何が良いの?と思いますよね!

GraphQLのメリットは、

  • 1つのエンドポイントでデータのやり取りができる
  • 強い型付け
  • ドキュメント
  • リアルタイム処理

というのがあります。

個々の詳細については以下で説明していきたいと思います。

1つのエンドポイントでデータのやり取りができる

GraphQLでは、1つのエンドポイントで、クライアント⇄サーバー間のデータのやり取りができるという利点があります。

REST APIではよく、

  • 1つのエンドポイントでは必要なデータが取得できず、複数のエンドポイントを叩く必要が出てくる(アンダーフェッチ)
  • 特定の値を取得するために、余分なデータも取得されてしまう(オーバーフェッチ)

という問題が日常的に起こっています。

その点、GraphQLでは、必要なデータだけを要求し、レスポンスとして受け取ることができます!

GraphQLでは複数のエンドポイントを叩く必要がなくなり、必要なデータだけを要求し、取得できることで、特にフロントエンド開発においては、開発体験を大きく向上させることができるのです!

強い型付け

GraphQLは型付きでスキーマを記述します!

それぞれのフィールドは固有の型を持つことができ、バリデーションされることで、より安全なシステムを開発することが可能なのです!

ドキュメント

まずREST APIでの実装について考えると、APIのドキュメント(仕様書)には、どのエンドポイントへ、どのHTTPメソッドで、どのパラメータを送るなどが記載がないと、フロントエンド開発でAPIを叩くことができないですよね。

仮にドキュメントがなかったり、誤っている場合は、結局サーバーサイドの実装を自分で確認する羽目になってしまうこともあるかと思います。

ここで同じクエリー言語であるSQLについても考えてみてください。

データベースに対してSQLを実行する時に、DESCなどでテーブルの構造が把握できれば、簡単にSELECT文の実行など、できちゃいますよね!

GraphQLでも、データ構造を見ればクエリーの使い方がすぐにわかります!

GraphQLの開発に用いるPlaygroundなどで、実装されているデータ構造は簡単に確認できます!

もうAPIを追加・更新・削除をしたら、都度SwaggerなどのAPIドキュメントを更新するような面倒な作業もなくります。

GraphQLでは実装とドキュメントが一緒なので、ドキュメントを更新し忘れて、結局実装を見なければいけないということからも解消されるのです!

リアルタイム処理

GraphQLのSubscriptionsは、内部でWebSocketを使用しているので、Subscriptionsのスキーマを定義することで簡単にリアルタイム処理を実現することができます!

GraphQLのデメリット

GraphQLのメリットがわかったところで、デメリットも気になるところだと思います。

GraphQLのデメリットは、

  • エンドポイントが一つなのでキャッシュを工夫する必要がある
  • エンドポイントが一つなのでURL単位の監視や分析が難しい
  • 画像や動画のアップロードのデータ容量が増えてしまう

となります。

GraphQLにも当然上記のようなデメリットはありますが、工夫することである程度どうにかなります。

実際のところ、GraphQLのデメリットよりもメリットによる恩恵は大きいと思います。

個人的には、GraphQLを一度使ったらやめられないぐらい良いものだと感じているため、興味がある場合は是非この機会に入門してみることをオススメします!

GraphQLを学習する際の注意

僕の周りでも、個人的な学習や業務でこれからGraphQLを学びたいという方がだんだんと増えてきました!

ただ学習しようとしているのが、GraphQLサーバー側なのか、GraphQLクライアント側なのかを間違えないように注意が必要です。

GraphQLに1から入門する方は、GraphQLサーバー側もGraphQLクライアント側も両方体系的に学べる書籍を選ぶことをオススメします!

事項からの書籍の紹介では、

  • GraphQLサーバーについて学べる
  • GraphQLクライアントについて学べる

について記載しておきますので、是非購入の際は参考にし、用途に合った書籍を購入するようにしてください。

初めてのGraphQL ―Webサービスを作って学ぶ新世代API


初めてのGraphQL ―Webサービスを作って学ぶ新世代API

オススメ度

5

GraphQLに入門したい方には、圧倒的にオススメの書籍になります。

オライリー本なので結構分量はありますが、GraphQLの入門からかなり深いレベルまで学習することができ、これで実戦投入まで可能な内容になっています。

現状だと、GraphQLの入門書籍と言えば、これ一択と言って間違いないかと思います。

目次

  • 1章 GraphQLへようこそ
    • 1.1 GraphQLとは
    • 1.2 GraphQLの誕生
    • 1.3 データ通信の歴史
    • 1.4 RESTの課題
    • 1.5 GraphQLの実情
  • 2章 グラフ理論
    • 2.1 グラフ理論の用語
    • 2.2 グラフ理論の歴史
    • 2.3 木というグラフ
    • 2.4 実世界でのグラフ
  • 3章 GraphQLの問い合わせ言語
    • 3.1 GraphQL APIの便利なツール
    • 3.2 GraphQLのクエリ
    • 3.3 ミューテーション
    • 3.3.1 クエリ変数
    • 3.4 サブスクリプション
    • 3.5 イントロスペクション
    • 3.6 抽象構文木
  • 4章 スキーマの設計
    • 4.1 型定義
    • 4.2 コネクションとリスト
    • 4.3 引数
    • 4.4 ミューテーション
    • 4.5 入力型
    • 4.6 返却型
    • 4.7 サブスクリプション
    • 4.8 スキーマのドキュメント化
  • 5章 GraphQLサーバーの実装
    • 5.1 プロジェクトのセットアップ
    • 5.2 リゾルバ
    • 5.3 apollo-server-express
    • 5.4 コンテキスト
    • 5.5 GitHub認可
    • 5.6 まとめ
  • 6章 GraphQLクライアントの実装
    • 6.1 GraphQL APIの利用
    • 6.2 Apollo Client
    • 6.3 Apollo ClientとReact
    • 6.4 認可
    • 6.5 キャッシュ
  • 7章 GraphQLの実戦投入にあたって
    • 7.1 サブスクリプション
    • 7.2 ファイルアップロード
    • 7.3 セキュリティ
    • 7.4 次の段階にすすむ

コメント

オススメ度の欄でも記載しましたが、GraphQLの入門書籍では現状この書籍一択で間違いありません!

目次を見てもらうとわかると思いますが、GraphQLサーバーの実装方法から、GraphQLクライアントで実際に利用するところまで、かなり詳しく書かれています。

この書籍のメリットでもあり、人によってはデメリットになるかもしれない部分としては、

  • GraphQLサーバー → Expressで実装
  • GraphQLクライアント → Reactで実装

となっているところでしょう。

さすがにGraphQLを学習したいという方であれば中級者以上が多いと思いますが、事前に最低限のExpressReactの知識はあった方がスラスラ読めると思います。

またこちらもメリットにもデメリットにも成り得る部分ですが、認可などのサンプルとしてGitHubの認可を使用しているため、事前にある程度のOAuthについての理解があるとスラスラと読み進めることができます!

現状でGraphQL書籍がまだまだ少ないことを考慮しても、GraphQL学習としてはかなりオススメで、ExpressやReact、GitHub認可などのサンプル実装もあり、かなりの良書であります!

GraphQL自体に圧倒的に詳しく書かれている書籍なので、GraphQLから入門する方は、結構分量がありますが、大人しくこの書籍で学習を進めると一番力が付くと思います

Hello, GraphQL for client-side!

オススメ度

3

ApolloなどのGraphQLクライアントの利用方法を知りたい人には適しています!

入門という観点では、GraphQL自体の解説は薄いためオススメ度は少し下げていますが、実践的な例としてNuxt.jsを用いた物が欲しい場合は、とても良書だと思いました。

目次

  • 第1章 GraphQLとは?
    • 1.1. 概要
    • 1.2. Apollo Client
  • 第2章 GraphQL with Nuxt.js
    • 2.1. 概要
    • 2.2. Nuxt.js
    • 2.3. apollo-module
    • 2.4. クエリの書き方
    • 2.5. 取得(Queries)
    • 2.6. 更新(Mutation)
    • 2.7. エラーハンドリングについて
    • 2.8. オフライン対応について
    • 2.9. テスト
    • 2.10. 良い使い方
    • 2.11. 周辺ライブラリ・エコシステム
    • 2.12. まとめ

コメント

注意して欲しいのは、この書籍の内容としては、Apolloを用いたGraphQLクライアントを学習できる内容になっていることです。

何らかのプログラミング言語でGraphQLサーバーを立てる内容を学習することはできないので注意が必要です。

逆にNuxt.jsApolloを用いた開発について学習したい場合は適しています!

GraphQLサーバをGo言語で作る

オススメ度

3

GoでGraphQLサーバーを作る際の設計やベストプラクティスを知るのに適しています!

目次

  • 第1章 GraphQL ってなんなのさ
    • 1.1 GraphQLを用いる目的
    • 1.2 GraphQLって本当に使えるの?
    • 1.2.1 クライアントから見た感想
    • 1.2.2 サーバから見た感想
    • 1.3 Introspectionがつよい
    • 1.4 一瞬で腑に落ちるGraphQLサーバの概念
    • 1.5 GraphQLの勉強の仕方
  • 第2章 GraphQL に触れる! GitHub v4 API
    • 2.1 GitHubv4APIとはなんぞや
    • 2.2 GraphiQL…最高や!
    • 2.3 Schemaを眺める
    • 2.4 ドキュメントを元にQueryを書いてみる
    • 2.5 Goでクライアントを書く
  • 第3章 ベストプラクティス・バッドプラクティス
    • 3.1 N+1問題
    • 3.2 RESTAPIからの移行
      • 3.2.1 エラーメッセージの粒度
      • 3.2.2 QueryLanguageとエラー
    • 3.3 RelayGlobalObjectIdentification
    • 3.4 GitHubv4APIから設計を読み取る
    • 3.5 GraphQLのセキュリティ
    • 3.6 ユーザの認証について
    • 3.7 無理をしない型定義
    • 3.8 Directiveを使い倒せ
    • 3.9 カスタムスカラ型の扱い
    • 3.10 テストの書き方について
    • 3.11 CodetoSchemavsSchematoCode
    • 3.12 BFFvs愚直実装
    • 3.13 お前は本当に並列に対して真剣に取り組んでいるのか?

コメント

GoでGraphQLサーバーを実装する際の設計やベストプラクティスを知ることができます!

Goでの実際のコード例はほとんどない?という感じで、設計やベストプラクティスなどの話がメインなので、入門的な感じではないので注意です!

ベストプラクティスやバッドプラクティスの内容は非常に貴重で、ありがたいです。

GraphQLを実践投入される前には一読するとかなり有用だと思いました。

また自分でPDFをビルドすると無料で読めるのもお得です。(著者への感謝も含めて出来るだけ購入したいですが)

GraphQLのマネージドサービスを用いる方法

GraphQLはAWSAppSyncというマネージドサービスを用いる方法もあります。

GraphQLサーバーを1から自分で作成し、さらにApolloなどのGraphQLクライアントでアプリを作成するとなると結構大変です。

そんな時には、AWSのAppSyncというGraphQLのマネージドサービスを用いると、GraphQLサーバーを1から自分で立てる手間が軽減し、運用時の様々なコストも軽減させるかもしれません。

ここではGraphQLのマネージドサービスであるAWSのAppSyncを学習するのにオススメな書籍を紹介しておきます。

AmplifyとAppSyncで作るサーバーレス開発入門

オススメ度

4

目次

  • 第1章 GraphQL とは
    • 1.1 TL;DR….
    • 1.2 GraphQLが注目される背景
    • 1.3 GraphQLのメリット
    • 1.4 GraphQLのデメリット
    • 1.5 スキーマ定義について
    • 1.6 Queriesについて
    • 1.7 Mutationsについて
    • 1.8 Subscriptionsについて
  • 第2章 AppSync とは
    • 2.1 AppSyncのアーキテクチャ
    • 2.2 スキーマ
    • 2.3 クエリー
    • 2.4 リゾルバー
  • 第3章 Amplify とは
    • 3.1 AmplifyCLIの概要
    • 3.2 Amplify/AppSync による TODO アプリ開発
      • Reactのセットアップ
      • Amplifyのセットアップ
      • GraphQLAPIの追加
    • 3.3 React側の実装
      • ReactとAmplifyの連携
      • TODOを追加する
      • TODOの一覧を表示する
      • TODOの更新と削除
  • 第4章 在庫管理アプリーケーションを作ろう
    • 4.1 フロントエンドのセットアップ
    • 4.2 Amplifyによる各AWSリソースのセットアップ
  • 第5章 API
    • 5.1 GraphQLAPIの追加
  • 第6章 認証機能の開発 47
    • 6.1 AmplifyとReactとの連携
    • 6.2 ログイン画面のコンポーネント作成
    • 6.3 認証イベントを購読するSubscriptionの実装
    • 6.4 ルーティングの追加
    • 6.5 ヘッダーコンポーネントの実装
    • 6.6 サインアウト機能
  • 第7章 GraphQL/Queries/Mutations によるモデルの CRUD 処理
    • 7.1 StorehouseモデルのCreate処理
    • 7.2 React Context API と useContext を使ったデータの再利用
    • 7.3 Storehouse モデルの Read 処理:Subscription による一覧表示
    • 7.4 子モデル(Product)のCRUD処理
      • Storehouseモデルの詳細画面
      • Productモデルの新規追加
      • Productモデルの一覧取得・更新・削除
  • 第8章 React Hooks useContext・useReducer によるサブスクリプション機能
    • 8.1 Product モデルの CRUD 処理を購読するサブスクライバーの実装
      • Create処理のサブスクライバー
      • Update処理のサブスクライバー
      • Delete処理のサブスクライバー
      • 副作用のクリーンアップ
    • 8.2 useReducer によるサブスクリプション実装のリファクタリング
  • 第9章 デプロイ
    • 9.1 S3へのデプロイ

コメント

この書籍自体は、AWSのFirebase(GCP)的な立ち位置のAmplifyを用いた開発についての書籍になります。

今ではFirebaseを個人で使うことも業務で使うことも当たり前になっていると思いますが、Amplifyは、それのAWS版だと思えば理解が早いかと思います。

Firebaseと同様にMBass的な立ち位置で、Web開発でも簡単に使用することができ、ホストディングまでも簡単に自動で行ってくれます。

クラウドサービスでは圧倒的な実績を誇るAWSなので、Amplifyはこれからどんどん導入実績が増えていくかと思うので、学んでおいて間違いなしです!

フロント側は、Reactを用いるため最低限のReactの知識は合ったほうが良いと思いましたが、その他のAmplifyAppSyncなどは、書籍の手順通りに進めて行けばある程度理解できるはずなので、入門としても良いかと思います。

Serverless GraphQL APIs with Amazon’s AWS AppSync (API-University Series)

AppSyncの日本語の書籍はまだないようでした。

残念ながら僕はまだこの書籍を読めていないのですが、AppSyncの学習用途では結構良いかなと思ったので、一応紹介しておきたいと思います。

(当然英語の書籍なので、英語に拒否反応がない方のみとなりますが)


Serverless GraphQL APIs with Amazon’s AWS AppSync (API-University Series)

書籍以外から入門する

今では様々な記事がネットに転がっているので、それを参照しながら学習するというのも良いと思います。

無料で体系的に学習できる教材はとしては以下のHOW TO GRAPHQLがあるので、英語でも問題ない方はまずこれで入門してみるのもアリです。

参考サイト

まとめ

今回は、GraphQLに入門するためのオススメ書籍についてまとめました!

最近ますます導入されてきたイメージのあるGraphQLですので、Webやネイティブアプリ開発に携わっている方は、是非入門してみると良いかもしれません。

Note一覧

コメント