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
「とりあえず動く」コードはよい、「読みやすい」コードはもっとよい / Code that 'j...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Maki Hayashi
December 22, 2024
Programming
7
2.4k
「とりあえず動く」コードはよい、「読みやすい」コードはもっとよい / Code that 'just works' is good, but code that is 'readable' is even better.
PHP Conference Japan 2024のLT登壇資料です。
Maki Hayashi
December 22, 2024
Tweet
Share
More Decks by Maki Hayashi
See All by Maki Hayashi
小さく段階的リリースすることで深夜メンテを回避する
mkmk884
2
390
仕様変更に耐えるための"今の"DRY原則を考える
mkmk884
8
4.4k
php.iniって何書いているの
mkmk884
2
770
1人プロ・ペアプロ・モブプロの効果的な使い分け
mkmk884
0
1.9k
テスト嫌いな自分の苦手意識がなくなった話
mkmk884
4
1.2k
部内全員で理想の開発部を考え、それに向かって1年間継続して活動に取り組む環境をつくった話
mkmk884
0
250
Other Decks in Programming
See All in Programming
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
4
2.6k
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.6k
AgentCoreとHuman in the Loop
har1101
5
200
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
900
Fragmented Architectures
denyspoltorak
0
130
ゆくKotlin くるRust
exoego
1
210
AI Agent Dojo #4: watsonx Orchestrate ADK体験
oniak3ibm
PRO
0
130
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
3
840
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
120
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
220
AIエージェントの設計で注意するべきポイント6選
har1101
6
3.3k
.NET Conf 2025 の興味のあるセッ ションを復習した / dotnet conf 2025 quick recap for backend engineer
tomohisa
0
120
Featured
See All Featured
Designing for Timeless Needs
cassininazir
0
120
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
Embracing the Ebb and Flow
colly
88
5k
The Spectacular Lies of Maps
axbom
PRO
1
450
From π to Pie charts
rasagy
0
120
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
76
Game over? The fight for quality and originality in the time of robots
wayneb77
1
84
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
130
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
430
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
1
430
Transcript
「とりあえず動く」コードはよい、 「読みやすい」コードはもっとよい まきまき 2024/12/22 PHPカンファレンス2024 1
まきまき @_mkmk884 愛媛 → 京都 → 小田原 NE株式会社 アプリケーションエンジニア
PHPカンファレンス小田原 コアスタッフ 2
新卒1〜2年目の頃…
最初は「とりあえず動く」コードを書いていた 4 🔰 ぴちぴちの私 実力がない 納期やばい 設計ワカラン ドメイン知識ない テスト…? 💦
チーム? 自分で手一杯だけど?
最初は「とりあえず動く」コードを書いていた 5 🔰 頼む… 💧 ぴちぴちの私 動いて くれ…
最初は「とりあえず動く」コードを書いていた 6 🙏 頼む… 💧 ぴちぴちの私 動いて くれ… 祈り駆動開発
「とりあえず動く」コード 7 • 要件通りに動いている • 開発者が”完全に理解”をしている • テストコードがなかったり、あっても見たいものを 正しくテストできていなかったりする
「とりあえず動く」コード 8 ユーザーに提供したい価値が届く • 要件通りに動いている よい✌
年月は経ち…
「読みやすい」コードに救われ、意識しはじめた 10 どこに追加すれば いいかわかる 大体どの辺りに 書いてありそうか わかる 意図がわかる !
「読みやすい」コード 11 • 誰が読んでも読む時間が短縮される • シンプル • 振る舞いの単位で処理がまとめられている • 適度にコメントがある
• 関数名・変数名で意図がわかる • IDEが認知しやすいコード (コードジャンプができる、Docコメントがある等) コードジャンプできない例:動的にインスタンス化を行っている
「読みやすい」コード 12 • 誰が読んでも読む時間が短縮される • シンプル • 振る舞いの単位で処理がまとめられている • 適度にコメントがある
• 関数名・変数名で意図がわかる • IDEが認知しやすいコード (コードジャンプができる、Docコメントがある等) コードジャンプできない例:動的にインスタンス化を行っている
(余談)コードジャンプができない例 32 <?php // ディレクトリからファイル一覧を取得 $files = scandir('classes'); // .phpを除外してクラス名リストを作成
$classNames = array_filter( array_map( function ( $file) { return preg_replace( '/\.php$/', '', $file); }, $files ), ); // クラスのインスタンス化 $instances = []; foreach ($classNames as $className) { if (!class_exists( $className)) { return; } $instances[] = new $className(); } インスタンス化するクラス名 を動的に作っている (たぶん昔はよくあった) 例
「読みやすい」コード 13 • 誰が読んでも読む時間が短縮される 変更箇所・影響範囲がパッとわかる 変更が早くでき、変更に強いものになる もっとよい✌
「とりあえず動く」コードと「読みやすい」コード 14 「とりあえず動く」コード 「読みやすい」コード 早く価値を増大できる 仕様変更があっても 価値を持続できる 価値を提供すること ができる
• コードを理解しやすくなる 「読みやすい」コードが他者に与える影響 15 → 工数が短縮される → バグに気づきやすくなる → 学習コストを削減できる
• 変更範囲や影響範囲を把握しやすくなり、 見積もりもしやすくなる
• コードを理解しやすくなる 「読みやすい」コードが他者に与える影響 16 → 工数が短縮される → バグに気づきやすくなる → 学習コストを削減できる
• 変更範囲や影響範囲を把握しやすくなり、 見積もりもしやすくなる 安 心
「とりあえず動く」→「読みやすい」 にすればもっともっとよい💪
リファクタリング やっていき!
知識・経験を積むごとに力がつき…
リファクタリングが楽しくなってきた 20 “完全に理解した” の私 はまっていく感じ パズルみたい めちゃくちゃ 勉強になる あの本に書いて あったことを
適用してみよう ♪
リファクタリングが自分に与える影響 21 • 仕様を把握することができる • バグの発生率が下がるため、安心して開発できる • 設計力やコーディングスキルが向上する → 向上する実感も得られる
リファクタリングが自分に与える影響 22 • 仕様を把握することができる • バグの発生率が下がるため、安心して開発できる • 設計力やコーディングスキルが向上する → 向上する実感も得られる
本や他者から学んだ 知識を自分も 実践できる…!
せっかくリファクタリングするなら コスパよく着実に変更していきたい!
リファクタリングをする場所 24 • 拡張することが確定しているところ ◦ チーム開発で別のメンバーが触る等 • コミットが多いところ ◦ つまり、変更・バグがよく発生するところ
◦ 逆にいうと「とりあえず動く」コードも長い期間変更 がなければ、そのままで十分 • テストがしっかり書けている・書かれているところ
リファクタリングをする場所 25 • 拡張することが確定しているところ ◦ チーム開発で別のメンバーが触る等 • コミットが多いところ ◦ つまり、変更・バグがよく発生するところ
◦ 逆にいうと「とりあえず動く」コードも長い期間変更 がなければ、そのままで十分 • テストがしっかり書けている・書かれているところ
リファクタリング自体も 安心して行いたい
不安の壁 27 正しく動くかどうかがわからないまま変更するのは不安 完成の状態(結果・仕様)がわからないと 何をしていけばいいのかもわからない ? 改善後も 正しく動いている から大丈夫だよ ↑
誰かに言ってほしいですよね? 👀
「意味のあるテストコード」が安心をもたらす 28 改善後も 正しく動いている から大丈夫だよ さまざまな制約が「きれいな」どころか「動作する」の前にも立ちふさがる。 私たちは、不安を抱えて考え込んでしまうのをやめにして、代わりに自動化 されたテストによって開発を推し進める。 テスト駆動開発 まえがき
「意味のあるテストコード」が安心をもたらす 29 ここでいう 意味のあるテストコード = 信頼ができるテストコード • エッジケースや異常系も カバーしている •
実装の細部に依存せずに、 振る舞いをテストしている
まとめ 30 • 「とりあえず動く」コードは、価値を提供できるため よい • その後も価値を増大、持続しようとしたときに 「読みやすい」コードが効果を発揮してくる • 変更箇所が多いところからリファクタリングをすると
コスパがいい • 安心してリファクタリングを行うために 意味のあるテストコードが必要
「読みやすい」コードにして 自分にも他者にも 安心を届けていきましょう🙌