GraphQLを使った所感

GraphQLを仕事で使用し始めてはや4ヶ月ほど経ちました。扱いにも慣れてきたので一度アウトプットしておきます。
そもそもGraphQLとはなんぞやって人のために基本知識から書いていきます。

GraphQLとは

2015年に公開されたライブラリでfacebookによって開発された、クエリランゲージでの一つでRESTの代用として使用することが出来ます。
GraphQLはクエリとスキーマの構成で成り立っています。
クエリに関しては3つのパターンが存在しています。

  • Query
  • Mutation
  • Subsscribe

RESTのようにGET, POST, PUT, DELETEなどのアクションは存在しておらず、これらがアクションの役割をカバーします。
各役割としては以下

Query

RESTで言うGETにあたります。Queryは基本的にデータを取得するときに使用します。

Mutation

更新処理などのことを指しており、値の変更処理をするときに使います。
なので新規登録やデータの更新、削除などはMutationを使用することでDBの値を扱えます

Subscribe

通知処理などに使用します。Webプッシュなどの通知処理を実装する際に取り扱います。

一方スキーマに関してですが、これらはJSONの構造を定義してるものです。
RESTに例えるのならばエンドポイントの役割をしています。

上記が基本的なGraphQLの概念になります。

メリット&デメリット

実際の開発業務においてGraphQLを使うことのメリットとデメリット

メリット

  • データの構造が明確
  • RESTを扱うよりも記述量が減る
  • ジェネレータを使用すると自動でコードを生成してくれる
  • 複雑なリクエスト処理が可能
  • エンドポイントが一つに絞られるためテストが楽
  • 複雑なリクエストでも簡潔にリクエストが送れる
  • PlayGroundが便利!!

デメリット

  • エンドポイントが一つに絞られることによってパフォーマンスの分析が難しい
  • 大容量バイナリを送るのが苦手、BSONなどのメディアデータには不向き
  • GraphQLクライアントの概念習得に時間を要する
学習コスト

個人的な見解としてGraphQLそのものの学習コストは低いです。
RESTで開発した経験があれば十分に理解できます。

ですがGraphQLを扱うためのクライアントでの学習コストは少し高いように思います。なのでサーバーサイド初学者がいきなり使うのはかなり敷居が高いのではないでしょうか?

ここからは自分の思ったことになるのですが、実際に、Apollo Clientを実務で使用していて、慣れるまでに時間がかかりました。
最近になって何がどう動いているのか理解ができるようになりましたが、最初触った時は不透明な箇所が多い印象でかなりブラックボックス化していました。
Apollo Clientも比較的新しいライブラリになるので情報もなかなか見つからずAPIを正しく使うにはどうすべきかという点で時間がかかりました。

RESTとの比較

メリットでも上げたようにエンドポイントが一つに絞られるという点ではGraphQLが優れているように思います。複雑なリクエストでも簡潔に行えるので個人的にはRESTよりも使い勝手がよいと思いました。
またPostmanなどのアプリを入れずともPlayGroundの立ち上げがプロジェクト内で行えるので開発メンバーが共通の認識、かつ同じ環境でできるという点でよいです。
また生成されたクエリをドキュメントとして表示してくれたりするのでチームでの開発向きです。

反面、デメリットで書いた通り、大容量のバイナリデータを扱えないのでNoSQLに画像データ等を保存した場合などはRESTを使用するべきでしょう。
情報の観点からしてみてもまだまだGraphQLは成長段階にあるように感じました。

RESTで構築を行うのか、GraphQLを導入するのかはプロジェクトに依存します。
作るものに合わせて適宜、適切かどうかを判断して導入してください。

まとめ

自分的にはGraphQLは学習する価値は十分にあったのと、注目もされているライブラリなのでやっておいて損はないなぁという印象。
GithubAPIもからGraphQLを対応させたので、経験として持っとくだけででも今後仕事する上で役立つのではないだろうか。

関連記事