Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
マルチレポだってスキーマ駆動開発がしたい!
Search
mimu
July 01, 2024
Programming
73
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
マルチレポだってスキーマ駆動開発がしたい!
mimu
July 01, 2024
More Decks by mimu
See All by mimu
TypeScriptのバックエンド開発について
mmrakt
0
70
lt.pdf
mmrakt
0
49
npm/Yarn/pnpmゆるふわ解説
mmrakt
0
1.4k
Type Script型パズル(?)超入門
mmrakt
0
100
まだWebpackで消耗してるの?
mmrakt
0
110
Other Decks in Programming
See All in Programming
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.3k
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
230
MIZARU@SPAJAM2026 第二回予選
1901drama
0
110
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
360
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.5k
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
120
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
460
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
120
Building an Out-of-Order CPU
latte72
1
720
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
「AI時代、配布するPythonコードをどう守るか: 難読化の実験と判断軸」 #PyconJP2026
pkshadeck
PRO
2
180
From 6 People Classroom Meetup to 100 People Regional Conference / FOSS4G Hiroshima 2026
furukawayasuto
0
120
Featured
See All Featured
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
470
Designing for Timeless Needs
cassininazir
1
470
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Writing Fast Ruby
sferik
630
63k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.2k
The browser strikes back
jonoalderson
0
1.6k
The agentic SEO stack - context over prompts
schlessera
0
910
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
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