用語集
五十音順・アルファベット順の混合で、カテゴリごとに整理しています。各用語の詳細は詳細ページへのリンクを参照してください。
設計の基礎用語
| 用語 |
一言定義 |
詳細 |
| 責務 |
そのコードが引き受けている仕事と、その変更理由 |
責務と関心の分離 |
| 関心の分離 |
異なる理由で変更されるコードを別の場所に置くこと |
同上 |
| 凝集度 |
モジュール内部の要素がどれだけ関連し合っているか(高いほど良い) |
凝集度と結合度 |
| 結合度 |
モジュール同士が互いをどれだけ知っているか(低いほど良い) |
同上 |
| 依存 |
AがBを知っており、Bの変更でAが壊れうる関係 |
依存関係 |
| 循環依存 |
A→B→Aと依存が輪になった状態。分離・テスト不能の原因 |
同上 |
| 抽象化 |
使う側に重要なことだけ残し詳細を削ぎ落とすこと |
抽象化・カプセル化 |
| カプセル化 |
データとそれを操作するコードを1つにまとめること |
同上 |
| 情報隠蔽 |
変わりそうな決定を外から見えなくすること |
同上 |
| 継承 |
is-a関係。基底の実装とインターフェースを受け継ぐ |
継承・委譲・コンポジション |
| コンポジション |
has-a関係。機能を部品として持つ |
同上 |
| 委譲 |
仕事を持っている部品に転送すること |
同上 |
| ポリモーフィズム(多態) |
同じ呼び出しが相手によって違う振る舞いをすること |
ポリモーフィズム |
| インターフェース |
「何ができるか」だけを定めた約束 |
同上 |
| YAGNI |
You Aren't Gonna Need It。今必要ない機能は作らない |
YAGNI・KISS・DRY |
| KISS |
Keep It Simple。同じ問題を解けるなら単純な方を選ぶ |
同上 |
| DRY |
Don't Repeat Yourself。同じ知識を2か所に書かない |
同上 |
| 早すぎる抽象化 |
具体例が揃う前の共通化。間違った抽象を生みやすい |
同上 |
| 早すぎる最適化 |
計測せず推測で複雑化すること |
同上 |
| 技術的負債 |
「今すぐ動かす」ために「後で直すコスト」を借りること |
技術的負債 |
| コードの臭い |
バグではないが設計問題を示唆する兆候 |
同上 |
| リファクタリング |
外部の振る舞いを変えずに内部構造を改善すること |
同上 |
| SRP/OCP/LSP/ISP/DIP |
SOLID原則の5つ |
第2部 |
| ショットガン手術 |
1つの変更で多数のファイルを修正する羽目になる状態 |
SRP |
パターン用語
| 用語 |
一言定義 |
詳細 |
| デザインパターン |
繰り返し現れる設計問題への定型解のカタログ |
第3部 |
| GoF |
Gang of Four。23パターンを整理した4人の著者 |
同上 |
| Singleton |
唯一のインスタンス+全域アクセス(乱用注意) |
Singleton |
| Observer |
変化を購読者に通知する(C#のeventの正体) |
Observer |
| lapsed listener |
購読解除忘れで死んだ購読者がリストに残る問題 |
同上 |
| ダブルディスパッチ |
実行時の型×操作の2軸で処理が選ばれる仕組み |
Visitor |
| Game Loop |
入力→更新→描画を回し続けるゲームの心臓部 |
Game Loop |
| 固定タイムステップ |
更新を固定刻み(1/60秒等)で行う方式。決定性の基盤 |
同上 |
| ECS |
Entity Component System。データとロジックを分離し配列で処理 |
Component と ECS |
| Pub/Sub |
チャネル経由で発行者と購読者が互いに匿名の通知方式 |
Event Queue・Pub/Sub |
| Service Locator |
サービスの「電話帳」を1つ置き、必要な側が問い合わせる |
Service LocatorとDI |
| DI(依存性注入) |
必要な依存を外から渡してもらう方式 |
同上 |
| Object Pool |
生成破棄の激しいオブジェクトを確保済みプールで使い回す |
Object Pool |
| 世代付きハンドル |
index+世代番号で「解放済み参照」を検出できる参照方式 |
同上 |
| Dirty Flag |
変更があったときだけ高価な再計算をする目印 |
最適化系パターン |
| Spatial Partition |
空間をグリッド等に分割し近傍だけ調べる構造 |
同上 |
| Data Locality |
使うデータをメモリ上で隣接させて速くする原則 |
同上 |
| Double Buffer |
読む用と書く用の2枚を交換し、順序問題を消す |
同上 |
| Type Object |
「種類」をクラスでなくデータで表す |
Type Object |
| FSM |
有限ステートマシン。有限個の状態+遷移ルール |
ステートマシン |
| HSM |
階層型ステートマシン。共通遷移を親状態に括り出す |
同上 |
| Behavior Tree |
毎フレーム根から評価する行動選択ツリー |
BTとBlackboard |
| Blackboard |
AIの知識を集約する共有メモ帳 |
同上 |
| MVC/MVP/MVVM |
ModelとViewを分離するUI設計の3流派 |
MVC・MVP・MVVM |
| データバインディング |
ViewModelとViewを自動同期する機構(MVVMの前提) |
同上 |
| Reactive Programming |
値の変化をストリームとして合成・購読するスタイル |
Reactive |
C++言語用語
| 用語 |
一言定義 |
詳細 |
| 値セマンティクス |
代入=中身のコピー、という既定の意味論 |
値と参照 |
| ポインタ |
アドレスを入れる変数。null・差し替え可 |
同上 |
| 参照 |
既存の変数の別名。null不可・差し替え不可 |
同上 |
| const correctness |
変更しないものにconstを付け通す規律 |
const |
| SSO |
小文字列最適化。短い文字列をヒープ確保なしで持つ実装 |
配列と文字列 |
| ムーブ |
コピーの代わりに中身(所有権)を移す仕組み |
コピーとムーブ |
| Rule of Zero/Three/Five |
特殊メンバ関数を書く/書かないの経験則 |
同上 |
| RAII |
リソースの確保と解放をオブジェクトの寿命に一致させる |
RAII |
| 仮想関数 |
実行時に実際の型のメソッドが呼ばれる関数 |
継承と仮想関数 |
| 純粋仮想関数 |
= 0で宣言し、派生に実装を強制する仮想関数 |
同上 |
| 抽象クラス |
純粋仮想を持ちインスタンス化できないクラス |
同上 |
| スライシング |
派生を値コピーすると基底部分だけ写る事故 |
同上 |
| オーバーロード |
同名関数を引数違いで複数定義(コンパイル時解決) |
オーバーロード |
| テンプレート |
型を引数にしたコードの雛形。使用時に実体化 |
テンプレート |
| concepts |
テンプレート引数の制約を宣言するC++20機能 |
同上 |
| ラムダ式 |
その場で作る無名関数オブジェクト。キャプチャ可 |
ラムダ |
| std::function |
呼び出せるものを統一的に入れる箱(型消去) |
同上 |
| enum class |
スコープ付き・暗黙変換なしの列挙型(推奨) |
enum |
| スタック巻き戻し |
例外発生時にデストラクタを実行しながら遡る処理 |
例外 |
| constexpr |
コンパイル時に実行できる計算・定数 |
constexpr |
| consteval |
必ずコンパイル時に実行される関数(C++20) |
同上 |
| inline |
現代の意味は「多重定義の許可」(展開は最適化器の判断) |
static・inline・friend |
| dynamic_cast |
実行時検査つきダウンキャスト(RTTI使用) |
キャスト |
| unique_ptr / shared_ptr / weak_ptr |
単独所有/共有所有/弱参照のスマートポインタ |
スマートポインタ |
| イテレータ無効化 |
コンテナ操作で既存のイテレータ・参照が無効になること |
STL |
| 未定義動作(UB) |
標準が一切の要求をしない状態。何が起きてもよい |
未定義動作 |
| 実装定義 |
処理系が決めて文書化する動作(intのサイズ等) |
同上 |
| 未規定 |
候補のどれかになるが文書化義務のない動作(評価順等) |
同上 |
ビルド・内部用語
| 用語 |
一言定義 |
詳細 |
| プリプロセッサ |
#include展開・#define置換を行うテキスト処理 |
ビルドの旅 |
| 翻訳単位 |
1つの.cppからincludeを展開してできる、独立コンパイルの単位 |
翻訳単位 |
| 宣言と定義 |
存在の約束(何度でも可)と実体(原則1つ) |
同上 |
| ODR |
One Definition Rule。定義はプログラム全体で1つ |
同上 |
| 前方宣言 |
「この型が存在する」とだけ伝える宣言。include削減の道具 |
同上 |
| include guard / #pragma once |
同一ヘッダーの二重取り込み防止 |
同上 |
| シンボル |
リンカが使う「名前→機械語/データの場所」の項目 |
シンボル |
| 名前修飾(mangling) |
関数名に型情報を埋め一意な文字列にする仕組み |
同上 |
| リンケージ |
名前が翻訳単位を越えて見えるか(外部/内部) |
同上 |
| ABI |
バイナリレベルの互換性の取り決め。処理系間で異なる |
同上 |
| 静的/動的リンク |
ライブラリを実行ファイルに焼き込む/実行時に結合する |
ライブラリ |
| DLL |
Windowsの動的ライブラリ |
同上 |
| テンプレートの実体化 |
使用時に型ごとの実物コードが生成されること |
実体化とinline |
| vtable / vptr |
型ごとの仮想関数表/各オブジェクトが持つ表へのポインタ |
vtable |
| 脱仮想化 |
型が証明できる仮想呼び出しを直接呼び出しに変える最適化 |
同上 |
| RTTI |
実行時型情報。typeidとdynamic_castの基盤 |
RTTIと例外の実装 |
| ゼロコスト例外 |
投げなければほぼ無料、投げたら高い例外実装方式 |
同上 |
| アラインメント |
型ごとの「この倍数のアドレスに置く」要求 |
メモリレイアウト |
| パディング |
アラインメントのため構造体に入る詰め物 |
同上 |
| エンディアン |
複数バイト数値のバイト順(リトル/ビッグ) |
同上 |
| コールスタック |
戻り先とローカル変数を積む実行の仕組み |
関数呼び出し |
| 呼出規約 |
引数・戻り値をどのレジスタ/スタックで渡すかの取り決め |
同上 |
| レジスタ |
CPU内部の超高速な記憶場所 |
同上 |
| キャッシュライン |
メモリを読む単位(典型64バイト) |
キャッシュ |
| 分岐予測 |
ifの行き先を予測して投機実行するCPU機構 |
同上 |
| SIMD |
1命令で複数データを同時計算する機構 |
同上 |
| as-ifルール |
観測可能な動作が同じなら何をしてもよい、という最適化の原則 |
最適化 |
| ゼロコスト抽象化 |
使わない機能の代金は払わない、というC++の設計哲学 |
同上 |
| PCH |
プリコンパイル済みヘッダー。ビルド高速化 |
ビルド時間 |
| Unity Build |
複数.cppを結合してコンパイルする高速化(Unityエンジンとは無関係) |
同上 |
| サニタイザ |
実行時にUB・メモリバグを検出する機構(ASan等) |
品質ツール |
| PDB |
MSVCのデバッグ情報ファイル。クラッシュ解析に必須 |
ビルド構成 |
| 未解決外部シンボル |
定義が見つからないリンクエラー |
リンクエラー |
メモリ・実行時用語
| 用語 |
一言定義 |
詳細 |
| 記憶域期間 |
オブジェクトがいつ生まれいつ死ぬかの分類(自動/静的/動的) |
記憶域期間 |
| 所有権 |
オブジェクトを破棄する責任を誰が持つか |
所有権と借用 |
| 借用 |
所有せず一時的に使わせてもらうこと(参照・非所有ポインタ) |
同上 |
| dangling pointer |
死んだオブジェクトを指すポインタ |
メモリバグ |
| use-after-free (UAF) |
解放済みメモリへのアクセス。UBの代表 |
同上 |
| double free |
同じメモリの二重解放 |
同上 |
| memory leak |
解放されないメモリが溜まり続けること |
同上 |
| buffer overflow |
確保領域の外への読み書き |
同上 |
| stack overflow |
コールスタックの使い切り(深い再帰・巨大ローカル) |
同上 |
| data race |
同期なしの並行アクセス(書き込み含む)。UB |
並行バグ |
| race condition |
タイミングで結果が変わる論理バグ |
同上 |
| false sharing |
別データが同一キャッシュラインで奪い合いになる性能問題 |
同上 |
| AoS / SoA |
構造体の配列/配列の構造体。データレイアウトの2方式 |
AoSとSoA |
| placement new |
指定したメモリ上にオブジェクトを構築する低レベル機能 |
アロケータ |
| arena allocator |
ポインタを進めるだけの高速アロケータ。一括Reset |
同上 |
| fragmentation |
確保・解放の繰り返しでヒープに使えない穴が増えること |
同上 |
| GC |
ガベージコレクション。到達可能性でメモリを自動回収 |
GC比較 |
| GC Alloc |
Unityで管理ヒープ確保を指す俗語。後のGCスパイクの原因 |
同上 |
Unity/UE対応用語
| 用語 |
一言定義 |
詳細 |
| IL2CPP |
C#(IL)をC++に変換してビルドするUnityの仕組み |
IL2CPP |
| AOT / JIT |
事前コンパイル/実行時コンパイル |
同上 |
| P/Invoke |
C#からネイティブ関数を呼ぶ仕組み(C ABI経由) |
同上 |
| Assembly Definition |
Unityのアセンブリ分割・依存宣言の仕組み |
ヘッダーとasmdef |
| UObject |
UEの管理対象基底クラス(リフレクション+GC付き) |
UObject |
| CDO |
Class Default Object。UEがクラスごとに作る雛形インスタンス |
同上 |
| UPROPERTY |
UEのリフレクション・GC追跡・エディタ公開の印 |
UEのGC |
| UHT |
Unreal Header Tool。マクロを読んでコードを生成する |
リフレクションとUHT |
| UBT |
Unreal Build Tool。UE独自のビルドシステム |
UBT |
| TObjectPtr / TWeakObjectPtr / TSoftObjectPtr |
UObject用の強参照/弱参照/パス参照 |
UEのスマートポインタ |
| Subsystem |
UE公式のService Locator(寿命別のサービス置き場) |
Gameplay Framework |
| Blackboard(UE) |
UE標準のAI用データ共有アセット |
BT |
目次に戻る