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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
ディップ株式会社
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
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
260
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.3k
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
4
880
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
110
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
3.8k
3Dシーンの圧縮
fadis
1
680
Lessons from Spec-Driven Development
simas
PRO
0
150
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
520
さぁV100、メモリをお食べ・・・
nilpe
0
130
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
3
1.2k
These Five Tricks Can Make Your Apps Greener, Cheaper, & Nicer
hollycummins
0
280
tsserverとは何だったのか、これからどうなるのか
nowaki28
1
460
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
30 Presentation Tips
portentint
PRO
1
320
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
400
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
How to build a perfect <img>
jonoalderson
1
5.6k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
Crafting Experiences
bethany
1
170
Building the Perfect Custom Keyboard
takai
2
790
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
820
What's in a price? How to price your products and services
michaelherold
247
13k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
Testing 201, or: Great Expectations
jmmastey
46
8.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日)