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
プログラミングどうやる? ~テスト駆動開発から学ぶ達人の型~
Search
Atsushi Okui
September 21, 2025
Programming
0
410
プログラミングどうやる? ~テスト駆動開発から学ぶ達人の型~
Atsushi Okui
September 21, 2025
Tweet
Share
More Decks by Atsushi Okui
See All by Atsushi Okui
(社内向け)『Accelerate State of DevOps Report 2022』翻訳とまとめ
a_okui
0
2.5k
コード品質がもたらすビジネスへの影響(社内向け翻訳、まとめ)
a_okui
0
350
(社内向け)『Accelerate State of DevOps Report 2021』翻訳とまとめ
a_okui
0
610
Other Decks in Programming
See All in Programming
KoogではじめるAIエージェント開発
hiroaki404
1
230
業務でAIを使いたい話
hnw
0
220
GC25 Recap: The Code You Reviewed is Not the Code You Built / #newt_gophercon_tour
mazrean
0
140
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
510
マンガアプリViewerの大画面対応を考える
kk__777
0
440
Software Architecture
hschwentner
6
2.4k
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
18
9.3k
社会人になっても趣味開発を続けたい! / traPavilion
mazrean
1
120
When Dependencies Fail: Building Antifragile Applications in a Fragile World
selcukusta
0
120
Designing Repeatable Edits: The Architecture of . in Vim
satorunooshie
0
210
contribution to astral-sh/uv
shunsock
0
570
ビルドプロセスをデバッグしよう!
yt8492
0
180
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
950
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.7k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.7k
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Done Done
chrislema
186
16k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Agile that works and the tools we love
rasmusluckow
331
21k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
2.9k
How STYLIGHT went responsive
nonsquared
100
5.9k
Transcript
プログラミングどうやる? テスト駆動開発から学ぶ達人の型
自己紹介 Atsushi Okui (@blue32a_jp) ソフトウェアエンジニア / Webアプリケーション エンジニア / PHPer
関心:設計、コード品質、リファクタリング、テス ト、モデリング
主題 プログラミングどうやる?
プログラミングで目指すゴール 『動作するきれいなコード』
「動作する」のゴール • ステークホルダーからの要求 • 仕様書、設計書 • Issue • etc.
「きれいな」のゴール • 『リーダブルコード』 • SOLID原則 • デザインパターン • **** アーキテクチャ
• etc.
動作するきれいなコード
ゴールの情報は様々あるが、 どうやって行くかの情報はあま り無かったりする
プログラミングどうやる? どうやってゴール(動作するきれいなコード) を目指す?
副題 テスト駆動開発から学ぶ達人の型
テスト駆動開発:? 達人:?👈 型:?
テスト駆動開発の考案者 Kent Beckさん
テスト駆動開発:? 達人:Kent Beckさん 型:?
テスト駆動開発:?👈 達人:Kent Beckさん 型:?
混同されやすい自動テスト関係の概念 ”テスト駆動開発(TDD:Test-Driven Development)という 名前は、現在では多くのエンジニアに広まっていますが、 そこにはやや混乱も見られます。「 TDD」という言葉が指し ているものが人によって異なるのです。自動テストを書くこ とをTDDと呼ぶ人もいれば、テストを先に書くこと(テスト ファースト)をTDDと呼ぶ人もいます。TDDの利点を説く人 の説明をよく読んでみると、自動テストの利点や、テスト
ファーストの利点のことを述べているような場面に出会うこ とも多々あります。” 保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発 、その全体像 https://gihyo.jp/article/2024/01/automated-test-and-tdd
テスト駆動開発の定義 ”Test-driven development is a programming workflow.” 訳)”テスト駆動開発(TDD: Test-Driven Development)はプログラミングのワークフロー
だ。” 【翻訳】テスト駆動開発の定義 https://t-wada.hatenablog.jp/entry/canon-tdd-by-kent-beck Canon TDD https://tidyfirst.substack.com/p/canon-tdd
テスト駆動開発:プログラミングのワークフロー 達人:Kent Beckさん 型:?
テスト駆動開発:プログラミングのワークフロー 達人:Kent Beckさん 型:?👈
「型」 我々が慣用的に使用する「型」という言葉に二つの異なる視 点が存在し、相反する概念を内包している。 • 物事の枠組みや分類方法としての型 • 叡智の表現・伝達方法としての型 「型」の再考 https://kyoto-up.or.jp/books/9784814003648.html
物事の枠組みや分類方法としての型 叡智の表現・伝達方法としての型
テスト駆動開発:プログラミングのワークフロー 達人:Kent Beckさん 型:達人の叡智
プログラミングのワークフローを通して、 Kent Beckさんの叡智を学ぶ
ワークフロー図解 Canon TDD https://tidyfirst.substack.com/p/canon-tdd
テスト駆動開発で見逃されたもの
テスト駆動開発とは何か ”テスト駆動開発(TDD)はテストファーストの利点を伸ば し、欠点を補うために生まれました。設計面でのテスト ファーストの強みを活かしつつ、保守性を上げるためにリ ファクタリングが組み込まれています。またやりすぎ、考え すぎ(スコープクリープ)を避けるために、イテレーティブな 開発手順とインクリメンタルな設計の要素が組み込まれま した。” 保守しやすく変化に強いソフトウェアを支える柱 自動テストとテスト駆動開発 、その全体像
https://gihyo.jp/article/2024/01/automated-test-and-tdd
テスト駆動開発のステップ1 ”多くの人が、書籍『テスト駆動開発』の中に出てくるこのステップ1(*)を見逃しているよう だ。「TDDはいきなりコードを書き始める。いつ終わるのかも全然見通せない」という意 見は、全くの見当外れだ。” * ステップ1. テストリスト 【翻訳】テスト駆動開発の定義 https://t-wada.hatenablog.jp/entry/canon-tdd-by-kent-beck Canon
TDD https://tidyfirst.substack.com/p/canon-tdd
None
None
None
テスト駆動開発の”テスト”が注目され、 TODOリストは見逃されがち
テスト駆動開発のサイクル
Red Green Refactor
Red Green Refactor Pick one Done
小さなタスクの完了 を積み上げてゴールを目指す
型を取り込む
「型」の内在化と変化 ”学習者は創始者とは身体性も経験も異なる存在であること から、創始者が意図した叡知を全て完璧に内在化するという のは、ほぼ不可能であると言ってよい。” ”科学的な叡智が一意的に客体化されるが故に変化なく伝達 されるのに対して、「型」は主体による多義的な把握を認める ため、叡知伝達の過程で変化することがしばしばである。” 「型」の再考 https://kyoto-up.or.jp/books/9784814003648.html
守破離 守:型を忠実に守る 破:型を発展させ、自分の型を模索する 離:既存の型から離れて、独自の型を生み出す
達人たちの型
Kent Beck さんのテスト駆動開発 https://shop.ohmsha.co.jp/shopdetail/000000004967/ • 仮実装 • 明白な実装 • 三角測量
• 歩幅の調整 • 実装を導くテスト
t-wadaさんのテスト駆動開発 https://www.youtube.com/live/Q-FJ3XmFlT8?t=1145s • タスクの分解 • 優先順位の付け方 • 検証→実行→準備
ボブおじさんのテスト駆動開発 https://blog.cleancoder.com/uncle-bob/2013/05/27/TheTransformationPriorityPremise.html • TDDは複式簿記 • 変換の優先順位説
達人の「型」から 自分の「型」へ
ふつうの人のテスト駆動開発 https://qiita.com/blue32a/items/2084c9e5cff97980a1c7
まとめ プログラミングのゴール(完成形)について様々な情報はあるが、その過程についての 情報は少ない テスト駆動開発を「プログラミングの型」と捉えることで、「達人のやり方」を自身に取り込 む 型を学び、自分のプログラミング スタイルを作り上げる(テスト駆動開発でなくても良い)
スライドの目的 このスライドの目的は「正しい/真のテスト駆動開発」を明らかにすることではなく、テスト 駆動開発を「プログラミングの型」として捉えることで、達人たちのプログラミングの叡知 を学ぶことです。
完