ルール
削除 到達不能 デッド コード
到達不能 コード は 混乱を招く、
テスト不可能であり、 そして すべき 取り除かれるべきである 削除されるべきである。
サポート言語: 45+はじめに
到達不能なコードは、コードベース内の論理的欠陥を示します。 戻る または 投げる 実行されるために記述されたが、決して実行されないステートメントがある。常に偽となる条件は、決して発動しない検証やエラー処理を隠している。制御フローによって論理が到達しない分岐には、実行不可能な機能が含まれている。到達不可能なコードを見つけたとき、それはコードが意図した動作をしていないバグを発見したことになる。
なぜそれが重要なのか
セキュリティ上の脆弱性: 到達不可能なセキュリティチェックはアプリケーションを保護しません。認証、認可、または入力検証が 戻る あなたのコードは一見安全に見えますが、実際にはそうではありません。攻撃者は、セキュリティ対策があるように見えるが実際にはそれを回避する機能を悪用できます。コードレビューではこれらの脆弱性を見逃す可能性があります。なぜなら、セキュリティロジックはコードベースに存在しているものの、実行されることがないからです。
本番環境におけるロジックバグ:デッドコードは、関数が想定したロジックを実装していないことを意味する。実行されない検証は不正なデータを透過させる。到達不可能なエラー処理は、エラーが捕捉されずに伝播することを意味する。 バイパスされたビジネスルールは誤った結果を生む。コードは正しく見えても、意図した動作とは異なる。テストの穴:到達不能なコードはテストできない。重要なコードが到達不能なのにテストスイートが通過する場合、それらのパスをカバーするテストが存在しないことを意味する。到達不能なコードは、重要なロジックが存在するにもかかわらず、その実行を検証するテストがないテストカバレッジの穴を露呈する。
バンドルサイズへの影響:到達不能なコードは、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パイプライン内の静的解析ツールでこれを検出し、単なるコードのクリーンアップではなく重大な問題として扱ってください。到達不能なコードを発見したら、その存在理由と、実行されるはずだったロジックがなぜ動作しないのかを調査してください。
.avif)
