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
190
プログラミングどうやる? ~テスト駆動開発から学ぶ達人の型~
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
技術的負債の正体を知って向き合う / Facing Technical Debt
irof
0
150
Writing Better Go: Lessons from 10 Code Reviews
konradreiche
0
380
Devvox Belgium - Agentic AI Patterns
kdubois
1
110
高度なUI/UXこそHotwireで作ろう Kaigi on Rails 2025
naofumi
4
3.9k
PHPに関数型の魂を宿す〜PHP 8.5 で実現する堅牢なコードとは〜 #phpcon_hiroshima / phpcon-hiroshima-2025
shogogg
1
110
登壇は dynamic! な営みである / speech is dynamic
da1chi
0
300
バッチ処理を「状態の記録」から「事実の記録」へ
panda728
PRO
0
140
Flutterで分数(Fraction)を表示する方法
koukimiura
0
130
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
110
CSC509 Lecture 04
javiergs
PRO
0
300
非同期jobをtransaction内で 呼ぶなよ!絶対に呼ぶなよ!
alstrocrack
0
700
なぜあの開発者はDevRelに伴走し続けるのか / Why Does That Developer Keep Running Alongside DevRel?
nrslib
3
400
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
65
7.9k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Gamification - CAS2011
davidbonilla
81
5.5k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Rails Girls Zürich Keynote
gr2m
95
14k
Documentation Writing (for coders)
carmenintech
75
5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.6k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
9
590
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
まとめ プログラミングのゴール(完成形)について様々な情報はあるが、その過程についての 情報は少ない テスト駆動開発を「プログラミングの型」と捉えることで、「達人のやり方」を自身に取り込 む 型を学び、自分のプログラミング スタイルを作り上げる(テスト駆動開発でなくても良い)
スライドの目的 このスライドの目的は「正しい/真のテスト駆動開発」を明らかにすることではなく、テスト 駆動開発を「プログラミングの型」として捉えることで、達人たちのプログラミングの叡知 を学ぶことです。
完