専門用語集
記事に出てくる専門用語をまとめています。本文中の点線が付いた用語にカーソルを合わせると、その場で定義が読めます。
用語の追加方法と、記事本文での <Term> の書き方は Markdown 記法リファレンス にまとめています。
英数
DI (Dependency Injection)
クラスが必要とする依存オブジェクトを、自分で生成せず外から渡してもらう設計手法。テスト時に差し替えられるようになり、依存の向きを制御できる。
詳しくは依存性注入とLaravelのコンテナ。
DIP (依存性逆転の原則)
SOLID の 5 番目。上位のモジュールが下位の実装に直接依存せず、両者が抽象に依存するようにする原則。
詳しくは依存性逆転の原則: 抽象は誰のものか。
ISP (インターフェース分離の原則)
SOLID の 4 番目。利用者に不要なメソッドまで実装させる巨大なインターフェースを避け、用途ごとに小さく分ける原則。
詳しくはインターフェース分離の原則: 動機の半分は言語に依存する。
LSP (リスコフの置換原則)
SOLID の 3 番目。派生型は基底型と入れ替えても、利用側のコードを壊さずに動作しなければならないという原則。
詳しくはリスコフの置換原則: 型が通っても契約は守られない。
OCP (開放閉鎖の原則)
SOLID の 2 番目。機能追加のときに既存コードを書き換えず、新しいコードを足すだけで済む構造を目指す原則。
Red-Green-Refactor
テストを書いて落ちることを確かめ (Red)、通し (Green)、重複を消す (Refactor) という 3 拍のサイクル。各拍でやってよいことが決まっており、拍をまたぐたびにテストを走らせる。
詳しくはRed-Green-Refactor: 3 拍のサイクルと 3 つの実装戦略。
関連: テスト駆動開発、トライアンギュレーション。
SOLID 原則
オブジェクト指向設計の指針として広く知られる 5 つの原則の頭字語。SRP・OCP・LSP・ISP・DIP から成る。
詳しくはSOLID 原則とSOLID は 1 つの理論ではない: 5 原則の出自。
SRP (単一責任の原則)
SOLID の 1 番目。1 つのクラスが変更を求められる理由は 1 つだけであるべきという原則。「1 つの仕事だけをする」という意味ではない。
WAI-ARIA
W3C が定めた、HTML の要素に役割・状態・性質を補うための属性の仕様。role 属性と aria- で始まる属性から成り、スクリーンリーダーなどの支援技術に UI の意味を伝える。
詳しくはロジック層とデザイン層: data 属性でつなぐ境界。
関連: アクセシブルネーム。
YAGNI
You Aren't Gonna Need It の頭字語。いま必要と確定していない機能や抽象を先回りして作らない、という指針。
あ行
アクセシブルネーム (Accessible Name)
支援技術が要素を読み上げたり探したりするときに使う名前。ボタンなら中の文字、ダイアログなら aria-labelledby が指す要素の文字というように、要素の内容や属性から決まる。
詳しくは役割でテストする: ヘッドレス UI がテストにもたらすもの。
関連: WAI-ARIA。
値オブジェクト (Value Object)
識別子ではなく保持する値そのもので同一性が決まるオブジェクト。生成後は変更せず、不正な値をコンストラクタで弾く使い方をする。
詳しくは例外設計とバリデーション。
歩くスケルトン (Walking Skeleton)
端から端まで通る、ごく小さな実装。機能は最小でよく、経路が 1 本つながっていることを先に確かめる。
詳しくは歩くスケルトン: 外から 1 本通す。
委譲 (Delegation)
自分で処理せず、保持している別のオブジェクトに仕事を任せること。継承の代わりに振る舞いを再利用する手段として使う。
詳しくは継承とコンポジション。
か行
カプセル化 (Encapsulation)
データとそれを操作する手続きをクラスにまとめ、外部から直接触れる範囲を絞ること。内部表現を変えても利用側が壊れない状態を保つ。
詳しくはカプセル化と情報隠蔽。
凝集度 (Cohesion)
1 つのモジュール内の要素が、どれだけ同じ目的に向かっているかの度合い。高いほど良い設計とされる。
詳しくは凝集度・結合度とSOLID原則の総整理。
関連: 結合度。
継承 (Inheritance)
既存クラスの性質を引き継いで新しいクラスを定義する仕組み。実装の再利用ではなく、is-a の関係が成り立つときに使う。
詳しくは継承とコンポジション。
契約による設計 (Design by Contract)
呼び出し側が守る事前条件と、実装側が保証する事後条件を明示して設計する考え方。LSP を判断する物差しになる。
詳しくはリスコフの置換原則: 型が通っても契約は守られない。
結合度 (Coupling)
モジュール同士がどれだけ強く依存し合っているかの度合い。低い (疎結合) ほど、片方の変更がもう片方に波及しにくい。
詳しくは凝集度・結合度とSOLID原則の総整理。
関連: 凝集度。
コンポジション (Composition)
他のオブジェクトを保持して機能を組み立てる手法。継承より結合が弱く、組み合わせを実行時に差し替えられる。
詳しくは継承とコンポジション。
関連: 継承。
さ行
サービスクラス
コントローラやモデルに置き場のない業務手続きを引き受けるクラス。呼び出し順序を持つ処理をまとめる場所として使う。
詳しくはサービスクラスへの責務分割。
純粋関数 (Pure Function)
同じ引数なら常に同じ値を返し、外部の状態を変更しない関数。テストが書きやすく、結果を予測しやすい。
詳しくは関数の定義。
関連: 副作用。
スタブ (Stub)
決まった値を返すだけのテストダブル。呼ばれ方を記録せず、検証もしない。
スパイ (Spy)
呼ばれ方を記録するテストダブル。検証はテストの後半で、記録を読んで行う。
制御の反転 (IoC)
処理の流れを呼び出す側でなくフレームワークや上位の仕組みに握らせる考え方。DI はこれを実現する手段の 1 つ。
詳しくは依存性逆転の原則: 抽象は誰のものか。
関連: DI。
責務 (Responsibility)
そのクラスや関数が引き受けている役割のこと。誰の要求で変更されるかを問うと境界が見えやすい。
詳しくは単一責任の原則。
早期リターン (Early Return)
条件を満たさない場合に関数の先頭で抜けることで、入れ子の深いネストを避ける書き方。ガード節とも呼ぶ。
詳しくは条件分岐。
た行
抽象化 (Abstraction)
具体的な実装の詳細を隠し、利用側が知るべき最小限だけを見せること。インターフェースや抽象クラスで表現する。
詳しくはインターフェースと抽象への依存。
継ぎ目 (Seam)
その場所を編集せずに振る舞いを変えられる場所。テストのために依存を差し替える入口になる。
関連: 特性テスト。
テスト駆動開発 (TDD)
実装より先にテストを書き、落ちることを確かめてから、そのテストを通す形で実装を進める書き方。テストを先に書くことと、落ちるのを確かめることが要件で、カバレッジを上げる活動とは別。
詳しくはTDD とは何で、何ではないか: テストを書くこととの違い。
関連: Red-Green-Refactor。
テストダブル (Test Double)
テストのために本物の代わりへ差し込むオブジェクトの総称。Dummy・スタブ・スパイ・モック・フェイクの 5 つに分けて呼ぶ。
テストピラミッド
どの層にどれだけテストを書くかの配分を、下を厚く上を薄くした三角形で表した図。単体テストを土台に置き、結合テストと E2E テストを絞る。
特性テスト (Characterization Test)
既存コードのいまの振る舞いを、正しさを問わずそのまま固定するテスト。変更の前後で振る舞いが変わっていないことを確かめる手段になる。
関連: 継ぎ目。
トライアンギュレーション (Triangulation)
2 つ目以降の例を足して、実装の一般化を迫る進め方。1 例だけなら定数で通るものを、例を増やして一般解へ押し出す。
詳しくはRed-Green-Refactor: 3 拍のサイクルと 3 つの実装戦略。
は行
ビジュアルリグレッションテスト (VRT)
画面を画像として保存しておき、変更後の画像と比べて、見た目の意図しない変化を検知するテスト。基準になる画像を baseline と呼ぶ。
詳しくはStorybook でテストする: play 関数と Chromatic。
フェイク (Fake)
本物と同じ働きをする簡易実装のテストダブル。配列で動くリポジトリのように、書いたものを後から読める。
フォーカストラップ (Focus Trap)
モーダルなどが開いている間、Tab キーで動くフォーカスをその中に閉じ込める仕組み。背景に隠れた要素へキーボードの操作が抜けるのを防ぐ。
詳しくはロジック層とデザイン層: data 属性でつなぐ境界。
副作用 (Side Effect)
戻り値を返す以外に、外部の状態を変えてしまう処理のこと。ファイル書き込み・DB 更新・グローバル変数の書き換えなどが該当する。
詳しくは関数の定義。
関連: 純粋関数。
不変条件 (Invariant)
そのオブジェクトが存在する間、常に成り立っていなければならない条件。派生クラスはこれを弱められない。
詳しくはリスコフの置換原則: 型が通っても契約は守られない。
ヘッドレス UI (Headless UI)
見た目を持たず、振る舞いと HTML の構造と支援技術向けの属性だけを提供する UI 部品、またはその部品集。色や余白などのスタイルは使う側が書く。
詳しくはなぜ Base UI と Tailwind CSS を組み合わせるのか: ヘッドレス UI という分け方。
ま行
マジックナンバー (Magic Number)
コード中に直接書かれた、意味の分からない数値やリテラル。名前付き定数に置き換えると意図が読み取れる。
詳しくは変数の定義。
モック (Mock)
期待する呼ばれ方を先に設定し、その通りに呼ばれたかを検証するテストダブル。検証を自分で行う点がスパイと違う。
ら行
リファクタリング (Refactoring)
外から見た振る舞いを変えずに、内部構造だけを整理すること。テストで振る舞いを固定してから進める。
詳しくはクラス設計のリファクタリング。