Clean Code

ソフトウェア設計(せっけい) 原則(げんそく)保守性(ほしゅせい)拡張性(かくちょうせい)(たか) いコードを() くために。

SOLID 原則

Single Responsibility Principle (単一責任)

クラスは単一(たんいつ)責任(せきにん) または変更(へんこう) 理由(りゆう) のみを() つべき。

コアコンセプト:

  • (かく) クラスは(ひと) つのことだけを担当(たんとう)
  • 単一(たんいつ) 機能(きのう)集中(しゅうちゅう)
  • 単一(たんいつ) クラスに複数(ふくすう) 機能(きのう)実装(じっそう) しない

(れい) ユーザーデータを処理(しょり) するクラスは、同時(どうじ) にデータベース接続(せつぞく)処理(しょり) すべきではない。

Open/Closed Principle (開放閉鎖)

ソフトウェア実体(じったい)拡張(かくちょう)(たい) して(ひら) いており、修正(しゅうせい)(たい) して() じているべき。

コアコンセプト:

  • 既存(きそん) コードを修正(しゅうせい) せず拡張(かくちょう)新機能(しんきのう)実現(じつげん)
  • interface/abstract/extends で機能(きのう)拡張(かくちょう)
  • 既存(きそん) コードを継承(けいしょう)実装(じっそう) する(あたら) しいクラスを設計(せっけい)

Liskov Substitution Principle (リスコフの置換)

サブクラスは(おや) クラスを置換(ちかん) しても正確性(せいかくせい)影響(えいきょう) しない。

コアコンセプト:

  • サブクラスは(おや) クラスの動作(どうさ)変更(へんこう) しない
  • 置換(ちかん) () もシステム動作(どうさ)一貫(いっかん)
  • 継承(けいしょう) 関係(かんけい)正確性(せいかくせい)確保(かくほ)

Interface Segregation Principle (インターフェース分離)

クラスは使用(しよう) しないインターフェースメソッドの実装(じっそう)強制(きょうせい) されるべきではない。

コアコンセプト:

  • (おお) きなインターフェースをより(ちい) さく専門的(せんもんてき) なものに分割(ぶんかつ)
  • クラスは本当(ほんとう)必要(ひつよう) なインターフェースのみ実装(じっそう)
  • 肥大化(ひだいか) したインターフェース設計(せっけい)() ける

Dependency Inversion Principle (依存性逆転)

上位(じょうい) モジュールは下位(かい) モジュールに依存(いぞん) すべきではなく、両者(りょうしゃ) とも抽象(ちゅうしょう)依存(いぞん) すべき。

コアコンセプト:

  • 具体的(ぐたいてき)実装(じっそう) ではなく抽象(ちゅうしょう)依存(いぞん)
  • システムの結合度(けつごうど)削減(さくげん)
  • 柔軟性(じゅうなんせい)保守性(ほしゅせい)向上(こうじょう)

F.I.R.S.T テスト原則

()単体(たんたい) テストを() くための(いつ) つの原則(げんそく)

原則(げんそく)説明(せつめい)
Fast (高速(こうそく) )テストは高速(こうそく)実行(じっこう) されるべき
Independent (独立(どくりつ) )テスト(かん)相互(そうご) 依存(いぞん) があってはならない
Repeatable (再現可能(さいげんかのう) )どの環境(かんきょう) でも()(かえ)実行(じっこう) 可能(かのう)
Self-Validating (自己検証(じこけんしょう) )テストレポートは成功(せいこう)失敗(しっぱい)明確(めいかく)表示(ひょうじ)
Timely (適時(てきじ) )本番(ほんばん) コードを()(まえ) にテストを() く (TDD)

KISS 原則

Keep It Simple, Stupid

シンプルに(たも) ち、不必要(ふひつよう)複雑(ふくざつ) さを() ける。

コアコンセプト:

  • シンプルな解決策(かいけつさく)複雑(ふくざつ)解決策(かいけつさく) より(すぐ) れている
  • 過剰(かじょう) 設計(せっけい)() ける
  • 可読性(かどくせい)優先(ゆうせん)