Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
コード生成時代のAPI定義を支えるRequest Spec移行
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
pvcresin
November 14, 2026
Programming
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
コード生成時代のAPI定義を支えるRequest Spec移行
北陸Ruby会議02
https://regional.rubykaigi.org/hokuriku02/index.html
pvcresin
November 14, 2026
Transcript
36 slides
北陸Ruby会議02 コード生成時代の API定義を支える Request Spec移行 @pvcresin
自己紹介 pvcresin(レジン) 仕事 SansanでEightのWebエンジニア 興味 フロントエンド/デザイン/型 出没 Asakusa-bashi.rbs/Omotesando.rb 恐竜 カルノタウルス
話の中心 歴史ある大規模アプリケーションに残っていた 120個のController SpecをRequest Specに移行し 「API定義と実装の一致」をテストで担保した事例
目次 - API定義の重要性 - 実装とのズレをどう防ぐか - Request Spec移行 - 継続的にズレを修正するための仕組み
- 移行の結果
API定義の重要性
API定義の重要性 - スキーマ駆動開発で並行して実装が進められる - 自動生成ツールを用いてAPI定義から通信用コードを作れる - モックサーバーが利用できる
AI時代
AI時代 実装があれば API定義は不要?
AI時代 実装があれば API定義は不要? → No - 正しいAPI定義は実装や調査の効率的な入口になる
AI時代 実装があれば API定義は不要? → No - 正しいAPI定義は実装や調査の効率的な入口になる 自動生成ツールは不要?
AI時代 実装があれば API定義は不要? → No - 正しいAPI定義は実装や調査の効率的な入口になる 自動生成ツールは不要? → No
- 確率論的な動作のAIより、決定論的なツールの方が出力が一定で、早く低コスト - そもそもAIと自動生成ツールを両方使うのが最強
© Sansan, Inc.
Eightにおける API定義 ほとんど、ただの参考ドキュメントだった iOS 参考 参考 Rails 参考 OpenAPI Android
自動生成 Web
ところが、その状況が一変
iOS/Androidでも自動生成にシフトすることに iOS 自動生成 参考 Rails 自動生成 OpenAPI Android 自動生成 Web
開発中にモバイルアプリがクラッシュ 💥
API定義と実装のズレ レスポンス - 必須プロパティが返ってこない、定義上のenumにない値が返ってくる リクエスト - パラメータが必須なことが明記されていない その他 - 古いAPIが定義に起こされてない
実装とのズレをどう防ぐか
Request Specによるスキーマ検証 - RSpecのテスト内でリクエストを送り、CommitteeでAPI定義との一致を検証 = API定義と実装がズレていないことをテストで保証する
Controller SpecとRequest Spec Controller Spec Request Spec アクションを指定 エンドポイントを指定 ⭕
挙動を絞って確認しやすい ⭕ 外部からのリクエストに近い ❌ ルーティングを含む検証に不向き ❌ 準備や失敗時の切り分けが大変
古いController Specが120ファイル残っていた 長いものだと 1つ3000行...😇
Request Spec移行
移行の方針 差分ノイズを先に取り除き、最後にファイル移動することで移行を最小差分に
つらみがいっぱい - 内部変数を見るテスト → レスポンスやDB、リダイレクト先で検証 - メソッドのスタブ → User Agentや認証ヘッダーでパターンを再現
- shared_context → metadata[:type]で内部分岐 - Viewに埋め込む JS変数 → HTMLから抽出
3週間のサブタスクとして完了 ✅
スキーマ検証を組み込んで テストと API定義は噛み合った 🎉
まだエッジケースとか漏れてるかも
継続的にズレを修正するための仕組み
継続的にズレを改善するための仕組み - 開発環境にCommitteeのミドルウェアを導入して、実際のレスポンスを確認 - スキーマ違反だった場合はレスポンスを返しつつ、Slackにエラー通知 - 開発中のAPIはWIPタグをつけてエラーを抑制 → 定期的にエラーを確認して API定義と実装を揃えていく
スキーマ違反通知の Middleware - ignore_error: trueでスキーマ違反があっても元のレスポンスを返す - 違反があったらSlackにエラーメッセージを投稿
移行の結果
API定義と実装が同期するように iOS 自動生成 同期 Rails 自動生成 OpenAPI Android ⾃動⽣成 実装に近い仕様として、
API定義だけレビューする戦略もアリかも Web
組織として生まれた変化 - API定義の不正確さが浮き彫りになり、エンドポイントの洗い出しが進んだ - Slackのエラー通知を起点に、スキーマ違反の修正が継続的に行われるように - モバイルエンジニアによるAPI定義やバックエンド実装への越境
まとめ
まとめ - API定義と実装のズレは、テストと継続的な検証で発見できる - コードが高速に生成される時代にも、自動化・仕組み化は重要であり続ける - API定義は共通言語として、エンジニアの越境の手助けにもなる
Sansan 技術本部 採用情報 https://media.sansan-engineering.com/
More Decks by pvcresin
See All by pvcresin
プロポーザルを書いてもらう
pvcresin
0
670
関係性から理解する"同一性"の型用語たち
pvcresin
2
830
リセットCSSを1行消したらアクセシビリティが向上した話
pvcresin
4
660
Reduxモダナイズ 〜コードのモダン化を通して、将来のライブラリ移行に備える〜
pvcresin
2
1k
text-box-trim について 1 分で
pvcresin
0
180
Web IDEの進化とそれを支える技術
pvcresin
0
160
ステップアップOSSコントリビュート
pvcresin
0
540
Webアプリケーションのアーキテクチャパターンから読み解くNext.js
pvcresin
0
470
Eight WebフロントエンドのDX向上に関する取り組み
pvcresin
0
230
Other Decks in Programming
See All in Programming
DroidKnights 2026 Android A2UI Jetpack Compose 기반의 안전한 AI UI 렌더링 - 박제창
itsmedreamwalker
1
230
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
250
AIがコードを書いてくれる時代、我々は何を確かめるのか
yosuke_furukawa
PRO
13
5.9k
protojson における文字化けの扱い
kazuki1023
0
420
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
200
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
230
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
260
社内AIエージェント「Askワンバン」における コストチューニングの取り組み
t0yohei
0
170
Goコンパイラを作ってGoをもっと理解する / Build a Go compiler to better understand Go
ikura_hamu
0
130
そのデザイントークン、Flutterでも同じ見た目になりますか?
nakamizu
0
350
graphql-ruby を Spinel で速くしようとした話
mtsmfm
0
150
Spec-driven Development with AI
simas
PRO
0
2.3k
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
6.4k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
2
520
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
4
4.4k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
530
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8.2k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
750
Rebuilding a faster, lazier Slack
samanthasiow
85
9.8k
Skip the Path - Find Your Career Trail
mkilby
1
290
It's Worth the Effort
3n
188
29k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Testing 201, or: Great Expectations
jmmastey
46
8.4k