宮水の日記

宮水の日記

主に書評や資格取得について記事を書いています。

「初めてのGraphQL」を読みました

初めてのGraphQLを読みました。(どうでもいいけど、本当は去年の12月くらいに読んでメモブログを書いていなかったので投稿。)

なぜ読んだのか

  • 仕事でGraphQLとApolloを使うことになり、この二つを包括的に学ぶのに良さそうな本だったから。
  • この本が日本語で書かれていたから。

対象読者

  • GraphQL初学者
  • アプリケーション開発のアーキテクチャAPI設計に興味を持ち始めた中級以上のWeb開発者
  • 初級のWeb開発者であっても、GraphQLに興味があれば役に立つ

この本で学べること

  • GraphQLの概要と歴史
  • グラフ理論について
  • GraphQLのクエリ・ミューテーション・スキーマ設計について
  • GraphQLを用いたWebサービスの実装を一通り(GprahQL サーバー/GraphQL クライアント)

本の面白かったところ

GraphQLとは

APIのための問い合わせ言語。データベースに問い合わせる為に開発されたSQLの考え方をインターネットに適用したもの。
SQLのクエリはデータベースに対して行われるが、GraphQLのクエリはAPIに対して行われる。

Railsを使うエンジニアにとって馴染みあるRESTとは違うところ

RESTの課題は以下の通り

  • 余分なデータを取得しすぎてしまう
  • N+1的なものが起きやすい
  • フロントに新しい機能が追加されると新しいエンドポイントが必要になることが多い

GraphQLなら、

  • 必要なフィールドだけを指定できる
  • 一度のリクエストで必要なデータだけ取得できる
  • 単一のエンドポイントで済む
イントロスペクション

GraphQL Playgroundで確認できる充実したGraphQLのドキュメントは、イントロスペクションを利用して実現されている。

以下のようなクエリを打つと、

query {
  __schema {
    types {
      name
      description
    }
  }
}


こんな感じでAPIスキーマを取得できる

f:id:kattyan53:20210322132848p:plain
個人開発のリポジトリで実行してみたらスキーマいっぱい出てきた

GraphQLサーバーの実装

本書ではexpress-graphqlを使用。
私はgraphql-rubyを使うので、結構読み飛ばしちゃった。
わかりやすいQiitaがあったけど、忘れちゃった...。

GraphQLクライアントの実装

様々なGraphQLクライアントがある中で、Apollo Clientについて書かれていた。
私はサーバーサイドメインになりそうだったので、一旦読み飛ばしちゃった。

Apollo Clientはキャッシュが優秀らしい...?
Apollo Clientめっちゃ難しかったので、個人開発では、もうちょっとシンプルらしいurqlっていうのを使ってみてます。
qiita.com

フロントのタスクをやりそうになったら、また読んでいこうと思います🙏

まとめ

GraphQLについて概要、歴史、文法的なところ、サーバー、クライアント...と、広く浅く、包括的に学べて良かったです!

これは会社の人から教えてもらったのですが、GraphQLサーバーとGraphQLクライアントに関しては結構情報が古かったりするそうです。
私の場合、さらっと読み流す程度にして、自分が使う予定のgraphql_hogehogeや、hogehoge clientの公式ドキュメントを読むようにしました。

ここまでお読みいただきありがとうございました!