デッドコード【dead code】到達不能コード
概要

デッドコードはソースコードに記述されているコードの中で実行結果に影響を与えないことが確定しているもので、大きく二種類に分けられる。一つは「到達不能コード」(unreachable code)で、プログラムの制御の流れ上、その箇所に到達することが不可能なコードである。条件式が常に真または偽となるよう誤って記述された分岐の内部や、return文の直後に書かれた処理などが該当する。
もう一つは「冗長コード」(redundant code)で、実行される可能性はあるものの、状態や出力に変化をもたらさないコードである。例えば、同じ変数に連続して値を代入し、最初の代入が直後に上書きされてしまうケースや、分岐の両側でまったく同じ処理を行っている場合、条件文が恒真式になっていて分岐が起きないif文などが当てはまる。
デッドコードは通常、意図して作成されるものではなく、開発・修正の過程で生じる副産物である。条件式の記述ミスによって到達不能な箇所が生じたり、仕様変更によって以前は有効だった分岐条件が常に真または偽になったりすることで発生する。機能を削除した際に関連するコードが取り残されたり、デバッグ用に一時的に追加したコードが残存したりする場合もある。
デッドコードが残存しても、プログラムの動作に直接的な不具合を引き起こすことは少ない。しかし、実行ファイルのサイズやメモリ使用量を不要に増大させるほか、後からコードを読む開発者がそのコードに意図や意味を見出そうとして混乱する原因となり、保守性を損なう。また、デッドコードの周辺に誤った修正が加えられることでバグが生じるリスクもある。
多くのコンパイラや静的解析ツールはデッドコードを検出して警告を発する機能を備えており、コンパイラの最適化処理によって自動的に除去される場合もある。こうした処理は「デッドコード削除」(dead code elimination)と呼ばれ、実行ファイルの軽量化を目的とした最適化技法の一つとして利用されている。自動検出には限界があるため、レビューやリファクタリングを通じて開発者が手動で発見・削除することも推奨される。