S01 知ったかぶり禁止の用語整理: 現場で詰む単語を先に潰す ― 壁の先へ
知らない単語が1つでも混ざると、その場は「たぶんこうだろう」で話を通してしまう。
会話のテンポを止めたくなくて、分かったふりで流してしまう。
そうして前に進むと、後で辻褄が合わない箇所が出て、指摘された瞬間に根拠が言えずテンパる。
このページは、そのズレを最初に潰すための用語整理。
このページのゴール
- 単語の意味を「何の話か(言語/ランタイム/画面/運用)」まで含めて揃える
- 似ている概念を先に切り分け、混同による詰みを減らす
- よくある誤解パターンを対比表で先に潰す
- 個別記事の前提をここへ寄せ、同じ説明の再発を減らす
- 切り分け時に見る場所(どこを見るか)を短く残す
カテゴリ別索引(カテゴリへジャンプ)
誤解しやすい対比表(混ざると詰む所)
| 取り違え |
別物である理由 |
迷った時に見る場所 |
| var vs dynamic |
varはコンパイル時に型が決まる(静的)。dynamicは実行時バインドが混ざる |
型が確定するタイミング(コンパイル/実行) |
| async(非同期) vs parallel(並列) |
asyncは待ち(I/O等)でスレッドを塞がない話。並列は同時実行の話 |
CPU仕事か、待ち仕事か |
| await vs Task.Run |
awaitは待つ構文。Task.Runはスレッドプールへ投げる手段 |
「待ち」か「CPUを別スレッドへ逃がす」か |
| SynchronizationContext vs TaskScheduler |
前者はawait後の継続(続き)の戻り先。後者はTaskをどこで実行するか |
継続の戻り先か、実行の行き先か |
| Invoke/BeginInvoke vs .Result/.Wait() |
前者は画面スレッドへ投げる。後者は同期ブロックで画面スレッドを塞ぐ |
画面スレッドを塞いでいないか |
| SendMessage vs PostMessage |
SendMessageは同期で相手が処理し終わるまで戻らない。PostMessageは非同期でキューに積む |
呼び出し側が待つか、待たないか |
| StringComparison.Ordinal vs CurrentCulture |
Ordinalはコードポイント準拠。CurrentCultureはロケール依存の比較 |
比較がロケールに依存してよいか |
| float/double vs decimal |
前者は二進浮動小数で誤差が出る。後者は十進で金額向き |
金額/桁/丸めの要件 |
| discard variable() vs discard pattern() |
代入/outでの _ は「使わない」。パターンの _ は「それ以外」 |
_ が出ている構文(代入/パターン) |
| throw; vs throw ex; |
throw;はスタックトレースを保持。throw ex;は痕跡を崩しやすい |
catch内の投げ直しの書き方 |
| CI vs CD |
CIは統合を壊さないための自動化。CDは配布/リリースまでの自動化 |
自動化の対象(ビルド/テスト/配布) |
| DI vs Service Locator |
DIは依存を外から渡す。Service Locatorは中で探して引く |
依存が見えるか、隠れるか |
型と省略
| 用語 |
ひとことで |
混ざりやすい相手 |
最短チェック |
| var |
右辺から型推論する省略記法(静的) |
dynamic, object |
右辺だけで型と役割が読めるか |
| dynamic |
実行時にメンバ解決が混ざる |
var |
実行時例外を許容できる局所か |
| object |
なんでも入る箱 |
dynamic |
取り出す側で型判定が増えていないか |
| null |
値が無い状態 |
""(空文字) |
仕様として無しを許すか、例外か |
| null許容注釈 |
コンパイラ警告を増減する情報 |
ランタイムのnull |
「落ちる」か「警告」かを分ける |
| ジェネリクス(TSourceなど) |
型を引数で受け取る |
var |
入力→出力の型対応を追う |
関連: R02 var裁判の終わらせ方(可読性/型推論の迷いどころ)
補足: 言語機能とターゲット(.NET 8 / .NET Framework 4.8)の切り分け
varやdiscard等は、ランタイム差というより「コンパイラ(言語機能)側」の要素が強い。
同じ.NET Framework 4.8でも、言語バージョン設定で使える記法が変わる。
議論が割れたら「どのランタイムか」ではなく「どのC#記法か」へ戻すと速い。
関数とラムダ
| 用語 |
ひとことで |
混ざりやすい相手 |
最短チェック |
| delegate |
関数を値として持つ型 |
Action/Func |
受け口(引数)と返り口(戻り値)を確認 |
| Action |
戻り値なしのdelegate |
Func |
戻り値が要らない場面か |
| Func |
戻り値ありのdelegate |
Action |
戻り値が「判定」なら捨てない |
| ラムダ式 |
その場で関数を作る記法 |
メソッド参照 |
長くなるなら名前付きへ戻せるか |
| クロージャ(キャプチャ) |
外側変数を掴んだラムダ |
ループ変数 |
いつ実行され、何を掴むかを見る |
関連: K26 いまさら聞けないラムダ式入門(delegate/Action/Func/クロージャ)
捨てると分解と分岐
| 用語 |
ひとことで |
混ざりやすい相手 |
最短チェック |
| discard(_) |
受け取ったが使わない意思表示 |
例外握り潰し |
切り分けに必要な値まで捨てていないか |
| out |
追加の戻り値を返す手段 |
戻り値 |
成否判定の主役がどこかを見る |
| タプル |
複数値をまとめて返す |
out |
要素の役割が名前で読めるか |
| 分解代入 |
タプル等を要素で受け取る |
discard |
判定軸(ok/status等)を捨てていないか |
| パターン(switch/is) |
値の形で分岐する |
if/else |
条件の漏れが“それ以外”に落ちていないか |
| discard pattern(_) |
switch等の「それ以外」 |
discard(_) |
代入の _ と同じ見た目で意味が別 |
関連: R14 _ (discard) の使いどころ(out/戻り値を捨てる基準)
非同期と画面
| 用語 |
ひとことで |
混ざりやすい相手 |
最短チェック |
| Task |
非同期処理の結果(将来値) |
Thread |
スレッドそのものではない |
| async/await |
待ちでスレッドを塞がない構文 |
並列 |
待ち(I/O)かCPU仕事か |
| デッドロック |
互いに待ち続けて進まない |
フリーズ |
.Result/.Wait() が混ざっていないか |
| 画面スレッド |
画面更新を担う主スレッド |
ワーカースレッド |
画面操作が別スレッドに出ていないか |
| メッセージループ |
入力/描画を回す仕組み |
DoEvents |
ループを塞ぐと固まる |
| SynchronizationContext |
await後の継続(続き)の戻り先 |
TaskScheduler |
継続の戻り先と実行の行き先を分ける |
| ConfigureAwait(false) |
文脈へ戻らない指定 |
画面更新 |
画面更新が混ざる層では扱いが変わる |
| Invoke/BeginInvoke |
画面スレッドへ処理を投げる |
Task.Run |
画面更新のために必要かどうか |
| Application.DoEvents |
画面を無理やり回す |
正攻法の非同期 |
緊急止血以外で常用しない |
関連: R06 非同期の掟(UIスレッド/awaitの帰還/デッドロック典型)
画面とWindows連携
| 用語 |
ひとことで |
混ざりやすい相手 |
最短チェック |
| WndProc |
Windowsメッセージの受け口 |
イベント |
どのWM_*が来ているかを見る |
| WM_* |
メッセージ種別(入力/IME等) |
独自イベント |
発火条件と順序を確認 |
| DefWndProc |
既定処理へ委譲する |
return; |
既定処理を飛ばしていないか |
| SendMessage |
同期で相手に処理させる |
PostMessage |
呼び出し側が待つ必要があるか |
| PostMessage |
非同期でキューに積む |
SendMessage |
処理順序が前提になっていないか |
| SetWindowPos |
位置/最前面等を操作 |
TopMost |
副作用(フォーカス/Z順)込みで考える |
| ホットキー |
OSに登録するショートカット |
アプリ内ショートカット |
解除漏れ/競合を想定する |
| RegisterHotKey |
ホットキー登録API |
キーイベント |
解除(Unregister)と対で扱う |
| Mutex |
多重起動を制御する |
プロセス一覧 |
“二重起動”を仕様として扱う |
| NotifyIcon |
トレイ常駐の起点 |
終了導線 |
終了/復帰の導線が破綻していないか |
| IME |
入力変換(確定前の状態を持つ) |
TextBoxのTextChanged |
フォーカス遷移と確定タイミングを見る |
| ImeMode |
IMEの振る舞い指定 |
フォーカス |
コントロール単位/フォーム単位を分ける |
| SuspendLayout |
レイアウト計算を止める |
描画 |
ResumeLayoutと対で扱う |
| DoubleBuffer |
ちらつき抑制の代表手段 |
OnPaint |
ちらつきの原因(再描画頻度)を見る |
関連: E04 UIフリーズの正体(メッセージループ/Invoke/async), G11 メッセージループ入門(Application.Run/固まる理由), G13 UIスレッドと非同期の実戦(SynchronizationContext/await)
例外とログ
| 用語 |
ひとことで |
混ざりやすい相手 |
最短チェック |
| 例外 |
異常の証拠 |
戻り値の失敗 |
例外を消していないか |
| throw; |
痕跡(スタックトレース)を保った投げ直し |
throw ex; |
どこで壊れたかが残るか |
| 握り潰し |
異常を無かったことにする |
リトライ |
証拠が残らず再現不能にならないか |
| ILogger |
ログの窓口 |
Console.WriteLine |
運用で集計できる形か |
| 構造化ログ |
キーと値で残すログ |
文字列連結 |
検索/集計のしやすさ |
| ログレベル |
情報の重さの区分 |
なんでもInfo |
ノイズと重要度の線引き |
関連: R04 例外設計の掟(握り潰し禁止/throw;), R05 ログ設計の掟(証拠を残す/構造化ログ)
文字列とロケール
| 用語 |
ひとことで |
混ざりやすい相手 |
最短チェック |
| StringComparison |
比較のルールを指定する |
デフォルト比較 |
ロケール依存にしてよいか |
| Ordinal |
コードポイント準拠の比較 |
CurrentCulture |
安定性優先か |
| CurrentCulture |
現在ロケールに依存する比較 |
Ordinal |
UI表示向けか、識別子か |
| InvariantCulture |
ロケールに依存しないカルチャ |
CurrentCulture |
国/端末差を避けたいか |
| CultureInfo |
ロケール情報の器 |
グローバル設定 |
どの層で決めるか |
| 正規表現 |
パターンで扱う文字列処理 |
Contains/IndexOf |
性能と可読性の見積り |
依存と配布
| 用語 |
ひとことで |
混ざりやすい相手 |
最短チェック |
| NuGet |
依存を配布する単位 |
DLL手配 |
依存ツリー(推移依存)を見る |
| 推移依存 |
依存の依存が入ってくる |
直接参照 |
どこから来たか |
| 参照競合 |
バージョン違いで壊れる |
ビルド成功 |
実行時に読む実体DLL |
| アセンブリ |
実行単位(DLL/EXE) |
パッケージ |
読み込み元パス |
| バージョン |
互換性の約束 |
リビジョン運用 |
破壊的変更の有無 |
| 破壊的変更 |
互換性を壊す変更 |
内部変更 |
公開APIに影響するか |
| bindingRedirect |
バージョンの寄せ(主にFramework側で登場) |
NuGetの解決 |
実行時の解決先が揃うか |
関連: E02 参照が壊れる NuGet競合の止血と恒久対策(実行時だけ壊れるやつ)
テストと依存注入
| 用語 |
ひとことで |
混ざりやすい相手 |
最短チェック |
| 単体テスト |
依存を絞って速く回す |
結合テスト |
何を保証するか |
| 結合テスト |
実物をつないで保証する |
E2E |
どの層まで含めるか |
| モック |
代役で振る舞いを作る |
スタブ |
目的(相互作用/状態)が明確か |
| テストダブル |
代役の総称 |
モック |
用語の粒度を揃える |
| DI(依存注入) |
依存を外から渡す |
new直書き |
依存方向が逆流していないか |
| IoC |
生成や流れの主導権が反転する考え方 |
DI |
注入だけの話になっていないか |
| ServiceProvider |
依存を解決するコンテナ |
new直書き |
解決が散らばっていないか |
| ライフタイム |
生成の寿命(使い回し) |
static |
いつ作り、いつ捨てるか |
| Singleton |
1つを共有する生成戦略 |
Transient |
状態が混ざって事故らないか |
| Transient |
毎回生成する生成戦略 |
Singleton |
生成コストと状態の要件 |
開発フローと自動化
| 用語 |
ひとことで |
混ざりやすい相手 |
最短チェック |
| CI |
変更を統合して壊れないことを自動で確認 |
CD |
対象がビルド/テストまでか |
| CD |
配布/リリースまで自動化 |
CI |
配布が自動かどうか |
| パイプライン |
自動手順の流れ |
バッチ |
失敗点が追えるか |
| アーティファクト |
ビルド成果物 |
ソース |
どれを配布したか追えるか |
| 静的解析 |
ルール違反を機械で拾う |
人の指摘 |
人が見る前に弾けるか |
| ビルド |
生成物を作る工程 |
テスト |
同じ入力で再現できるか |
数値と精度
| 用語 |
ひとことで |
混ざりやすい相手 |
最短チェック |
| float |
単精度(誤差が出る) |
double |
桁と速度の要件 |
| double |
倍精度(誤差が出る) |
decimal |
誤差許容と丸め |
| decimal |
十進(主に金額向き) |
double |
金額/税率/端数処理 |
| 丸め |
端数の扱い |
切り捨て |
仕様の基準(いつ/どこで) |
| 桁落ち |
近い数の差で精度が落ちる |
例外 |
入力スケールの確認 |
この用語整理の使いどころ(運用)
- 途中で単語が詰まったら、まず「何の話か(言語/ランタイム/画面/運用)」を揃える
- 議論が噛み合わない時は、対比表へ戻して混同がないかを疑う
- 新しい記事で「前提として必要な単語」が出たら、このページへ追記して前提を一本化する