
執筆者
S.G.
Webエンジニ2年目に突入

未経験からWebエンジニアとして働き始めて1年が経過しました。
この1年間、様々なプロジェクトに携わる中で、「バグを起こさない」ことの難しさと重要性を痛感してきました。
バグは完全にゼロにすることは難しいものの、意識と取り組み方を変えることで、大幅に減らすことは可能です。
今回は、私が日々実践している「バグを起こさないための意識と取り組み」について、具体的にお話しします。
コードを書く前の準備を大切にする
バグの多くは、仕様の理解不足から生まれます。
「こう動くだろう」という思い込みでコードを書き始めると、後で「実は違った」となり、大幅な修正が必要になります。
私は実装を始める前に、必ず以下を確認するようにしています。
・機能の目的
この機能は何を実現するためのものか
・入力パターン
どんな入力パターンが想定されるか
・エラー時の振る舞い
エラーが起きた時はどう振る舞うべきか
・既存機能との関連
既存の機能との関連はあるか
わからない部分があれば、コードを書く前に必ず質問します。
「聞くのが恥ずかしい」と思ってしまいがちですが、間違った実装をして後で手戻りする方が、時間も信頼も失います。
実装前に設計を考える
◆設計ファーストの考え方
いきなりコードを書き始めるのではなく、まずは頭の中で、あるいはメモに書き出して設計を考えます。
「この処理はどこに書くべきか」
「どんな関数に分割するか」
「データの流れはどうなるか」
を事前に整理しておくことで、後から「やっぱりここは違った」となる事態を減らせます。
◆Laravelでの実践:MVC設計
Laravelを使った開発では、MVCの役割分担を意識してビジネスロジックをどこに置くべきかを考えます。
コントローラーに処理を詰め込みすぎると、後でテストもしづらくバグも見つけにくくなります。
意識をする・行動をする

コーディング中に意識していること
◆シンプルに保つ
複雑なコードほどバグが混入しやすくなります。
「賢い」コードを書くよりも、「わかりやすい」コードを書くことを優先しています。
入れ子が深くなりすぎていないか、ひとつの関数が長くなりすぎていないか、変数名は内容を適切に表しているか、などを常に気にかけています。
◆エッジケースを想定する
「普通の使い方」だけを考えていると、想定外の入力でバグが発生します。
・空文字が入力されたら
・想定よりも大きな数値が入力されたら
・特殊文字が含まれていたら
・データベースに該当データがなかったら
こうしたエッジケースを常に頭の片隅に置きながらコードを書くようにしています。
◆実装後の確認を怠らない
実装が完了したら、必ず自分で動作確認を行います。
正常系だけでなく、異常系のパターンも確認します。
私はこの確認作業にはかなり時間をかけていて、ブラウザで何度も画面を操作し様々なパターンを試すため工数はかかりますが、後でバグが見つかって手戻りするよりは効率的だと考えています。
◆影響範囲を確認する
新しい機能を追加したり既存の機能を修正したりした時は、関連する他の機能が壊れていないかも確認します。
一箇所の変更が思わぬところに影響を与えることがあるからです。
この作業は正直大変で、特に大規模なシステムでは確認すべき箇所が多くなります。
だからこそ、自動テストの重要性を実感しています。
これから取り組みたいこと:自動テストの導入
現在、私は自動テストについて学んでいます。手動での確認作業に多くの時間を費やしている今、自動テストを書けるようになればより効率的にバグを防げるようになると考えているからです。
1・テストコードを書く
一度テストコードを書けば繰り返し実行できる
2・自動で検証する
コードを修正するたびに自動でテストを実行し既存機能の破損を素早く確認
3・安全にリファクタリング
自動テストが安全網となり、自信を持ってコードを改善できる
「このコードをもっときれいにしたいけど、何か壊れないか不安」という気持ちで、改善を躊躇してしまうことがありました。
自動テストがあれば、自信を持ってコードを改善できるようになります。
自助努力の継続

テストの体系的な知識を学ぶ:JSTQB
自動テストを効果的に書くためには、テストの基礎知識が必要だと感じ、現在JSTQB(ソフトウェアテスト技術者資格)の勉強をしています。
1・同値分割・境界値分析
テスト設計技法として、入力値の範囲を効率的にカバーする手法を学んでいます。
2・テストレベルの考え方
単体テスト・結合テスト・システムテストなど、各レベルの役割と目的を理解しています。
3・リスクベースドテスト
リスクの高い箇所に重点を置いてテストを設計する考え方を身につけています。
「完全なテストは不可能である」——すべてのパターンをテストすることはできないからこそ、どこに重点を置くべきかを判断する力が重要なのだと学びました。
コードレビューで学ぶ・常に学び続ける姿勢
先輩エンジニアからのコードレビューも、バグを防ぐ重要な機会です。自分では気づかなかった問題点や、より良い実装方法を教えてもらえます。
指摘を受けた時は、その場で理解するだけでなく、なぜそれが問題なのか、どうすれば防げたのかを考えるようにしています。
同じミスを繰り返さないための学びの時間だと捉えています。
技術は日々進化しています。Laravelも定期的にバージョンアップされ、新しい機能が追加されます。新しい書き方やベストプラクティスを学び続けることで、より安全で保守性の高いコードが書けるようになります。
・技術ブログを読む
・公式ドキュメントを確認する
・勉強会に参加する
こうした地道な積み重ねが、結果的にバグの少ないコードを書く力につながると信じています。
まとめと総括
バグを完全にゼロにすることはできませんが、日々の意識と取り組みによって大幅に減らすことは可能です。
01 仕様の理解
思い込みを排除し、正確に把握する
02 丁寧な設計
実装前に構造を整理する
03 シンプルなコード
わかりやすさを最優先にする
04 エッジケースの想定と動作確認
徹底した検証で品質を担保する
05 自動テストの習得
これから身につけていく次のステップ
私自身もまだまだ学びの途中です。日々の開発の中で新しい気づきがあり、「もっとこうすればよかった」と思うこともあります。それでも、一つひとつの経験を活かしながら、バグの少ない、品質の高いコードを書けるエンジニアを目指して成長していきたいと思います。













