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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
hiro_shi
September 22, 2024
1
31
勘所を押さえて良いコードを書く
hiro_shi
September 22, 2024
Tweet
Share
More Decks by hiro_shi
See All by hiro_shi
Dependabot cooldownで始める サプライチェーン攻撃対策
164fm
0
25
BigQueryで取得した数値をPHPで扱うときにこわれた話
164fm
0
7
やさしい障害対応
164fm
0
3
謎コミットアワード2025
164fm
0
3
本当にあった"なにもしてないのにこわれた"
164fm
0
7
スクラム開発をするなら残業しないほうがいい
164fm
0
13
Terraform import blockを使って 既存のAWSリソースをインポートした話
164fm
0
16
Featured
See All Featured
Test your architecture with Archunit
thirion
1
2.2k
Designing Experiences People Love
moore
144
24k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Music & Morning Musume
bryan
47
7.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
760
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
180
Building Applications with DynamoDB
mza
96
6.9k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
440
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
150
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.3k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.2k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Transcript
勘所を押さえて良いコードを書く 2024-09-21 #GENKI.dev ヒロ氏
自己紹介
お話すること • オブジェクト指向ベースの話 • 読みやすさというより設計ベースの話 • 0 -> 1よりも1 ->
10寄りの話 • バックエンド寄りの話 • PHPベースでお話する
https://gihyo.jp/book/2022/978-4-297-12783-1 https://www.shoeisha.co.jp/book/detail/9784798150727
良いコードってなんやろか
読みやすい? 理解しやすい? それもあるが
プロダクトは作って終わりではない • 改修することがある • 運用もある • 新しく人も入ってくるしコードは読むし書くし
プロダクトは作って終わりではない • 改修することがある • 運用もある • 新しく人も入ってくるしコードは読むし書くし 変更に強い設計であったほうが、 多くのコストを支払わずにスケールすることができる
変更に弱いあるある • 影響範囲わからん。一箇所変更したら他がこわれた。 • 改修前の調査が大変 • 想定していたより時間がかかる • などなど
良いコードって 変更に強いということ (もちろん他にも定義はあると思っていて) (例えば認知負荷が低いとか)
変更に強い設計の勘所 責務 凝集度 単一責任原則 疎結合 目的 etc…
変更に強い設計の勘所 責務 凝集度 単一責任原則 疎結合 目的 etc…
凝集度 ~common.php~
凝集度 ~common.php~
凝集度 ~common.php~ • Commonという名のもとに なんでもかんでも放り込まれてしまう • ~~Managerとかも然り • 本来クラスはデータとロジックの 関連性が高ければ変更に強い
• なので関連するデータとロジックは クラス単位でまとめるべきである • データアクセスはインスタンス変数を使 う(凝集度を高める意味で)
凝集度 ~世直し(本来であればファイルも分ける)~
凝集度 ~世直し(本来であればファイルも分ける)~ • コード全体の見渡しがよくなる • データとロジックが関連することで 車輪の再発明のリスクも減らせる 番外編 • 本当は条件式も変数やインスタンスの
状態を見ないようにすべき • booleanを返す判定用のメソッドをつくる のが好ましい • 「尋ねるな、命じろ」
凝集度 ~世直し(本来であればファイルも分ける)~ • コード全体の見渡しがよくなる • データとロジックが関連することで 車輪の再発明のリスクも減らせる 番外編 • 本当は条件式も変数やインスタンスの
状態を見ないようにすべき • booleanを返す判定用のメソッドをつくる のが好ましい • 「尋ねるな、命じろ」
ソフトウェアにおける責務とは 「ある関心事について、正常に動作するよう制御する責任」 ソフトウェアはいろんな関心事を扱う DB操作、ドメインに対する操作、アプリケーションサービス、 UI層、、、、山程あるな。 で、今回はアプリケーションの設計の話なので。 責務について
• クラスは単一の責任を持つという考え方 • クラスに多くの責任がのしかかると、 それだけでバグのリスクを負う。 ◦ 変更に弱い ◦ 再利用性の低下 ◦
テストカバレッジの低下 • なのでクラスは一つの責任・機能に集中すべき 単一責任原則を結局話す
単一責任原則を結局話す
単一責任原則を結局話す
番外編
コメントアウト
https://twitter.com/t_wada/status/904916106153828352 コメントアウト
おこなっている処理よりも なぜそうしたか?の文脈がわかるほうが改修コストがかからない 例) // 浮動小数点をフロントに返したら表示がバグるので、 // 丸め処理をしている コメントアウト
Early Return
Early Return
ありがとうございました