専門用語集
記事に出てくる専門用語をまとめています。本文中の点線が付いた用語にカーソルを合わせると、その場で定義が読めます。
用語の追加方法と、記事本文での <Term> の書き方は Markdown 記法リファレンス にまとめています。
英数
DI (Dependency Injection)
クラスが必要とする依存オブジェクトを、自分で生成せず外から渡してもらう設計手法。テスト時に差し替えられるようになり、依存の向きを制御できる。
詳しくは依存性注入とLaravelのコンテナ。
DIP (依存性逆転の原則)
SOLID の 5 番目。上位のモジュールが下位の実装に直接依存せず、両者が抽象に依存するようにする原則。
詳しくは依存性逆転の原則 — 抽象は誰のものか。
ISP (インターフェース分離の原則)
SOLID の 4 番目。利用者に不要なメソッドまで実装させる巨大なインターフェースを避け、用途ごとに小さく分ける原則。
詳しくはインターフェース分離の原則 — 動機の半分は言語に依存する。
LSP (リスコフの置換原則)
SOLID の 3 番目。派生型は基底型と入れ替えても、利用側のコードを壊さずに動作しなければならないという原則。
詳しくはリスコフの置換原則 — 型が通っても契約は守られない。
OCP (開放閉鎖の原則)
SOLID の 2 番目。機能追加のときに既存コードを書き換えず、新しいコードを足すだけで済む構造を目指す原則。
SOLID 原則
オブジェクト指向設計の指針として広く知られる 5 つの原則の頭字語。SRP・OCP・LSP・ISP・DIP から成る。
詳しくはSOLID 原則とSOLID は 1 つの理論ではない — 5 原則の出自。
SRP (単一責任の原則)
SOLID の 1 番目。1 つのクラスが変更を求められる理由は 1 つだけであるべきという原則。「1 つの仕事だけをする」という意味ではない。
YAGNI
You Aren't Gonna Need It の頭字語。いま必要と確定していない機能や抽象を先回りして作らない、という指針。
あ行
値オブジェクト (Value Object)
識別子ではなく保持する値そのもので同一性が決まるオブジェクト。生成後は変更せず、不正な値をコンストラクタで弾く使い方をする。
詳しくは例外設計とバリデーション。
委譲 (Delegation)
自分で処理せず、保持している別のオブジェクトに仕事を任せること。継承の代わりに振る舞いを再利用する手段として使う。
詳しくは継承とコンポジション。
か行
カプセル化 (Encapsulation)
データとそれを操作する手続きをクラスにまとめ、外部から直接触れる範囲を絞ること。内部表現を変えても利用側が壊れない状態を保つ。
詳しくはカプセル化と情報隠蔽。
凝集度 (Cohesion)
1 つのモジュール内の要素が、どれだけ同じ目的に向かっているかの度合い。高いほど良い設計とされる。
詳しくは凝集度・結合度とSOLID原則の総整理。
関連: 結合度。
継承 (Inheritance)
既存クラスの性質を引き継いで新しいクラスを定義する仕組み。実装の再利用ではなく、is-a の関係が成り立つときに使う。
詳しくは継承とコンポジション。
契約による設計 (Design by Contract)
呼び出し側が守る事前条件と、実装側が保証する事後条件を明示して設計する考え方。LSP を判断する物差しになる。
詳しくはリスコフの置換原則 — 型が通っても契約は守られない。
結合度 (Coupling)
モジュール同士がどれだけ強く依存し合っているかの度合い。低い (疎結合) ほど、片方の変更がもう片方に波及しにくい。
詳しくは凝集度・結合度とSOLID原則の総整理。
関連: 凝集度。
コンポジション (Composition)
他のオブジェクトを保持して機能を組み立てる手法。継承より結合が弱く、組み合わせを実行時に差し替えられる。
詳しくは継承とコンポジション。
関連: 継承。
さ行
サービスクラス
コントローラやモデルに置き場のない業務手続きを引き受けるクラス。呼び出し順序を持つ処理をまとめる場所として使う。
詳しくはサービスクラスへの責務分割。
純粋関数 (Pure Function)
同じ引数なら常に同じ値を返し、外部の状態を変更しない関数。テストが書きやすく、結果を予測しやすい。
詳しくは関数の定義。
関連: 副作用。
制御の反転 (IoC)
処理の流れを呼び出す側でなくフレームワークや上位の仕組みに握らせる考え方。DI はこれを実現する手段の 1 つ。
詳しくは依存性逆転の原則 — 抽象は誰のものか。
関連: DI。
責務 (Responsibility)
そのクラスや関数が引き受けている役割のこと。誰の要求で変更されるかを問うと境界が見えやすい。
詳しくは単一責任の原則。
早期リターン (Early Return)
条件を満たさない場合に関数の先頭で抜けることで、入れ子の深いネストを避ける書き方。ガード節とも呼ぶ。
詳しくは条件分岐。
た行
抽象化 (Abstraction)
具体的な実装の詳細を隠し、利用側が知るべき最小限だけを見せること。インターフェースや抽象クラスで表現する。
詳しくはインターフェースと抽象への依存。
は行
副作用 (Side Effect)
戻り値を返す以外に、外部の状態を変えてしまう処理のこと。ファイル書き込み・DB 更新・グローバル変数の書き換えなどが該当する。
詳しくは関数の定義。
関連: 純粋関数。
不変条件 (Invariant)
そのオブジェクトが存在する間、常に成り立っていなければならない条件。派生クラスはこれを弱められない。
詳しくはリスコフの置換原則 — 型が通っても契約は守られない。
ま行
マジックナンバー (Magic Number)
コード中に直接書かれた、意味の分からない数値やリテラル。名前付き定数に置き換えると意図が読み取れる。
詳しくは変数の定義。
ら行
リファクタリング (Refactoring)
外から見た振る舞いを変えずに、内部構造だけを整理すること。テストで振る舞いを固定してから進める。
詳しくはクラス設計のリファクタリング。