プログラマー歴20年以上で、日本語プログラミング言語「なでしこ」やテキスト音楽「サクラ」など、数多くのプログラムを作って生きたの筆者が、最強のデバッグ方法を三つ伝授しましょう。 …偉そうな書き出しですみません。少し経験を積んだプログラマーであれば、みんな知っている話です。
バグに悩まされる状況
バグの原因が分からないととにかくストレスです。きっと、次のように悩むことになるでしょう。
- どうしても、バグの原因が分からない
- 何時間もプログラムを目の皿のようにして見直しているのにおかしなところが見当たらない
- 何度も何度もプログラムを見直しているのに分からない
- プログラムは正しいのに、不可解な動きをする
上記のような状況に陥ると、自分ではなく使っているプログラミング言語や、OSがおかしいのではいかと疑いたくなります。もちろん、そんな時もありますが、大抵は自分が間違っています。
こうした悩みに対処する最強のデバッグ方法を紹介します。
↑AIが描いたPCを睨むクマのイラスト --- PCのディスプレイが両面についているのが画期的。
最強のデバッグ術1 - 睡眠と食事
最強のデバッグ術、それは 睡眠
と 食事
です。筆者の経験より、寝れば大抵のバグは直せるようになります。眠ることで、頭の中が整理されるので、うっかりミスに気付くことができます。頑張りすぎていて、頭がショートしていて、間違いを見逃していたのです。
きっと、納期前などは、必死にデバッグしている悪夢を見ることでしょう。しかし、目が覚めると同時に、バグの直し方が分かってしまうものです。睡眠時間をしっかりとって、美味しいものを食べましょう。
最強のデバッグ術2 - パソコンを閉じて人に話す
次に紹介するデバッグ術は、パソコンを閉じて、近くにいる人に話すことです。現在、どんな問題に直面しているのか、事細かく話しましょう。その人がプログラミングに詳しい必要はありません。しかし、こちらの話を遮るような短気な人、忙しい人を選ぶのはやめましょう。何も言わず、うんうんと、聞いてくれる人を選びましょう。
大切なのは、次の点をしっかりその人に伝えることです。
- どんな問題が発止したのか
- どんな原因で発生していると思うのか
- 問題が起きた後、どのように解決しようと試行錯誤したのか
- なぜ、その試行錯誤でうまくいかなかったのか
とにかく、全部話してみてください。すると、不思議なことに、別の解決策が思い浮かぶことでしょう。それなら、まだ試していない別の方法を試す必要があることに気付くものです。
とは言え、現代人はみんな忙しく、多くのプログラマーはすぐに自分の解決策を提示したがるものです。的外れなコメントをもらうかもしれません。それでも、気にする必要はありません。他人に話すことで、頭の中がスッキリし、自分で解決策を思いつくことができたでしょう。
クマのぬいぐるみに聞いてもう
また、話すべきなのは、人でなくても大丈夫です。クマのぬいぐるみとか、玩具のロボットに話しかけるのでも同じ効果があります!問題なのは、頭がおかしい人と認定されてしまうことですが…。バグが直らなくてイライラしているよりは、頭がおかしい人と思われる方がマシですよね!(本当?!)
(別解) 大規模言語モデル(ChatGPT)に聞いてもらう
そこで、オススメなのは、ChatGPTなどの大規模言語モデルに聞いてもらいましょう。AIはこちらの言いたいことを全部静かに聞いてくれるので、とても役立ちます。そして、エラーメッセージなどを大規模言語モデルに与えると、その原因を詳しく答えてくれます。
もちろん、AIの返答がトンチンカンでも問題ありません。重要なのは、自分がその問題を整理することだからです!!
最強のデバッグ術3 - 社内ブログか日報か日記に書く
上記のデバッグ術2は強力です。しかし、都合良くこちらの話を聞いてくれる人がいないとう場合もあります。誰だって自分の時間を無駄にはしたくありません。しかも、あなたが初心者だったり、若輩者だったりするなら、先輩達の邪魔をすることになってしまいます。
そこで試したいのが、一度、開発環境を全部閉じて(できるならPCを再起動して)、現在直面している問題を詳細にブログを書くことです。もちろん、社外秘の仕事を問題を個人ブログに書いてはなりません。もし、極秘事項を伏せて分からないようにできるのならば良いのですが、バグに苦しんでいる時に、そのような心のゆとりはないでしょう。そこで、もしあれば社内ブログに書き込みましょう。それがなければ、日報、もしくは、自分だけの日記帳を開きましょう。
そして、デバッグ術2で紹介したように、事細かに現在おきている問題をメモしていきましょう。できれば、自分以外の誰かに話すような感じで書いていきます。書く内容は同じです。
- どんな問題が発止したのか
- どんな原因で発生していると思うのか
- 問題が起きた後、どのように解決しようと試行錯誤したのか
- なぜ、その試行錯誤でうまくいかなかったのか
上記の問題を整理して書き終わった直後、あるいは、書いている最中に、解決策の一つが見つかることでしょう。
この時、敢えて、キーボードをタイプするのではなく、手書きのノートやタブレットに問題を整理する、図式化するのも良いみたいです。筆者はあまりやらないのですが、以前の同僚が「手書きのノート」を使って多くのプロジェクトを救ってきたのを知っています。
その他の基本的な対処方法
なお、最強のデバッグ方法を試す以前、既に以下の基本的な事項は試していることでしょう。
- エラーメッセージやログをしっかり確認する
- プログラムが正しく思った通りに動くか、ログを出力して確認する
- 開発環境でステップ実行が可能なら、一行ずつ実行して変数の値が想定通りかを確認する
- エラーメッセージでインターネットを検索して、他に似た事例がないか確認する
- 別の環境を開いて動作がそのマシン固有の問題かどうかを試す
- いろいろなデータを与えて、どのような結果になるかを試す
- 部屋の中を行ったり来たりしたり、階段を上ったり降りたりして考える
- 近くの公園を猛ダッシュして頭を空っぽにする
- いつもよりも大げさにそして高速に貧乏揺すりする
上記の最強のデバッグ手法は、これまでも、コラムや著書で紹介して来ましたので、ご存じの方もいると思いますが、多くの方が役立ったと感じているようです。良かったら試してみてください!
メモ
なでしこは、数々の難しいバグを修正して今に至っています!!
なでしこはブラウザ上で動きますが、以下のサクラも2023年にブラウザ上で動くようになりました!
筆者のクジラ飛行机は、年間2-4冊ペースで技術書籍を書いています!!最近は、生成AI/ChatGPTの本を書きました。