ルール
削除 残存する TODO/FIXME コメント
未解決 TODO および 修正待ち コメント は
未完成 作業 その できる 蓄積する 時間 時間をかけて
追跡 問題を を あなたの イシュー トラッカー 代わりに 代わりに 放置する それらを コード コードに
サポート言語: 45+はじめに
TODOやFIXMEのコメントは有用なリマインダーとして始まるが、すぐにコードベースの恒久的な要素となる。一時的なメモとして意図されたものが、誰もが無視する警告サインに変わる。これらのコメントは未完了の作業、先送りされた決定、あるいは適切に追跡されていない既知の問題を示している。TODOコメント付きのコードを出荷することは、修正計画もなく「何かが正しくない」という認識を出荷することに他ならない。
なぜそれが重要なのか
コードの保守性:TODOコメントはコードの準備状況や完成度について曖昧さを生む。新規メンバーは、これらのコメントが緊急課題なのか、もはや誰も気にしない数年前からのメモなのか判断できない。TODOが蓄積すればするほど、誰も真剣に受け止めなくなり、品質基準が低下する「割れた窓効果」を引き起こす。
技術的負債の追跡:コメントに隠れた課題は優先順位付けも割り振りも追跡もされない。プロジェクト管理システムでは全て完了と表示される一方、コードベースには「後で修正」のメモが数十件も残る。適切な追跡がなければ、重要な課題は本番環境で問題を引き起こすまで忘れ去られる。
セキュリティ上の影響:TODOコメントは、未実装のセキュリティ対策や既知の脆弱性を示す場合があります。本番コード内の「TODO: 認証チェックを追加」といったコメントは、セキュリティホールを認識した上でリリースしたことを意味します。こうしたマーカーは、攻撃者がコードを調査する際の弱点発見を容易にします。
コード例
非準拠:
async function processPayment(userId, amount) {
// TODO: Add fraud detection before processing
// FIXME: This doesn't handle concurrent payments
const user = await db.users.findById(userId);
if (user.balance < amount) {
throw new Error('Insufficient funds');
}
// TODO: Add transaction logging
user.balance -= amount;
await user.save();
return { success: true };
}
問題点:3つの重大な課題(不正検知、同時実行性、ログ記録)が指摘されているが未解決であり、この機能が未完成のままリリースされたことを示している。これらのコメントは既知の問題を記録しているだけで、修正のための追跡やスケジュールは一切記載されていない。
✅ 準拠:
async function processPayment(userId, amount) {
await fraudDetection.check(userId, amount);
return await db.transaction(async (trx) => {
const user = await trx.users
.findById(userId)
.forUpdate();
if (user.balance < amount) {
throw new Error('Insufficient funds');
}
user.balance -= amount;
await user.save();
await trx.auditLog.create({
userId,
action: 'payment',
amount,
timestamp: new Date()
});
return { success: true };
});
}
重要性:以前にマークされた問題は全て解決済みです。不正検知機能が実装され、データベーストランザクションが同時実行を処理し、監査ログが全ての支払いを追跡します。コードは不足点についての弁解的なコメントなしで完成しています。
結論
本番環境にコードをマージする前に、TODOおよびFIXMEコメントを削除してください。作業が未完了の場合は、完了させるか、プロジェクト管理システムで適切な優先度と担当者を設定した追跡可能な課題を作成してください。コード内のコメントはプロジェクト計画では認識されず、コードベースが常に未完成に見える原因となります。
.avif)
