Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
勘所を押さえて良いコードを書く
Search
hiro_shi
September 22, 2024
1
31
勘所を押さえて良いコードを書く
hiro_shi
September 22, 2024
Tweet
Share
More Decks by hiro_shi
See All by hiro_shi
本当にあった"なにもしてないのにこわれた"
164fm
0
7
スクラム開発をするなら残業しないほうがいい
164fm
0
9
Terraform import blockを使って 既存のAWSリソースをインポートした話
164fm
0
14
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
121
20k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
The Art of Programming - Codeland 2020
erikaheidi
56
14k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
253
22k
Making Projects Easy
brettharned
120
6.5k
We Have a Design System, Now What?
morganepeng
54
7.9k
It's Worth the Effort
3n
187
29k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
710
Optimising Largest Contentful Paint
csswizardry
37
3.5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
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
ありがとうございました