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
【ディップ|26年新卒研修資料】TDD実装演習
Search
ディップ株式会社
PRO
May 01, 2026
Programming
400
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 ディップ株式会社
はじめての環境構築!デプロイ〜Docker基礎を学べるワークショップ!
dip_tech
PRO
0
36
【TSKaigi2026登壇資料】決定論的な型チェックへ Go 製コンパイラによる10倍速の裏側で stableTypeOrdering から見える並列化への挑戦
dip_tech
PRO
2
380
【TSKaigi2026登壇資料】バイトル」のTypeScriptリニューアル — 積み上がったレガシーとパフォーマンスに挑む現在地
dip_tech
PRO
1
350
【新卒研修】ライブデモ + compose.yaml読解_講義資料
dip_tech
PRO
0
240
【ディップ|26年新卒研修資料】OpenAPI/Swagger REST API研修
dip_tech
PRO
0
380
【ディップ|26年新卒研修資料】Docker_ハンズオン研修
dip_tech
PRO
0
350
ハッカソンや個人開発で何作る? テーマ発見〜アイデア発想ハンズオン! 技育CAMPアカデミア
dip_tech
PRO
0
87
技育祭登壇|「AIを使える」は、勘違いだった。 コードが書けてもプロになれなかった僕の1年戦記
dip_tech
PRO
0
140
【dip】企業紹介
dip_tech
PRO
0
340
Other Decks in Programming
See All in Programming
Inside Stream API
skrb
1
660
AutonomyとControlのあいだ:Graflowで記述するAIエージェント協調
myui
0
110
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
770
OSもどきOS
arkw
0
470
Claspは野良GASの夢をみるか
takter00
0
180
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
2
470
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
4
630
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
150
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
1.2k
Vite+ Unified Toolchain for the Web
naokihaba
0
140
Webフレームワークの ベンチマークについて
yusukebe
0
150
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
520
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.6k
Navigating Team Friction
lara
192
16k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
What's in a price? How to price your products and services
michaelherold
247
13k
The Spectacular Lies of Maps
axbom
PRO
1
790
Design in an AI World
tapps
1
230
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
380
Building AI with AI
inesmontani
PRO
1
1.1k
Evolving SEO for Evolving Search Engines
ryanjones
0
210
Code Reviewing Like a Champion
maltzj
528
40k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
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日)