Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GraphQL スキーマで支えるレジアプリ開発 / "hey Talk" Engineers #4

563dea298ceddda314223503683a66e3?s=47 ta-chibana
August 31, 2021

GraphQL スキーマで支えるレジアプリ開発 / "hey Talk" Engineers #4

563dea298ceddda314223503683a66e3?s=128

ta-chibana

August 31, 2021
Tweet

Transcript

  1. GraphQL スキーマで支える レジアプリ開発 Takuma Chibana 2021-08-18 "hey Talk" Engineers #4

  2. 自己紹介 • 知花 卓磨 • https://github.com/ta-chibana • バックエンドエンジニア • STORES

    レジ や EC の 開発をやっています
  3. 「STORES レジ」を リリースしました!

  4. 「STORES レジ」を 支えるエンジニアリング

  5. None
  6. • レジ用 API は EC(Rails)のコードベースに乗る形で実装 • graphql-ruby を使って実装 • GraphQL

    スキーマやそれを使った開発の進め方について話します
  7. なぜ GraphQL ? • アプリチームから GraphQL を使いたいという相談 • API スキーマ・ドキュメントの管理がいい感じにできそう

    (検討当時は EC の API スキーマが管理されていなかった) • その他 GraphQL にすることによるメリット (もちろんデメリットも) • バックエンドとして利用するにあたって 大きな問題はなさそうだと判断
  8. アプリチームとどのように お仕事を進めたか

  9. 「初めての GraphQL」読書会をやった • 初めて GraphQL に関わる メンバーが多かった • レジの開発に関わるメンバーと そうでないメンバー数名が

    参加した
  10. 「初めての GraphQL」読書会をやった API 開発に関する思い出が 語られるなどした

  11. API スキーマの設計・共有方法

  12. API スキーマの設計・共有方法 1. バックエンドで API のインターフェースを設計・実装する (この間アプリチームは UI の実装を並行して進める) 実装

  13. API スキーマの設計・共有方法 2. GraphQL::RakeTask を利用した rake タスクを用意し 定義された rake タスクを実行して実装からスキーマを生成する

    bin/rails graphql:schema:idl
  14. API スキーマの設計・共有方法 3. アプリチームは生成された schema.graphql ファイルを 利用して開発を進める 開発に利用

  15. EC での API 開発の流れと比較する

  16. EC での API 開発の流れ 1. フロントエンドエンジニアと議論してスキーマを定義する

  17. EC での API 開発の流れ 2. スキーマ定義にあうように API を実装する

  18. 両者の違い レジ • 実装から始める • スキーマは実装から生成 • スキーマの設計は バックエンドエンジニアが行う EC

    • スキーマ定義から始める • スキーマは Stoplight Studio などで YAML を作成して定義 • スキーマの設計は バックエンド・フロントエンド 両チームで議論して行う
  19. Q. やってみてどうだった?

  20. Q. やってみてどうだった? • A. 良かったと思う • スキーマの自動生成が楽で、API 開発を素早く進めることができた • 実装とスキーマ定義に乖離がなくて良い

    • API スキーマの用語で議論できた
  21. Q. スキーマ定義が最初ではない?

  22. Q. スキーマ定義が最初ではない? • A. はい • アプリチームメンバーはこれまで EC と関わったことがない •

    EC のことを知っているバックエンドチームのメンバーで 設計した方が早そうだと判断 • 不明点あれば適宜コミュニケーションをとった • 両チームとも要件定義段階で関わっていた & ドキュメントもあるので認識のズレは起こりづらかった • 仲が悪くならなかった
  23. Q. スキーマ定義から始めることは できない?

  24. Q. スキーマ定義から始めることはできない? • A. いいえ • graphql-ruby の DSL を使いながら議論して

    先にスキーマ定義を作ることはできそう(今回はやっていない) 実装経験なくても理解はできそう ...? ↑ココ
  25. Q. スキーマ生成タスクの実行漏れは?

  26. Q. スキーマ生成タスクの実行漏れは? • A. テストで防いでいます • この辺りは graphql-ruby のドキュメントを参考にしました https://graphql-ruby.org/testing/schema_structure.html

  27. まとめ • スキーマが実装から生成できるので乖離なく、 スキーマ定義と実装が同時にできるので開発速度向上が狙えた • 生成されるスキーマ・ドキュメントによって共通言語が作られ、 コミュニケーションコストが下がった • 必要になったらスキーマ定義から始めることもできそうなので そのうち試してみても良さそう

  28. ありがとうございました!