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
【ディップ|26年新卒研修資料】TDD実装演習
Search
ディップ株式会社
PRO
May 01, 2026
Programming
770
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【ディップ|26年新卒研修資料】TDD実装演習
ディップ株式会社
PRO
May 01, 2026
More Decks by ディップ株式会社
See All by ディップ株式会社
【Findyテック文化祭ワークショップ】新卒エンジニア&採用担当と作る、 なりたい姿と今やるべき一歩
dip_tech
PRO
0
120
【iOSDC登壇】Kotlin Multiplatformを軸にした技術戦略
dip_tech
PRO
1
370
_型ガードしたのにnullable_から卒業する.pdf
dip_tech
PRO
0
60
はじめての環境構築!デプロイ〜Docker基礎を学べるワークショップ!
dip_tech
PRO
0
53
【TSKaigi2026登壇資料】決定論的な型チェックへ Go 製コンパイラによる10倍速の裏側で stableTypeOrdering から見える並列化への挑戦
dip_tech
PRO
2
510
【TSKaigi2026登壇資料】バイトル」のTypeScriptリニューアル — 積み上がったレガシーとパフォーマンスに挑む現在地
dip_tech
PRO
1
990
【新卒研修】ライブデモ + compose.yaml読解_講義資料
dip_tech
PRO
0
610
【ディップ|26年新卒研修資料】OpenAPI/Swagger REST API研修
dip_tech
PRO
0
810
【ディップ|26年新卒研修資料】Docker_ハンズオン研修
dip_tech
PRO
0
710
Other Decks in Programming
See All in Programming
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
220
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
200
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
4.2k
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
110
一人だけ、Kiroが静止する日
hideg
0
130
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
440
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
460
カツオ、ご期待ください
suneo3476
0
110
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
360
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
900
JRuby: Past, Present, and Future
headius
0
210
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
980
Featured
See All Featured
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
530
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
420
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.1k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Odyssey Design
rkendrick25
PRO
2
820
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
510
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Test your architecture with Archunit
thirion
2
2.4k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
490
Documentation Writing (for coders)
carmenintech
77
5.5k
Transcript
テスト駆動の実装演習 11:30 - 12:45 (75分)権 奈悟‧吉本 胡葉 TDD (Test-Driven Development)
Agenda 01 オープニング 初めまして! 02 TDDについて Test-Driven Development (テスト駆動開発) 03
デモ Fizz Buzz 04 テストについて 良いテストとは 05 演習課題 給与情報表示関数の実装
⾃⼰紹介
権 奈悟 こん なお プロダクト開発統括部/プロダクトソリューショ ン部/メディアアプリ開発課 バイトル→NEXT→はたらこ→バイトル iOSエンジニア 吉本 胡葉
よしもと ことは 最近かぼちゃにハマってます ⾟いのが好き プロダクト開発統括部/プロダクトソリューショ ン部/メディアアプリ開発課 25卒 ⼊社からずっとバイトル Android エンジニア 好きな⾷べ物はバナナとブルーベ リー
dip_tech Copyright © DIP Corporation, All rights reserved. 5 講義の目的
自分が書いたコードが正しく動いているか、常に確信を持てる状態を作る 「テストが書きにくいコードは、設計が悪い」という気づきを与え、疎結合で責務が明確なコードを 書く習慣をつける 「動けばいい」ではなく、将来の自分やチームが安心してリファクタリングできる状態を維持する責 任感を養う
dip_tech Copyright © DIP Corporation, All rights reserved. 6 講義のゴール
1 Red-Green-Refactorのサイクルを体感する 2 TDDとAI-DLCの手法での開発を体験する 3 TDDとは、良いテストとはについて説明できる
dip_tech Copyright © DIP Corporation, All rights reserved. 7 講義の流れ
座学(20min)+実践(45min) 質問タイムもとりますが、わからなければその場で質問お願いします! 聞いて学ぶスタイル >>> みんなで議論を目指したいです ‼
質問 TDDについて知ってることを教えてください
リファクタ TDDとは 従来の開発 テスト駆動開発 (TDD) → Test-Driven Development (テスト駆動開発 )
テスト駆動開発とは、テストファーストな開発手法の 1つ。プログラムを書き始める前に、まずそのプロ グラムが正しく動くか確認するための「テストコード」を先に書く。 実装 実装 → テスト テスト → →
TDDのメリット 早い段階で不具合を検知 最低限のコードで実装するため、シンプルで不具合が少なくなる。早期発見でリードタイムが短縮 要件/仕様を理解しやすい テストコードを書くために仕様理解が必要となり、仕様への理解が深まる 開発者の負担を軽減 変更のたびにテストが実施でき、プログラムを壊していないか確認しやすい。心理的負担が軽減
TDDの3つのサイクル Red (失敗) まだ存在しないコードのテストを書く / 実行して、正しく失敗することを確認する(仕様の定義) Green (成功) テストを通すためだけの「最低限」のコードを書く Refactor
(改善) テストが通った状態を維持したまま、 コードを綺麗にする / 重複の排除、命名の変更、設計の整理を行う Red-Green-Refactor https://service.shiftinc.jp/column/4654/
デモ: Fizz Buzz https://ja.wikipedia.org/wiki/Fizz_Buzz
質問タイム(あれば)
TDDと従来の開発の比較 従来の開発(テスト後回し) 1. 設計を考える 2. コードを書く(数百行〜数千行) 3. 動かしてみる 4. バグ発見
😱 5. どこが悪いか探す(数時間〜数日) 6. やっとテストを書く TDD(テスト駆動開発) 1. 小さなテストを書く(数分) 2. 最低限のコードを書く(数分) 3. すぐテスト実行 4. 通った!次のテストへ 5. 少しずつ機能が完成 TDDが適しているシステムの特徴 : 複雑なビジネスロジック・長期的な保守が必要な時
AI-DLCにおけるTDD 人間がボトルネックとなる AIがプログラムを早いスピードで生成しても、人間のレビューがボトルネックとなり、生産性は上がりにくい TDDを導入することでレビューがどう書かれているか (how)<何を達成するか (what)に意識がむく テストコードが仕様書となり、レビュー効率が上がる テストを書く・実装・リファクタのフェーズがはっきりしている AIも今やるべきこと、必要な観点に集中して実装できる
テストについて
テストしやすい /しにくい 単一責任の原則( SRP)に基づく 一つのモジュールは一つの責任のみを持つ 依存関係の分離 依存オブジェクトを外部から注入する モジュール化・分離 各部分が独立しており、個別にテストできる 純粋な関数
外部状態に依存せず、同じ入力に対して常に同じ出力を返す 小さく単機能な関数にする テストが用意になる 依存関係が内部生成 副作用が多い 複雑な条件分岐、メソッドが長い テストケースが多くなる
良いテストとは : FIRST原則 Fast(高速) 開発ライフサイクルのどのタイミングであっても実行でき、なおかつテストの結果をすぐに取得できる。 Independent(独立) どのような単体テストであれ、テストの結果が他の影響を受け、変化しないように独立している必要がある。 Repeatable(再現可能) テストは繰り返し実行が可能で、なおかつ繰り返しの実行で結果が不変であり、また異なる環境であってもこの性質が保たれる べきである。
Self-Validating(自己検証) 実行結果を見て成功か失敗かが自動で判定される Thorough(網羅性) F テストは全ての実現したい正常系パターンを網羅すべき。単に実装したコードを 100%カバーするテストを考えるのではなく、全 てのユースケースシナリオを網羅できるように考える。 I R S T
質問タイム(あれば)
TDD演習
dip_tech | Copyright © DIP Corporation, All rights reserved. 実装に⼊る前のチェックリスト
• リポジトリをクローンした ⭕ • day4/02.テスト駆動の実装演習(75min)に移動した ⭕ • npm install` を実⾏した ⭕ • npx vitest runでテストが動くことを確認した ⭕
dip_tech | Copyright © DIP Corporation, All rights reserved. やること
• 実際にAIDLCにおけるTDDを簡単な関数でやってもらいます • プロンプト例があるので⾃分の使いやすい形で使ってみてください!!!
dip_tech | Copyright © DIP Corporation, All rights reserved. 演習課題
Lv.1 お題:給与表⽰フォーマッター 求⼈の給与情報を、ユーザーに⾒せるための表⽰⽤テキストに変換する関数 を作ってください。 ざっくり仕様 • 下限⾦額と上限⾦額を受け取って、表⽰⽤の⽂字列を返す • ⾦額にはカンマをつけて⾒やすくする • 下限と上限が同じなら1つだけ表⽰する • 下限と上限が違うなら範囲で表⽰する • 五桁以上はバリデーションする • 下限と上限が逆の場合:逆転 • ⼊⼒された値がnull or undifind:数値以外はエラー • 負の数がきた場合はエラー • 最低賃⾦1000円
dip_tech | Copyright © DIP Corporation, All rights reserved. 演習課題
Lv.1 お題:給与表⽰フォーマッター 追加仕様がきました‼ 上限⾦額が未⼊⼒の場合にも対応してほしい。 「下限だけわかってるけど上限は未定」というケース。
dip_tech | Copyright © DIP Corporation, All rights reserved. 演習課題
Lv.2 お題:応募締め切りカウントダウン 求⼈の応募締め切り情報を、ユーザーに⾒せるための表⽰ ⽤テキストに変換する関数を作ってください。 ざっくり仕様 • 本⽇⽇付と締め切り⽇付を受け取る • 締め切りまで1⽇以上あるなら「あと◯⽇で終了」と 返す • 締め切り当⽇なら「本⽇締切!」と返す • 締め切りを過ぎていたら「掲載終了しました」と返す • Date型で返却される •
dip_tech | Copyright © DIP Corporation, All rights reserved. 演習課題
Lv.2 お題:応募締め切りカウントダウン 追加仕様がきました‼ • 締め切りまで3⽇以内の場合のみ、⽂字列の末尾に 「🔥」マークをつける( 例:「あと2⽇🔥」 • 当⽇(「本⽇締切!」)には🔥はつけない
dip_tech | Copyright © DIP Corporation, All rights reserved. 演習課題
Lv.3 お題:NGワード‧マスキング 不適切な投稿を⾃動で防ぐ、NGワードの伏せ字(マスキ ング)関数を作ってください。 ざっくり仕様 • 特定のNGワード(「絶対稼げる」「ブラック」)を ** に置換する • 電話番号を [電話番号は⾮表⽰] に置換する
dip_tech | Copyright © DIP Corporation, All rights reserved. 演習課題
Lv.3 お題:NGワード‧マスキング 追加仕様がきました‼ • ハイフンなしの電話番号(例:09012345678)も検知し て [電話番号は⾮表⽰] に置換する • ただし、郵便番号(例:100-0001)や⼝座番号のような 短い数字列は誤検知しないこと
dip_tech | Copyright © DIP Corporation, All rights reserved. まとめ!
今⽇の演習はシンプルなロジックでしたが、実務ではもっと複雑な仕様や条件分 岐がたくさん出てきます。 そういうときこそ 「先にテストを書いて、仕様を固めてから実装する」 TDDの進 め⽅が効いてきます。 AIに実装を任せる場⾯でも、テストがあれば「本当に正しいか」を⾃分で確認で きる。 ぜひ実務でも活⽤してみてください。
参考文献 SHIFT Inc. (2025) 「テスト駆動開発(TDD)とは?目的やメリット・デメリット、やり方を解説」 SHIFT Column https://service.shiftinc.jp/column/4654/ (最終閲覧日: 2026年4月16日)