バグ
Bug
プログラムに潜む誤りや欠陥のこと。作成者の意図とは異なる動きをしたり、予期せぬエラーを引き起こしたりする原因になります。
🐾 猫で例えると?
まん丸な目でこちらを見下ろす茶トラ。視線の先に小さな虫がいないか探す姿を想像すると、不具合を調べるエンジニアのようですね。ここで探す対象の「虫」がプログラムの不具合であるバグ、原因を探して直す作業がデバッグに当たります。
💻 アプリ・Web開発における「バグ」とは?
バグは、人間がコードを書く以上、完全にゼロにすることは非常に困難です。単純な打ち間違い(タイポ)から、複雑な仕様の解釈ミスまで、原因は多岐にわたります。しかし、リリース後の重大なバグはビジネスに直結するため、開発者は「テスト」というプロセスを経てバグを早期発見・修正(デバッグ)することに全力を注ぎます。
静的解析、テスト、レビューは、それぞれ違う種類の問題を見つける助けになります。発生を減らす対策と、発生後の検知・復旧を組み合わせます。テストが通ったことと、あらゆる条件でバグがないことは別です。
⚠️ バグの仕組みと注意点
境界値や型の取り違えだけでなく、通常の入力で条件式を間違えている場合もあります。期待する動作と実際の動作を具体的に比べると、何が欠陥かを明確にできます。
// JavaScript:比較したつもりが代入になっている例
let count = 0;
if (count = 1) {
console.log("この枝が実行される");
}
console.log(count); // 1へ変わっている
// 意図した比較は count === 1
// if文だけでは繰り返しにならないことにも注意 代入式の結果が1でtruthyのため、枝が一度実行されます。このif文だけで無限ループになるわけではありません。ESLintのno-cond-assignのような規則は、条件式への誤った代入を検出する助けになります。
🛠️ バグを賢く減らすためのポイント
バグを減らすことは、品質向上だけでなく、開発チームのストレス軽減にもつながります。以下のポイントを意識してみましょう。
- 自動テストを導入する: 単体テストを書いておくことで、新しい機能を追加した際に、既存の機能が壊れていないかを機械的に確認できます。茶トラが何度も同じおもちゃで遊ぶように、テストも繰り返すことが重要です。
- 再現に必要な情報を残す: 期待結果、実際の結果、入力、手順、環境、発生時刻をそろえます。ログ量を増やすだけでなく、調査に必要な情報を選び、秘密情報や個人情報の扱いも確認します。
- コードレビューを徹底する: 他人の目でコードを確認してもらうことで、自分では気づけなかったケアレスミスや論理的な矛盾を発見できます。
獲物を見つめる茶トラのように、バグを調べるときも観察が手掛かりです。期待した結果と実際の結果、再現する操作や入力を記録し、修正後に同じ手順で確かめましょう。再現しない場合も、分かった条件を残すと次の調査につながります。