初めての GraphQL
ハジメテノグラフキューエル
Web サービスを作って学ぶ新世代 API
- 著者:
- Eve Porcello / Alex Banks / 尾崎 沙耶 / あんどう やすし(エバ ポロッセロ / アレックス バンクス / オザキ サヤ / アンドウ ヤスヒ)
- 出版社:
- オライリー・ジャパン
- 出版日:
- 2019年11月13日頃
- ISBN:
- 9784873118932
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
技書の森解説
REST の API でデータを取りすぎたり、逆に足りずに何度もリクエストを重ねたりする問題に対して、GraphQL という別の設計を基礎から学び、実際に Web サービスを組み立てるところまで進む入門書が『初めての GraphQL』 (Eve Porcello、Alex Banks 著、尾崎 沙耶、あんどうやすし 訳、オライリー・ジャパン、2019 年 11 月 13 日発行) です。原書は Learning GraphQL で、副題は「Web サービスを作って学ぶ新世代 API」です。版元の紹介では、GraphQL を 2015 年に Facebook によって公開された、クエリ言語を用いてデータを操作する REST とは異なるアプローチのアーキテクチャと位置づけ、その概要と開発方法を実装例に沿って紹介し、認証やファイルアップロードといった実践的なトピックにまで踏み込んだ実用的な入門書と案内しています。
全 7 章の構成、なぜ GraphQL かから実戦投入まで
1 章「GraphQL へようこそ」は、言語仕様と設計原則、誕生の経緯に続いて、RPC、SOAP、REST というデータ通信の歴史をたどり、REST の課題として過剰な取得、過小な取得、エンドポイントの管理を挙げます。2 章は「グラフ理論」で、用語と歴史、木というグラフ、実世界のグラフを扱います。3 章で問い合わせ言語 (クエリ、ミューテーション、サブスクリプション、イントロスペクション、抽象構文木) を学び、4 章「スキーマの設計」で型定義、一対一から多対多までの接続、引数、入力型と返却型、スキーマのドキュメント化へ進みます。5 章でサーバー、6 章でクライアントを実装し、7 章「GraphQL の実戦投入にあたって」でサブスクリプション、ファイルアップロード、セキュリティ、次の段階への進み方をまとめます。巻末の付録 A は Relay の各仕様の解説です。まず考え方と言語を押さえ、そのあとで設計と実装に移る順序と読めます。
REST の課題とクエリ 1 本で取る設計
REST API では、資源ごとに URL を用意し、サーバーが返すデータの形はエンドポイントごとに決まっています。画面に必要な項目が一部だけでも決められた形のまま全部を受け取る過剰な取得と、1 回では足りずに関連する資源を何度も取りに行く過小な取得は、この構造から生まれる問題です。GraphQL では、サーバーが型の付いたスキーマで取得できるデータの全体を公開し、クライアントは必要な項目と関係の深さをクエリで指定して 1 回で受け取ります。本書が実装の前に 2 章をグラフ理論に割き、4 章で接続の種類を一対一、一対多、多対多と分けて設計させるのは、データ同士の関係をグラフとして捉えることが、この設計の出発点だからと読めます。一方で、クライアントが自由に深い問い合わせを書けることは、サーバーの負荷を読みにくくする面も持ちます。7 章のセキュリティの節がリクエストタイムアウト、データの制限、クエリ深さの制限、クエリの複雑さ制限を並べているのは、この性質への備えです。
Apollo と React、MongoDB で組む写真共有の題材
実装の章では、5 章でプロジェクトのセットアップからリゾルバ、apollo-server-express、MongoDB を使ったコンテキストへのデータベースの追加へ進み、GitHub の OAuth を使った認可とユーザーの認証までを組み込みます。6 章はフェッチリクエストと graphql-request による API の利用から始まり、Apollo Client を React と組み合わせた画面の実装、ユーザー認可、フェッチポリシーやキャッシュの永続化と更新を扱います。7 章では GraphQL のサブスクリプション によるリアルタイムの通知と、Apollo Client を使った写真の新規投稿を通じたファイルアップロードを実装します。版元の正誤表では題材が写真共有アプリケーションと表記されており、サーバーとクライアントの両側を同じ題材で通して作る構成です。各ライブラリは 2019 年時点の構成を前提にしているため、別の版で試す場合はそれぞれの公式ドキュメントで手順を確かめながら進める必要があります。
GraphQL の導入を検討する Web 開発者に向く一冊
目次に出てくるサーバーのライブラリは apollo-server-express の 1 つなので、別の言語やフレームワークで導入する人は、本書で設計の考え方を押さえたうえで、その言語のライブラリの資料を併用することになります。REST の API を運用していて、取りすぎと取り足りなさ、エンドポイントの増加に悩んでいる人、あるいは GraphQL を採用するかどうかを判断する材料を設計と実装の両面から集めたい人にとって、考え方から認可、キャッシュ、セキュリティまでを 1 つの題材で通して体験できる本書は、検討の出発点として手に取る価値があります。
言及した記事 (15 件)
GraphQLのスキーマと型定義
♡ 351WebAPI, API, REST-API, GraphQLLighthouse(GraphQLサーバー)の具体的な利用方法について
♡ 49PHP, Laravel, Datadog, GraphQLRedwoodJSでTodoアプリを作ってみたので、所感をまとめてみる。
♡ 16React, GraphQL, prisma, RedwoodJS【Rust】GraphQL API Serverを作ってみる話。(1/?) ~導入編~
♡ 16PostgreSQL, Rust, juniper, GraphQL, actix-webモダンスタックでつくるWebアプリケーション 学習ロードマップ 2022/10
♡ 13JavaScript, Node.js, Web, React, 初学者向けRelayにのっとったGraphQLを、GAE/Goで扱ってみた
♡ 11Go, AppEngine, GraphQLHot Chocolate?何それ美味しいのって美味しいに決まってるだろ!
♡ 7C#, GraphQL, HotChocolateGraphQLのoperation nameとmutation fieldの違いを整理する
♡ 6初心者向け, GraphQLプログラミング2年目の2024年に勉強した技術・書籍の振り返り
♡ 6Ruby, Python, プログラミング, TypeScript, エンジニア「初めてのGraphQL」の内容の実装をNestjsでやってみた
♡ 4graphql, typescript, nestjs
関連記事
体系的に学ぶ 安全な Web アプリケーションの作り方 第 2 版は初版と何が違うか - 買い直し判断ガイド
通称「徳丸本」こと体系的に学ぶ 安全な Web アプリケーションの作り方 第 2 版 (2018 年) と初版 (2011 年) の違いを出版社公表の改訂内容から整理。章の削除 / 新設 / 追加点の一覧と、初版所有者が買い直すべきかの判断基準を解説します。
Python 本の選び方 - 独学の最初の 1 冊から実務品質まで
Python 本の選び方を「動機」から逆算して整理。プログラミング未経験の最初の 1 冊、業務自動化に直結する本、型ヒントとコード品質で実務水準へ進む本まで、2026 年 8 月時点の定番を独学ルートに沿って解説します。
技術書を読む順番の戦略 - 複数冊を組み合わせて理解を加速させる
技術書を 1 冊ずつ読むのではなく、複数冊を戦略的に組み合わせることで、1 冊では届かない理解の深さと広さに達する方法を解説します。
関連用語
JSX
JavaScript 内に HTML ライクな構文を記述し、UI コンポーネントを宣言的に定義する React の拡張構文
React
コンポーネントベースの UI ライブラリで、宣言的な記法と仮想 DOM の差分計算で UI の更新を扱う
Next.js
React ベースのフルスタックフレームワークで、SSR、SSG、API Routes を統合的に提供する
Vue.js
学習しやすさと柔軟さを兼ね備えたフロントエンドの JavaScript フレームワーク
JavaScript
Web ブラウザーで動作する言語として生まれ、今やサーバーやアプリ開発まで担う汎用言語
Hooks
React の関数コンポーネントに状態管理や副作用などの機能を追加する仕組み