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
pvcresin
November 14, 2026
Programming
72
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
820
リセット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
オーケストレーション記述言語 Katari
yukikurage
0
260
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
3
1.7k
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
250
React Native経験者が Flutterを30⽇間触って驚いたこと
3saito
0
180
Enforcing Your Architecture with Unit Tests in the AI Era (Swift Connection X)
steliosf
PRO
1
170
Secure Your Coding Agent Like It’s Malware (v1.5) 🇬🇧 @Code.talks 2026
richargh
0
140
止まらない比較を止める — 余帰納法で無限ストリームを比べる
tarao
0
120
GraphQL の onError と Nullability のこれから
quramy
0
210
複数ドメインを一つのアプリに統合するFlutterの設計と運用_FlutterKaigi2026登壇資料(須永高弘)
takahirosunaga
0
180
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
610
AI Augmentation Techniques with Liberty
ivargrimstad
1
470
社内AIエージェント「Askワンバン」における コストチューニングの取り組み
t0yohei
0
170
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Accessibility Awareness
sabderemane
1
300
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
The untapped power of vector embeddings
frankvandijk
2
2k
Done Done
chrislema
187
17k
30 Presentation Tips
portentint
PRO
1
470
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
1
310
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
350
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Marketing to machines
jonoalderson
1
6k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
480