ルール
到達不能な デッドコードを 削除する
到達不能な コードは混乱を招き、
テスト不可能であるため、 削除すべきです。
対応言語: 45+はじめに
到達不能コードは、コードベースのロジックが壊れていることを示します。その後のコード return または スロー ステートメントは実行されるように書かれているにもかかわらず、決して実行されません。常に偽となる条件は、決してトリガーされない検証やエラー処理を隠しています。制御フローによってロジックが到達しないブランチには、実行できない機能が含まれています。到達不能なコードを発見した場合、それはコードが意図したとおりに機能していないバグを見つけたことになります。
なぜ重要なのか
セキュリティ脆弱性: 到達不能なセキュリティチェックは、アプリケーションを保護しません。認証、認可、または入力バリデーションがその後に現れる場合 return ステートメントでは、コードは安全に見えますが、実際はそうではありません。攻撃者は、セキュリティ対策があるように見えるが実際にはそれらをバイパスする関数をエクスプロイトできます。コードレビューでは、セキュリティロジックがコードベースに存在しても実行されないため、これらの脆弱性を見逃す可能性があります。
本番環境でのロジックバグ: デッドコードは、関数が意図したロジックを実装していないことを意味します。実行されないバリデーションは、無効なデータを通過させてしまいます。到達不能なエラーハンドリングは、エラーが捕捉されずに伝播することを意味します。バイパスされるビジネスルールは、誤った結果を生み出します。コードは正しく見えますが、意図とは異なる動作をします。テストのギャップ: 到達不能なコードはテストできません。重要なコードが到達不能であるにもかかわらずテストスイートがパスする場合、それはそれらのパスをカバーするテストがないことを意味します。到達不能なコードは、重要なロジックが存在するにもかかわらず、その実行を検証するテストがないテストカバレッジのギャップを明らかにします。
バンドルサイズへの影響: 到達不能なコードは、JavaScriptバンドル内の無駄な重みとしてユーザーに配信されます。ユーザーは実行されないコードをダウンロードして解析しますが、これはデッドコードが示すロジックバグに比べれば二次的な問題です。
コード例
❌ 非準拠:
function transferFunds(fromAccount, toAccount, amount) {
if (!fromAccount || !toAccount) {
return { success: false, error: 'Invalid accounts' };
}
if (amount <= 0) {
return { success: false, error: 'Invalid amount' };
logSuspiciousActivity(fromAccount, amount);
}
const balance = getBalance(fromAccount);
if (balance >= amount) {
deductFunds(fromAccount, amount);
addFunds(toAccount, amount);
return { success: true };
}
return { success: false, error: 'Insufficient funds' };
// Check for fraud patterns
if (isHighRiskTransaction(fromAccount, toAccount, amount)) {
notifyFraudTeam(fromAccount, toAccount, amount);
return { success: false, error: 'Transaction blocked' };
}
}
誤っている理由: 不正検出ロジックは、関数がそこに到達する前にリターンするため、決して実行されません。金額チェック後の不審なアクティビティのログ記録も実行されません。この関数はセキュリティ対策が施されているように見えますが、実際には不正チェックなしですべての送金を処理します。
✅ 準拠済み:
function transferFunds(fromAccount, toAccount, amount) {
if (!fromAccount || !toAccount) {
return { success: false, error: 'Invalid accounts' };
}
if (amount <= 0) {
logSuspiciousActivity(fromAccount, amount);
return { success: false, error: 'Invalid amount' };
}
if (isHighRiskTransaction(fromAccount, toAccount, amount)) {
notifyFraudTeam(fromAccount, toAccount, amount);
return { success: false, error: 'Transaction blocked' };
}
const balance = getBalance(fromAccount);
if (balance >= amount) {
deductFunds(fromAccount, amount);
addFunds(toAccount, amount);
return { success: true };
}
return { success: false, error: 'Insufficient funds' };
}
これが重要な理由:すべてのセキュリティチェックは、転送処理の前に実行されます。不正検出はすべてのトランザクションで実行されます。不審なアクティビティはログに記録されます。関数は、それが持つべきセキュリティロジックを実装しています。
まとめ
到達不能なコードは、意図された機能が実行されないロジックのバグを示します。CIパイプラインの静的解析ツールで見つけ、単なるコードクリーンアップではなく、重大な問題として扱ってください。到達不能なコードを発見した場合は、なぜそれが存在するのか、そしてどのロジックが実行されるはずだったのに実行されていないのかを調査してください。

