Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
マルチレポだってスキーマ駆動開発がしたい!
Search
mimu
July 01, 2024
Programming
0
56
マルチレポだってスキーマ駆動開発がしたい!
mimu
July 01, 2024
Tweet
Share
More Decks by mimu
See All by mimu
TypeScriptのバックエンド開発について
mmrakt
0
64
lt.pdf
mmrakt
0
26
npm/Yarn/pnpmゆるふわ解説
mmrakt
0
1.2k
Type Script型パズル(?)超入門
mmrakt
0
78
まだWebpackで消耗してるの?
mmrakt
0
88
Other Decks in Programming
See All in Programming
ゲームの物理 剛体編
fadis
0
350
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
170
まだ間に合う!Claude Code元年をふりかえる
nogu66
5
850
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
390
LLMで複雑な検索条件アセットから脱却する!! 生成的検索インタフェースの設計論
po3rin
4
840
脳の「省エネモード」をデバッグする ~System 1(直感)と System 2(論理)の切り替え~
panda728
PRO
0
100
Cell-Based Architecture
larchanjo
0
130
FluorTracer / RayTracingCamp11
kugimasa
0
240
モデル駆動設計をやってみようワークショップ開催報告(Modeling Forum2025) / model driven design workshop report
haru860
0
270
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
10
1.3k
大規模Cloud Native環境におけるFalcoの運用
owlinux1000
0
130
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
70k
Being A Developer After 40
akosma
91
590k
Optimizing for Happiness
mojombo
379
70k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
Practical Orchestrator
shlominoach
190
11k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.5k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
1
110
4 Signs Your Business is Dying
shpigford
186
22k
Balancing Empowerment & Direction
lara
5
810
GitHub's CSS Performance
jonrohan
1032
470k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
390
Bash Introduction
62gerente
615
210k
Transcript
マルチレポだってスキーマ駆動開発がしたい!
スキーマ駆動開発とは? API のスキーマを最初に定義して、定義をもとに FE や BE の開発を進める開発手法 はじめに API のスキーマ定義をするため、FE
<-> BE 間における API 仕様のずれを防ぐ ことができる FE は API スキーマを参考に、BE の実装を待たずして作業を進められる(MSW 等のモ ックを利用)
案件での課題と背景 ①API 定義に Open API を利用しているが、API の型定義(呼び出し処理等)を自前で作 成している 作成・管理コストが都度発生 ②FE
と BE で Repo が独立しており(マルチレポ) 、同じ型定義を別々に作成が必要 FE と BE での定義のずれ、認識齟齬による手戻り
背景と課題 ①API 定義に Open API を利用しているが、API の型定義を自前で用意している 作成・管理コストが都度発生 型定義の自動生成ライブラリを利用して自動化したい ②FE
と BE で Repo が独立しており、別々に作成が必要 FE と BE での定義のずれ、認識齟齬による手戻り Npm パッケージ化して FE と BE の Repo で共通化させたい
① クライアントコードの自動生成 ライブラリ選定 自動生成用のライブラリの選択肢はいくつかあるが今回は Orval を選定 API のクライアントコードだけでなく fetching ライブラリ(Tanstack
Query, SWR) のカスタム hooks も自動生成可能 メンテナンスが活発 ※ Issue をあげたところ翌日には PR が上がってスムーズにマージされた
① クライアントコードの自動生成 その他のライブラリ Open API Generator この手のライブラリでは最も老舗っぽく、情報も多い 出力されるファイルが多かったり、実行速度が比較的遅いなどの課題あり Open API
TypeScript Orval の時点で選ぶならこれ Swagger Codegen Swagger TypeScript API ...etc
脱線 Orval 語源 ほかのトラピスト醸造所と違い、オルヴァル修道院が造っているビールはたった 1 種類 だけ。敷地内にあるマチルドの泉には1076年にここを訪れたイタリアの伯爵夫人が 結婚指輪を落とし、鱒がくわえて上がってきたという伝説が残っいる。 https://www.belgianbeer.co.jp/products/list.php?category_id=274
閑話休題
② マルチレポでのパッケージ共有 Npm パッケージ管理・公開には GitHub Packages を利用。 パッケージ化したコードを public または
private にホストして利用することができる GitHub 公式のサービス 特定の org 内でのみ利用可能なパッケージをホストすることができる npm や RubyGems などの各言語の標準的なパッケージ管理サービスをサポート
② マルチレポでのパッケージ共有 パッケージの公開・利用手順は 記事が詳しい。 (本 LT では割愛) GitHub Packages の
npm レジストリを使って、社内 org 用のプライベートパッケージを公開 する手順とインストールする手順
コード自動生成&パッケージ共有のイメージ
導入手順 パッケージ公開 新規 Repo 作成。Orval 等インストール、セットアップ PAT(Github Personal Token)作成 パッケージ公開の
CI 整備 パッケージのバージョン更新の基準にはセマンティックバージョニングを利用し、 PR の Label でどの � バージョンの更新かを判定する方針をとる PR に適切な Label が付与されているかをチェックする GHA は以下 バージョンを更新し、パッケージを公開する GHA は以下
導入手順 パッケージの利用(インストール) 各メンバーに以下作業を依頼 PAT の作成 以下の権限を設定 repo read:packages 利用しているシェルへ環境変数として PAT
を登録 各 CI 環境に PAT を登録(AWS Code Build, GHA)
悩み・苦労した点 Npm パッケージをどのような形で公開するか? JS にして公開するか、TS のまま公開するか? モジュールはすべてバンドルするか?分けるとしたらパスはどう設計するか? クライアントコード自動生成ライブラリ&マルチレポのケースの事例が少ない Orval で生成した
Tanstack Query の hooks コードをパッケージ化した際の呼び出 しに一工夫必要(クエリキーや認証情報の渡し方等)
今後の展望 FE・BE の既存コードのリファクタ(自作の型定義の置き換え) Tanstack Query のカスタム Hooks コードを自動生成したものに置き換え API の
Mock データ(MSW)コードも自動生成したものに API スキーマを追加すると、型定義&API 処理のカスタム Hooks&Mock データが全て自 動生成されてスキーマ駆動開発が実現(理想)
EOF