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
AI駆動の自動テスト生成
Search
Takashi Machinaga
May 15, 2025
Technology
190
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AI駆動の自動テスト生成
AI ×フロントエンド開発のリアル(2025-05-15)
Takashi Machinaga
May 15, 2025
More Decks by Takashi Machinaga
See All by Takashi Machinaga
複雑なフォームに立ち向かう Next.js の技術選定
macchiitaka
4
1.9k
事業モメンタムを生み出すプロダクト開発
macchiitaka
1
290
What is Standard Schema?
macchiitaka
0
190
Other Decks in Technology
See All in Technology
Redmine 7.0で私が開発した新機能の狙いと背景
vividtone
1
130
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
280
生成AIのテナント制御とシャドーMCP対策 | AIを"止めずに"、情報を守る
yukun
0
140
Amazon Quick on DesktopがIAM Identity Centerで動かない理由
yukiogawa
0
130
AIで仕事のやり方を変える
matsu7874
3
1k
リージョンの壁を越える、 ちょっと変わったAWSサービスの話
falken
PRO
1
290
Snowflakeで実現する全社横断の顧客の声(VOC)分析・活用基盤@Snowflake World Tour Tokyo 2026
yuto16
0
130
When Does a Local Qwen Start to Break
morshoto
0
190
20260912_スクラムにジェネラリストは必要か
ryugen04
0
220
DEFCON_CHV_CTF_Write-up.pdf
bata_24
0
110
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
240
AI時代に顧客へ最速で価値を 届けるための試行錯誤 〜「AI × マネジメント」領域におけるmentoのケース〜
posterkeisuke
0
110
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
1.5k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
It's Worth the Effort
3n
188
29k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
520
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
380
For a Future-Friendly Web
brad_frost
183
10k
Thoughts on Productivity
jonyablonski
76
5.4k
Done Done
chrislema
186
16k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
380
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Transcript
AI駆動の⾃動テスト⽣成 2025-05-15 株式会社IVRy(アイブリー) 町永 隆 @macchiitaka
⾃⼰紹介 • @macchiitaka • 2024年8⽉ IVRy に⼊社 • 主にWebフロントエンドの機能開発 町永
隆(Takashi Machinaga) 2 ソフトウェアエンジニア
IVRyとは?
電話⾃動応答サービスIVRy 電話AI SaaS IVRy(アイブリー)は、 ⽉額2,980円からカスタム電話をカンタンに作成できるサービス。 全ての電話業務を誰でもすぐにAIを使って効率化できます
テストを AI に⽣成してほしい • ⾃社のプロダクト開発の中でのトライ&エラーの話 • 初期からある Web フロントエンドのリポジトリ •
ビジネス優先で開発してきた • リファクタリングをしたい • しかしテストがほぼない • リファクタリングは、プログラムの動作を 変えずに、内部の構造を整理‧改善する作業 • つまりテストとセット • Copilot & Cursor & Devin
静的解析
• AI のため…ではなく元々は⾃分たちのコード品質向上のために強化していた • AI Agent と静的解析の親和性が⾼い • AI の制御にも活⽤できる
• AI Agent は暴⾛する • 適切なフィードバックを与えないと明後⽇の⽅向にコードを変更する • ガードレール(=ルール)が必要 • 確率で動く AI に対して、従来のルールベースの静的解析ツールで制御 静的解析
静的解析 1. TypeScript a. tsconfig/bases 2. ESLint a. bulk suppressions
(v9.24.0) i. AI に disable コメントを真似させない b. スタイルに関するルールも有効にする i. 特に Auto Fixable なルールは積極的に有効に ii. 表記の統⼀(prd, prod, pro…)
ルールの変更も AI にやってもらった
プロンプトを頑張らない • 最初は Cursor で⼿元で実⾏ • 簡単なプロンプトで完了すればラッキー🎉🎉🎉 • だいたいはうまくいかない •
テスト⽣成の「最初」と「最後」に介⼊する • 「最初」に介⼊するパターン ◦ Pull Request やコミット途中まで作成して、続きの作業をしてもらう ◦ = リファレンス実装 ◦ ⾃然⾔語でプロンプトを書くよりも簡単 & ⾼精度
プロンプトを頑張らない • 「最後」に介⼊するパターン ◦ ⼈間相⼿のアンチパターンが AI なら許される ◦ 「あとは俺がやる」 ◦
AI と仕事をしているといままで PR は以下にコード以外に思考を回してい たか気付かされる ◦ 癖になって⼈間相⼿にやらないように気をつけよう • 次回以降は成功した Pull Request を参照させる ◦ 精度が上がるまでは Cursor ◦ 精度が上がってからは Devin で並列実⾏
プロンプトを頑張らないコツ
無限にお⾦があったら • なぜプロンプトを頑張りたくなるのか? ◦ 従量課⾦だから成功率を上げたくなる ◦ 定額だったら使わないと損 ◦ もし5000兆円あったら…? •
⽯油王の気持ちで AI を使う • 同じプロンプトで複数回実⾏する ◦ 当たるまで繰り返す(ガチャ) • ちなみに IVRy 社内でもっとも Devin を使った ◦ マージ率ももっとも⾼かった
「あなたはアラブの⽯油王です」
ユニットテスト
テスト環境 • Vitest ◦ jsdom + Testing Library ◦ Browser
Mode ▪ Chromium ▪ Firefox ▪ WebKit
悩み①:モックサーバー • vi.spyOn、vi.mock を使いたがる ◦ 関数、モジュールレベルをモックすると、実装に依存したテストになる ◦ msw を使ったモックサーバーを利⽤してほしい ◦
しかし、このモックサーバーの⽣成精度が低い • ⾃動⽣成された API クライアントをリポジトリに含めた ◦ OpenAPI を利⽤したスキーマ駆動開発を採⽤している ◦ ⾃動⽣成ファイルはリポジトリから除外していた ◦ これと⽣成元の OpenAPI の定義ファイルを含めた ◦ モックサーバーの⽣成精度が向上 🎉🎉
悩み②:テストケース • 実装に依存したテストを⽣成しがち ◦ 実装に依存すると変更に弱いテストになる ◦ ユーザーが操作するようにテストしたい • it.todo でテストケースだけ作成する
◦ テストケース作成と⾃動テスト実装を別ステップにする ◦ テストファイルは縦に⻑くなりがち ▪ テストケースだけなら出⼒が速い ◦ 場合によっては最初の数ケースをエンジニアが定義する(最初に介⼊)
悩み②:テストケース • ゼロからテストケースを作成するより圧倒的に楽 • AI が⾃ら定義したテストケースは⾼精度で書ける • ただし、エンジニアが介⼊したテストケースのミス率は相対的に⾼い • ⽣成後、テストカバレッジを渡してテストを網羅的に書かせる
• ただしカバレッジが⾼い=良いテストケースではない • 品質は⼈間が担保する
• リファクタリング前に捨てる前提のテストを作成する • テストがグリーンであればいい • テスト品質は問わない ◦ 実装に依存したテストでもいい • 既存の機能が変わっていないことを(多少なりとも)保証してもらう
AI 特有のテスト
現在地点
ジュニアエンジニアとのペアプロ • ⼈間にとって簡単なタスクは AI にとっても簡単 • ⼈間にとって難しいタスクは AI にとっても難しい •
簡単だけど⼿数な必要な作業を AI にやってほしい • どれだけ構造化されたコードベースにできるか • どれだけ簡単なタスクに分割できるか • フロントエンドは⽐較的は細かい作業の連続 • ジュニアエンジニアとのペアプロしてきたメソッドが役に⽴った • 副作⽤として Good First Issue が枯渇する
現時点の付き合い⽅ • ゴールを定めにそこにどう導くか • 宣⾔的 UI と同じ • AI は意思決定をしてくれない
• 考えることまで任せない • 最終的な完成物の責任は⾃分にある
https://ivry-jp.notion.site/IVRy-127eea80adae801397a4e4d7ea74e291