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

マルチレポだってスキーマ駆動開発がしたい!

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for mimu mimu
July 01, 2024

 マルチレポだってスキーマ駆動開発がしたい!

Avatar for mimu

mimu

July 01, 2024
Tweet

More Decks by mimu

Other Decks in Programming

Transcript

  1. スキーマ駆動開発とは? API のスキーマを最初に定義して、定義をもとに FE や BE の開発を進める開発手法 はじめに API のスキーマ定義をするため、FE

    <-> BE 間における API 仕様のずれを防ぐ ことができる FE は API スキーマを参考に、BE の実装を待たずして作業を進められる(MSW 等のモ ックを利用)
  2. 案件での課題と背景 ①API 定義に Open API を利用しているが、API の型定義(呼び出し処理等)を自前で作 成している 作成・管理コストが都度発生 ②FE

    と BE で Repo が独立しており(マルチレポ) 、同じ型定義を別々に作成が必要 FE と BE での定義のずれ、認識齟齬による手戻り
  3. 背景と課題 ①API 定義に Open API を利用しているが、API の型定義を自前で用意している 作成・管理コストが都度発生 型定義の自動生成ライブラリを利用して自動化したい ②FE

    と BE で Repo が独立しており、別々に作成が必要 FE と BE での定義のずれ、認識齟齬による手戻り Npm パッケージ化して FE と BE の Repo で共通化させたい
  4. ① クライアントコードの自動生成 ライブラリ選定 自動生成用のライブラリの選択肢はいくつかあるが今回は Orval を選定 API のクライアントコードだけでなく fetching ライブラリ(Tanstack

    Query, SWR) のカスタム hooks も自動生成可能 メンテナンスが活発 ※ Issue をあげたところ翌日には PR が上がってスムーズにマージされた
  5. ② マルチレポでのパッケージ共有 Npm パッケージ管理・公開には GitHub Packages を利用。 パッケージ化したコードを public または

    private にホストして利用することができる GitHub 公式のサービス 特定の org 内でのみ利用可能なパッケージをホストすることができる npm や RubyGems などの各言語の標準的なパッケージ管理サービスをサポート
  6. ② マルチレポでのパッケージ共有 パッケージの公開・利用手順は 記事が詳しい。 (本 LT では割愛) GitHub Packages の

    npm レジストリを使って、社内 org 用のプライベートパッケージを公開 する手順とインストールする手順
  7. 導入手順 パッケージ公開 新規 Repo 作成。Orval 等インストール、セットアップ PAT(Github Personal Token)作成 パッケージ公開の

    CI 整備 パッケージのバージョン更新の基準にはセマンティックバージョニングを利用し、 PR の Label でどの � バージョンの更新かを判定する方針をとる PR に適切な Label が付与されているかをチェックする GHA は以下 バージョンを更新し、パッケージを公開する GHA は以下
  8. 今後の展望 FE・BE の既存コードのリファクタ(自作の型定義の置き換え) Tanstack Query のカスタム Hooks コードを自動生成したものに置き換え API の

    Mock データ(MSW)コードも自動生成したものに API スキーマを追加すると、型定義&API 処理のカスタム Hooks&Mock データが全て自 動生成されてスキーマ駆動開発が実現(理想)
  9. EOF