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
480
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 ディップ株式会社
_型ガードしたのにnullable_から卒業する.pdf
dip_tech
PRO
0
47
はじめての環境構築!デプロイ〜Docker基礎を学べるワークショップ!
dip_tech
PRO
0
44
【TSKaigi2026登壇資料】決定論的な型チェックへ Go 製コンパイラによる10倍速の裏側で stableTypeOrdering から見える並列化への挑戦
dip_tech
PRO
2
440
【TSKaigi2026登壇資料】バイトル」のTypeScriptリニューアル — 積み上がったレガシーとパフォーマンスに挑む現在地
dip_tech
PRO
1
770
【新卒研修】ライブデモ + compose.yaml読解_講義資料
dip_tech
PRO
0
310
【ディップ|26年新卒研修資料】OpenAPI/Swagger REST API研修
dip_tech
PRO
0
460
【ディップ|26年新卒研修資料】Docker_ハンズオン研修
dip_tech
PRO
0
430
ハッカソンや個人開発で何作る? テーマ発見〜アイデア発想ハンズオン! 技育CAMPアカデミア
dip_tech
PRO
0
100
技育祭登壇|「AIを使える」は、勘違いだった。 コードが書けてもプロになれなかった僕の1年戦記
dip_tech
PRO
0
160
Other Decks in Programming
See All in Programming
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.9k
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.8k
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
440
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
350
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
300
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
210
Haskell/Servantを通してWebミドルウェアを捉え直す
pizzacat83
1
470
SREの積み重ねがAI駆動開発のガードレールになった ― 7つの実践/SRE Guardrails The 7
tomoyakitaura
8
3.5k
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
480
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
4
1.6k
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
130
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
390
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
180
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
190
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Into the Great Unknown - MozCon
thekraken
41
2.6k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
270
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Typedesign – Prime Four
hannesfritz
42
3.1k
Documentation Writing (for coders)
carmenintech
77
5.4k
Mind Mapping
helmedeiros
PRO
1
280
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日)