この記事はGraphQL Advent Calendar 2020の17日目の記事です。
前回の記事は @Quramy さんの Incremental Data Delivery with GraphQL defer and streamでした。
この記事の経緯
私が GraphQL という言葉を最初に認識したのは2017年頃だと思います。
当時の GraphQL に関しての知識は API の I/F というより
NoSQL のデータ取得のクエリの書き方というように認識していました。
(多分何かの記事のチラ見で勉強不足でした)
2020年になり、色々な文脈で GraphQL という言葉を聞く機会が増えてきて
いま GraphQL を利用し始めるなら?と思いプラクティスをまとめようと考えました。
あなたの目線から GraphQL の可能性を覗いてみて、
今日から GraphQL を使い始めてみませんか。
React.js を利用するエンジニアから見た GraphQL
React.js は現在のスタンダードなフロントエンド技術の一つですよね。
React.js で GraphQL はどう使えるのかと言うと、
Apollo Client を利用することで劇的に便利になります!
接続する API が GraphQL によって通信可能なら
たった数行でリクエストが実装できます。
更に Apollo Client はキャッシュ機構が強力で、
データの取得元をインメモリと外部リソースの区別を意識せずに、
Redux の Store のような state 管理としての利用が可能です。
少し気になってきましたか?是非コードを書いてみましょう
https://www.apollographql.com/docs/react/get-started/
バックエンドを開発するエンジニアから見た GraphQL
GraphQL は、ほとんどの言語でサポートされています。
きっとあなたが今日書いた言語でも。
https://graphql.org/code/
もしデータベースに NoSQL を利用していて、あるキーに対して JSON が返るような設計をしているなら
そこでも GraphQL の出番です。
そして何より、クライアント開発者に graphql-code-generator で作成された
インターフェースを渡して、その形に則った開発を進めることで、
おそらく Swagger を利用するより高速に、スキーマ駆動開発が可能です。
※ Node.js の選択肢があるなら、個人的には NestJS がおすすめです。モダンな技術スタックを採用したフレームワークで、もちろん GraphQL も喋れます。
AWS を使うエンジニアから見た GraphQL
AWS 文脈で GraphQL といえば AppSync ですね。
これは GraphQL に特化した AWS のサービスで、
バックエンドをほとんど意識せずに開発を進めることができ、とても便利です。
最近はこれを使うために GraphQL を学習する意味がある、と個人的に感じます。
WebSocket による双方向通信の実装や認証などもこれ一つでできるのは素晴らしいです。
公式ドキュメントのクイックスタートから、是非試してみて下さい。
https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/quickstart.html
アーキテクトから見た GraphQL
マイクロサービスな設計になる際、
スキーマ駆動開発という選択肢は強く惹かれる要素かと思います。
スキーマの定義も、 gRPC ほど厳格ではなく、 Rest API ほど緩くないと感じます。
コンポーネントによってページングのクエリが異なる? GraphQL で統一しちゃいましょう。
Facebook 発 OSS で、運用期間までメンテナンスが残りそうなのもポイントですね。
既存の Rest API と混ぜにくいという課題もありましたが、
GraphQL Mesh というメッシュサービスも開発されています。
https://qiita.com/G-awa/items/dba92983ba03ee8daec6
まとめ
もう GraphQL は web 開発の随所に存在しています。
現在開発しているスキーマを変更しなくても、
React.js 単体でも、 AWS クライアント単体でも GraphQL の利用が始められます。
まだまだ日本だと開発に採用しているチームが少ない印象ですが、
これから利用ケースが増えて便利になることは間違いないと思います。
是非 GraphQL 取り入れてみましょう!