Slide 1

Slide 1 text

英語文法から学ぶ、 クリーンな設計の 秘訣 P H P E R K A I G I 2 0 2 5 N O B L E N O M A D

Slide 2

Slide 2 text

THANK YOU ALL FOR TAKING THE TIME TO LISTEN MY SESSION TODAY.

Slide 3

Slide 3 text

I INTRODUCE MY SESSION FOR CLEAN CODE, BY ENGLISH.

Slide 4

Slide 4 text

全部英語で発表した かったけど やっぱりきついので 日本語に 戻します

Slide 5

Slide 5 text

自己紹介 • 名前 • NobleNomad • 職場 • 株式会社ウィルゲート 24卒 • 好きな言語・FW・ライブラリ • PHP, React • 趣味 • ゲーム制作・ドット絵制作

Slide 6

Slide 6 text

みなさん

Slide 7

Slide 7 text

設計意識して ますか?

Slide 8

Slide 8 text

設計原則 SOLID

Slide 9

Slide 9 text

設計原則 SOLID 凝集性・結合度

Slide 10

Slide 10 text

設計原則 SOLID 凝集性・結合度 関心の分離

Slide 11

Slide 11 text

設計原則 SOLID 凝集性・結合度 関心の分離 DDD

Slide 12

Slide 12 text

設計原則 SOLID 凝集性・結合度 関心の分離 DDD etc...

Slide 13

Slide 13 text

設計原則 SOLID 凝集性・結合度 関心の分離 DDD etc... 覚えるべきことが 多すぎる!!

Slide 14

Slide 14 text

設計原則 SOLID 凝集性・結合度 関心の分離 DDD etc... 覚えるべきことが 多すぎる!! 結局どう活かせば いいの?

Slide 15

Slide 15 text

そこで

Slide 16

Slide 16 text

話 す内 容 - 英 語 の 「 S VO 」 ル ー ル に 着 目 - 「 誰 が 何 を す る か 」 と い う 問 い に 徹 底 的 に 立 ち 返 る 。 - → 設 計 の 基 本 原 則 を 劇 的 に 実 現 で き る ! SVOを意識すればきれいな設計ができる!

Slide 17

Slide 17 text

お こと わ り • あ く ま で 、 筆 者 が 試 し た ら う ま く 行 っ た 、 N = 1 の 経 験 則 で す • 例 外 ・ あ て は な ら な い ケ ー ス な ど も 想 定 さ れ ま す の で ご 了 承 く だ さ い 。 M (_ _ ) M – ( 思 想 が 強 め で す )

Slide 18

Slide 18 text

な ぜ 「 英 語 文 法 」 な の か ?

Slide 19

Slide 19 text

な ぜ「 英 語文 法 」な の か? 英語 • 原則「主語→動詞→目的語」 • 語順が明確 日本語 • 「が・を」など助詞で意味を 補完 • 解釈に幅が出る

Slide 20

Slide 20 text

な ぜ「 英 語文 法 」な の か? 英語:"The user saves the data." 日本語訳:『ユーザーがデータを保存する』 • 一目で「誰が」「何をする」のかが明確 – この明快さが、クラス設計にそのまま応用できる理由! S V O

Slide 21

Slide 21 text

実 践 例 S V O

Slide 22

Slide 22 text

実 践 例 ユーザーがデータを保存する S V O

Slide 23

Slide 23 text

SVOの語順 O (Object:目的語) "the data"(データ) → 動詞の影響を受ける対象、処理の結果などを明示 V (Verb:動詞) "saves"(保存する) → 主語が実行する『何をするか』、クラスが持つ具体的な処理や責務 S (Subject:主語) "The user"(ユーザー) → 文章の中心となる『誰が』、クラスやエンティティそのもの

Slide 24

Slide 24 text

つまり • クラスやコードだけで「ユーザーがデータを保存する」と読める メリット1 • ドメイン知識を持たない人でも「これが何を意味するのか」が直感的に伝わる メリット2 一見で読みやすいコードになる!

Slide 25

Slide 25 text

さらに!

Slide 26

Slide 26 text

SVOを守ること で保守性が あがる!

Slide 27

Slide 27 text

「 S V O 」 を 守 る と 何 が い い の か 関数→動詞 • 関心の分離が保た れる! クラス →主語 • クラスの関心事が 明確→保守性向上

Slide 28

Slide 28 text

関数→動詞 関数≠動詞 他オブジェクトのデータを操作するメソッド (Feature Envy)になってしまう 関数=動詞として考える 自オブジェクトのデータを操作するメソッド になる 関数=動詞として考える 責務が自然と適切クラスに集約される! →関心の分離が保たれる!

Slide 29

Slide 29 text

関数→動詞2 『良いコード/悪いコードで学ぶ設計入門』(通称ミノ駆動本)によると… ➢「動詞+目的語」関数は無責任な関数を追加しやすくなるこれを防ぐには 「動詞一語で済むようにクラス設計」をする。 ➢どうしても「動詞 + 目的語」になるのであれば、目的語の概念を表現する クラスを新しく作ること 関数は動詞一語で済むようにする →自然と関心事が明確になる!

Slide 30

Slide 30 text

クラス →主語 クラス名: Utility・Manager • 「とりあえず全部ここに書けばい いやろ」 • そして神クラスへ • クラス間依存が増大してしまいが ち クラス名: User • 「ユーザ「が ・に」できる操作」 のみ • 凝集性高、につながる

Slide 31

Slide 31 text

クラス →主語2 Userクラス • 「クライアント?運営?全部こ こに書けばいいやろ」 • そして神クラスへ • 4000行クラスなど、肥大化につ ながってしまう Clientクラス・ActiveUserクラス • クラスの肥大化を防げる! • 関心事が明確→保守性向上 さらに言うと…… クラス名はある程度限定的にすると 関心事が明確→保守性向上!

Slide 32

Slide 32 text

まとめ

Slide 33

Slide 33 text

まとめ - 「 S VO 」 を 意 識 し た ク ラ ス 設 計 - コ ー ド が 読 み や す く な る - ク ラ ス の 関 心 事 が 明 確 に - 関 心 の 分 離 が 保 た れ る SVO文法は「誰が」「何をする」のかが 明確・かつ誰でも容易に理解できる明快なルール これをクラス設計に応用すると自然ときれいな設計ができる!