虎の穴開発室ブログ

虎の穴ラボ株式会社所属のエンジニアが書く技術ブログです

MENU

『初めてのGraphQL』を読んだ感想

f:id:toranoana-lab:20200207110114j:plain

皆さんこんにちは、とらのあなラボのY.Fです。

オライリー書評シリーズは、今回で第5弾になります。

(前回の書評はこちら) toranoana-lab.hatenablog.com

今回の記事では、2019年11月のオライリー定期購読で届いた、『初めてのGraphQL』を読んだので感想を書きたいと思います。

読んだ理由

APIに限らずWebアプリケーションを作る上ではRESTの考え方はもはや基礎知識になっているかと思います。
ただ、個人的にはRESTについては以下のような認識を持っていました。

  • 通常のCRUD処理から外れるとルーティングなどが悩ましい
  • 複雑に絡み合ったデータを扱おうとした時にURLの階層が深くなりがち
  • JSONを返すAPIに汎用性をもたせると巨大なJSONが返されたりするケースがある

対して、最近GraphQLを採用したとか、ReactやVueと組み合わせてやってみたという記事をよく見かけるようになってきました。
オライリーの定期購読でちょうどGraphQL絡みの本が届いたのもあって、RESTとの違いや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.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 次の段階にすすむ

より詳細な目次は以下をご覧ください www.oreilly.co.jp

本の概要

目次を見ていただくとわかるように、API自体の歴史やGraphQLを使う利点から始まり、最終的にはGraphQLを利用したアプリケーションを作成していく流れになります。
2章では、前提知識としてのグラフ理論まわりの紹介などもあり、GraphQLはなぜ"グラフ"なのだろうかと疑問に思っている方にもわかりやすく書かれています。
実装に関しては、Node.jsでのサーバー側実装と、Reactを利用したフロント実装どちらも書かれており、これからサービスにGraphQLを利用したい方にとっても読む価値がある本となっています。

GraphQLについてのサイトもあるので、実際に触ってみたい方や、サービスに導入してみたい方は目を通しておくとよいのではないでしょうか? graphql.org

全体の感想

はじめに、全体の感想に付いて述べておきます。

個人的にはこの本を読んで、サービスにもGraphQLを取り入れてみたいなと思いました。
本の最初にREST APIが抱えている問題として巨大なJSONが作られてしまうケースや、JSONが過小すぎて何回もデータを取り直す必要があるケースが紹介されており、自分が抱えている事例と照らし合わせて、納得感がある導入になっていたと思います。

また、本書のサンプルはNode.jsとReactで実装されていますが、内容自体は汎用的なものなのでお好きな言語で試してみることもできると思います。
私は、Rust + Vueでお試ししてみたので、また別記事で紹介したいと思います。

一通り読むことで、GraphQL導入のはじめの一歩になると思います。

1章 GraphQLへようこそ

GraphQLの概要についての章です。
この章では今までのAPIの仕組みについて述べられたあとに、現状最も使われているであろうRESTについて、問題点が挙げられています。
RESTを利用することでよく発生する、巨大なJSON、過小なJSON、複雑化するエンドポイントについて、GraphQLではどうなるか説明されています。

また、この章で書かれている通り、REST vs GraphQLという構図ばかりではなく、REST APIと共存できる点については注意が必要かと思います。 GraphQLとは何か、利用事例など知りたい方にとってはこの章が最も大事になるかと思います。

2章 グラフ理論

この章はななめ読みでも良いと感じました。
有向グラフ、無向グラフ程度は抑えておく必要があると思いますが、具体的な数学的背景などについては無理に理解する必要はないかと思います。
無理やり理解しようとして難しいと思ってしまうよりは、わからないならわからないなりに次へ進むことがおすすめです。

3章 GraphQLの問い合わせ言語

あくまでGraphQLは仕様に過ぎませんが、本章ではその仕様についての説明がされています。
データを取得するためのQuery、更新のためのEnum、各データの型を表すためにEnumなどなど、GraphQLを構築するために必要な概念について説明されています。

具体的なリクエストとそれに対するレスポンスをあわせて説明されているため、エンジニアにとってはすんなり理解できると思います。
本書の中ではスターウォーズを題材にした公開APIを利用しているので、こちらも見てみると雰囲気がわかると思います。
graphql.org

4章以降

4章以降とまとめてしまいますが、基本的には以降は具体的な実装の紹介になっています。
本書ではJavaScriptを利用してAPIを組み立てていきますが、3章にてGraphQLを仕様ベースで説明されているので、各自お好きな言語を利用して写経してもさほど大変ではないと思います。

また、クライアントサイドもReact + Apolloという組み合わせで紹介されていますが、こちらもGraphQLの仕様ありきなので、Vueなどで置き換えるのは簡単なのではないかと思います。

最後に

繰り返しになりますが、本書はGraphQLがどんなものか知りたい、実際に使ってみたいという方の、はじめの一歩としておすすめの一冊になります。
興味のある方はぜひお手にとって読んでみてください!

P.S.

初めて札幌で採用説明会を実施することになりました!近隣にお住みの方はぜひお申し込みください! yumenosora.connpass.com

今年もLT会を開催します! yumenosora.connpass.com

定期的に行っている秋葉原説明会についても今年も開催します!興味あるので話を聞きに行きたい人も、応募する前に話を聞きたい人も是非お越しください! yumenosora.connpass.com

最後に、カジュアル面談は随時受付中ですので、気になる方はぜひお申し込みください yumenosora.connpass.com