数少ない日本語のGraphQL入門書である「初めてのGraphQL」を読んだ!
業務でGraphQLは扱っているものの、体系的に勉強したことはなく知識の抜け漏れがあると感じたので読んでみることにした。情報が古くハンズオンを動かすのは大変そうだったため、前半の概念に関する説明は厚く読んで後半は流し読みした。
読んでみて、GraphQLが生まれた歴史的経緯から、基礎的な概念、実践で利用する上で気をつけるなど網羅的に学ぶことができた。網羅的に学ぶことができるため、自分がわかっている部分とわかっていない部分が明確になった。別のサイトや書籍でハンズオンを終えたあと、改めて概念を学ぶために読むと良さそうだと感じた!
目次
- 1章 GraphQLへようこそ
- 1.1 GraphQLとは
- 1.1.1 GraphQLの言語仕様
- 1.1.2 GraphQLの設計原則
- 1.2 GraphQLの誕生
- 1.3 データ通信の歴史
- 1.3.1 RPC
- 1.3.2 SOAP
- 1.3.3 REST
- 1.4 RESTの課題
- 1.4.1 過剰な取得
- 1.4.2 過小な取得
- 1.4.3 RESTのエンドポイント管理
- 1.5 GraphQLの実情
- 1.5.1 GraphQLのクライアント
- 1.1 GraphQLとは
- 2章 グラフ理論
- 3章 GraphQLの問い合わせ言語
- 4章 スキーマの設計
- 5章 GraphQLサーバーの実装
- 6章 GraphQLクライアントの実装
- 7章 GraphQLの実戦投入にあたって
- 付録A Relay各仕様解説
- A.1 Global Object Identification
- A.2 Cursor Connections
- A.3 Input Object Mutations
- A.4 Mutations updater
GraphQLの誕生について
GraphQLがFacebookによって作られたことは有名な話だと思うが、どのような課題があって作られたかまでを知っている人は多くはないのではないか(自分は知らなかった)。
当時のFacebookのモバイルアプリはRESTfulなAPIサーバーで構成されていたが、パフォーマンスに課題があり度々クラッシュしていた。そのような性能上の課題とデータ構造の要件を満たす解決策としてGraphQLが生まれた。また、いいね数をリアルタイムで取得するためにsubscription機能が生まれた。
このように技術が生まれた背景を知ることは、思想を知る上でも重要かもしれないと感じた。
GraphQLに関する基本的な説明
GraphQLに関する基本的な説明が網羅されていた。クエリに関する説明では「大学向けのスケジュール管理アプリケーション」など具体的な例が示されておりわかりやすかった。読んでみて、union型やinterfaceを上手く扱えていないと感じ、今後の課題として積んだ。
実践投入にあたって
ここまではGraphQLの良い部分が中心に語られてきたが、実践における課題や気を付けるべきことも記載されていた。 課題の1つとして、GraphQLが柔軟であるがゆえにクライアントが自由にデータを取得できてしまい、それが脆弱性に繋がったり大量のデータをリクエストすることでサーバーリソースを圧迫することが挙げられていた。それに対する解決方法として、リクエストタイムアウトの設定、レスポンスデータ量の制限、クエリの深さを制限、クエリの複雑さ制限などいくつかの方法が提案されていた。
最後に
今回は「初めてのGraphQL」を読んだ。賛否両論ある本書だが、自身の不足している知識を把握する上でも大いに役立った。引き続きGraphQLに関するキャッチアップは続けていこうと思う。