なぜ、我々は「使われない変数」という名の負債を許容してはならないのか
TypeScriptの真価は、単なるJavaScriptへの型付けによる安全性の担保に留まらない。その真の力は、「コンパイル時に、実行時のあらゆる不確定要素をいかに論理的に排除できるか」という、静的解析の極致にある。
今日語る`noUnusedLocals`と`noUnusedParameters`は、初心者向けの「お行儀よく書きましょう」という道徳的なルールではない。これは、大規模なWebアプリケーションの生存率を左右する、極めて実務的な「メモリと認知負荷の最適化」戦略である。
1. 「未使用」が隠す、アーキテクチャの腐敗
大規模なReactやVueのプロジェクトにおいて、コードベースが巨大化すると、私たちは往々にして「死んだコード」を放置しがちだ。
- スコープの汚染とメモリの微細な漏洩: 未使用の変数がクロージャ内に残っている場合、JavaScriptエンジン(V8など)は、それが参照されている可能性がある限り、ガベージコレクション(GC)の対象から外すことがある。微々たるものだが、複雑な非同期処理や大量のイベントリスナーと組み合わさったとき、この「意図しない保持」がヒープメモリの圧迫、ひいてはメインスレッドのGC負荷を引き起こす。
- 認知負荷という最大のボトルネック: エンジニアの脳は、コードを読む際に「その変数がどこで使われているか」を探索するコストを支払う。未使用の変数は、読む者に「これは将来使うのか?」「重要なロジックの隠蔽か?」という無駄な推論を強いる。これはチームのベロシティを確実に低下させる。
2. 破壊的バグを未然に防ぐ:非同期処理の落とし穴
特に危険なのは、非同期処理のコールバックや`Promise`チェーンにおける「未使用の引数」だ。
// エラーを握りつぶしている典型的なアンチパターン
async function fetchData(id: string) {
try {
const data = await api.get(id);
return data;
} catch (error) {
// error引数が使われていない。
// ここでログを吐くべきか、リトライすべきか、あるいは異常系を握りつぶしているのか?
// コンパイラが強制的に警告を出せば、無視することは不可能になる。
console.error(“Fetch failed”);
}
}
もし`noUnusedParameters: true`であれば、この`error`変数は即座にコンパイルエラーとなる。この「強制力」こそが、重大なバグ(例外の握りつぶしによる状態の不整合)を未然に防ぐ防波堤になるのだ。
3. 実践:tsconfig.jsonによる鉄壁のガード
以下の設定を`tsconfig.json`に適用し、チームに「警告を無視しない文化」を強制しよう。
{
“compilerOptions”: {
“strict”: true,
// ローカルスコープで使われない変数を撲滅する
“noUnusedLocals”: true,
// 関数の引数で使われていないものを撲滅する
“noUnusedParameters”: true,
// デバッグ時のみ、これらを無効化したい場合は
// 拡張設定で override するのが賢明だ。
}
}
4. それでも「どうしても使えない」時はどうするか
現実の現場では、ライブラリのインターフェース合わせなどで「引数は必須だが、このロジックでは使わない」というケースも存在する。その際は、安易に設定をオフにするのではなく、TypeScriptの流儀に従うべきだ。
/
- インターフェースの制約上、引数を受ける必要があるが、
- あえて使わない場合は、アンダースコア(_)をプレフィックスにするのが
- TypeScriptコミュニティの暗黙の了解であり、最も美しく意図が伝わる。
/
const handleEvent = (_event: MouseEvent, data: string) => {
// _eventは使わないと宣言することで、静的解析ツールも納得する
console.log(data);
};
最後に:アーキテクトとしての矜持
`noUnusedLocals`や`noUnusedParameters`を有効にすることは、単なる静的解析の強化ではない。それは、「自分たちが書いたコードの一行一行に対して、責任を持つ」という姿勢の表明である。
使わないものを残すことは、ノイズを増やすことと同義だ。ノイズが多いシステムは、複雑性に飲み込まれ、やがて修正が不可能な「レガシーの墓場」となる。
コードのクリーンさは、単なる美学ではない。それは、アプリケーションのパフォーマンス、デバッグの容易性、そしてチームの健やかな開発体験を支える、最も強固な技術的基盤なのだ。今すぐ`tsconfig.json`を開き、そのエラーと対峙することを強く推奨する。そこには、まだ見ぬバグが眠っているはずだ。

コメント