漸進的デバッグ

スクールでコードが動かないという質問を受けた時にいつも実践してみせて、紹介しているのが **漸進的**デバッグです。 ということです。 漸進的デバッグとは、呼び名がないと不便なので僕が今付けた名前です。 職業プログラマーの方はみんな普通に使ってるやつで、すごく強力なのに初心者の方におすすめしてもほとんど使ってくれません。 ## 漸進的デバッグとは 動かないコードがあるとします。そのコードから最小限のコード以外を削除して動く状態にします。 そして、動くコードから動かないへコードを1行づつ追加していきます。 どこかのタイミングで動かなくなります。その行が原因の1行です。 ### 例 ![near-code.png](https://bootcamp.fjord.jp/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBOTdrQWc9PSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--fd7dd586eb245f2e8cc73f731ec701b550d139c1/near-code.png) 「RailsのWebアプリで新規ユーザー登録時のメールが届かない」というバグがあったとします。 メール送信以外の部分のコードをガッツリ削除します。メールのタイトルや本文は"aaa"とかに変えちゃいましょう。 その状態で動かすとどうなりますか? メールが届いたとしたら、最初のコードとガッツリ削除したコードの間のどこかにバグがあります。1行づつ近づけながら実行していきましょう。動かなくなったその1行が原因です。 メールが届かないとしたらメールを送るだけのrailsアプリをrails newして作りましょう。 そのアプリではメールは届きましたか? メールが届かないとしたら、自分のアプリの問題ではないと思います。自分のマシンがおかしいとか、ネットワークの設定がおかしいとかでしょう。他のマシンで同じことをやってみましょう。 メールが届いたとしたらそのrails newしたアプリを動かないコードと1行づつ近づけていきましょう。動かなくなったその1行が原因です。 ### 応用編 動かないアプリから1000行ぐらい削除して動くアプリができたとします。1行づつ近づけてもいいですが、次は500行ぐらい追加してみましょう。 動かなくなったら原因はその500行にあります。まだ動いていたら原因は残りの500行にあります。 動いていたとしたら、残りの500行の内、250行を追加しましょう。 動かなくなったら原因はその250行にあります。まだ動いていたら原因は残りの250行にあります。 こうやって半分づつ確かめていくと1行づつ追加するよりも効率がいいです。 プログラマーがよく話す「問題の切り分け」というのはこういう感じです。 ## なぜ漸進的デバッグを使えないのか こんなに有効なのになぜこの手法を使えないことが多いのでしょうか? 1. 漸進的デバッグを知らない 1. デバッグというのはそこまでやらないといけないという認識がない 1. 面倒だからやらない 初心者の方の場合、1と2が多いのだと思います。それを解決するためにこのエントリーを書きました。 プログラマーの皆さんは後輩や初心者の方に質問されたら是非このエントリーを見せて、 「漸進的デバッグやった?」 と言ってみてください。その上でバグが直らない時、初めてみなさんの出番でしょう。