プログラミング初心者のためのデバッグ講義【現役エンジニアが解説】
デバッグとは何かを知りたい方に。
この記事を読まれている方は、
- デバッグとは何かを知りたい
- デバッグの仕方を知りたい
- バグの少ないプログラミングをするには
おそらくこのように考えている方が多いと思います。
この記事を書いている私は、
プログラミング未経験から転職を果たした現役のWeb系エンジニアです。
エンジニア歴は3年ですが、本業とは別にフリーランスの副業で月10万円ほど、多いときで20万円ほどの収入があります。
この記事では、現役のエンジニアが、プログラミング初心者向けに、デバッグについて解説します。
デバッグとは
デバッグ(debug)とは、「de(取り除く)+bug(虫)」で「虫を取り除く」という意から、誤りを見つけ、その手直しをする行為のことです。
プログラミングにおけるデバッグとは、バグを見つけて、それを修正する行為のことを表しています。
そして、開発者の多くが、このデバッグに多くの時間を割いており、納期が延びてしまったり、工数が増えてしまう原因となっています。
デバッグにあまり時間がかからないプログラムがあるとしたら、それはとてもよくできたプログラムということになります。
人によっては最初からエラーのことを考えずにあえて骨格だけ作ってしまい、あとでデバッグで細かな点を調整していくというスタイルの方もいます。私もどちらかというとそのタイプです。
デバッグは、開発工程で言うところのテスト・検証の工程にあたりますので、テストをした結果、想定とは異なる動きをした際に、バグをつぶすために行います。
開発工程は主に設計⇒製造⇒テストの3ステップあり、そのうちの1ステップであるテストで行うデバッグには、当然それなりの時間がかかります。
これから開発を行う場合は、工数に含めることを忘れないようにしましょう。
デバッグを行えるようにすることで、開発の効率もだいぶ上がります。
デバッグができない場合、どこが問題かが特定できないままになってしまうので、自分で考えながらプログラミングをしていくことができなくなります。
デバッグで問題点を絞りつつ、解決方法をグーグルで探すことが最も良いプログラミングのやり方と言えるでしょう。
デバッグの仕方
デバッグの仕方は、とても簡単です。
基本的には変数を出力すれば良いだけだからです。
例えば、PHPで言えば、以下のようにvar_dumpという関数を使ってデバッグします。
$string = "中身がわからないもの"; var_dump($string);
var_dumpやechoを使えば、その時点での変数の中身がわかります。
また、エラーなどが出て処理が止まってしまい、どこまで正常に処理されているかを調べる場合でも、「echo “ここまで正常に処理されている”;」などとechoなどを差し込んでいけば、どこで処理が止まっているかがわかります。
エラーが出るまでは全ての命令が正常に実行されて、画面に出力されるからです。
PHP以外の他の言語の場合でもほぼ同じです。
例えば、JavaScriptでは以下のようにデバッグします。
var string = "中身がわからないもの"; console.log(string);
このconsole.logがPHPで言うところのvar_dumpにあたります。
これを使って、変数の中身を見ることができます。
JavaScriptの場合は、ブラウザの開発者ツールのConsoleという部分に出力したものが表示されるので、そこで内容をチェックすることができます。
Web系の場合はフロントエンドとバックエンドの両方にプログラムがあるためテストが少々面倒ですが、デバッグのやり方は、どちらもほぼ変わらないので、出力先が違うということだけを覚えておきましょう。
バグの少ないプログラミングをするには
これまではバグがある前提の対応について解説してきましたが、本来はバグを生まない体質のプログラミングをしていくべきです。
そこで、バグの少ないプログラミングをするために、気を付けるべきポイントを以下にまとめてみました。
- メソッドや変数はクラスに入れる
- なるべく書き方を省略しないようにする
- プログラムの意図をコメントで書き込む
一つずつ解説していきます。
関数や変数はクラスに入れる
関数や変数は、色々な場面で同じ名前が使われたり、同じデータが使われたりするので干渉が起きやすいです。いざ干渉してしまうと、プログラムが思わぬ動きを始めたり、意図しない処理結果となってしまうので、バグの温床にもなります。
その点、クラス化をしておけば、必要なときに必要なだけ呼ばれるので、ごちゃごちゃになることを最小限に抑えることができます。これは主にオブジェクト指向の考え方ですが、別にプログラミング言語のタイプに問わず、このような干渉を防ぐ考え方はとても重要ですから、プログラミングをする際はぜひ意識してみて下さい。
なるべく省略の書き方をしないようにする
省略した書き方をすると意図が伝わらなかったり、手を加えたときに間違いが発生しやすくなります。
例えば、前者の例は、PHPのif文の条件式などです。
if ($anydata) { 処理 }
PHPで上のような条件式が書かれている場合、$anydataの型が何なのかがわかりません。
そのため、どのようなデータが入っているかが予想できず、後から改修がしにくいです。
単純にtrue/falseのブーリアン型かもしれないですし、文字列型だったり、配列型だったりするかもしれません。
この点は動的型付けの言語のデメリットでもあります。
一方、後者の例としてもif文が挙げられます。
if ($TrueOrFalse) echo "Trueです";
if文の中の処理が一文であれば、このような書き方ができますが、2つ以上になると{}が必要になり、この書き方はできなくなるので、改修のために1文を追加しようとしてエラーが発生する可能性があります。
そのため、楽だからといって安易に省略した書き方をしてしまうと、他の人が見たときにわかりづらい可読性の低いコードになってしまうので、注意が必要です。
もちろん自分で見返すにしても、時間が経っていると忘れてしまう可能性が高いので、一人で開発している方でも意識はされた方が良いと思います。
プログラムの意図をコメントで書き込む
「わかりづらいコードを書いてしまったな」という自覚がある場合、また後々問題になるとわかっているような場合では、コメントを書いておくことをオススメします。
コメントを書くと、見た目が悪くなるので嫌う人も多いですが、開発者としては残しておいてくれた方がありがたいです。
もしスクリプト言語などで速さを意識されるのであれば、開発用にバックアップを取り、そちらにはコメントを残したままにするという方法を取れば問題ないと思います。
現代は詳細設計まできちんとやるところが少なくなってきているので、コメントを残しておかないと、プログラムの意図が他の開発者(もしくは未来の自分)に伝わらず、とても危険です。
開発時は、ぜひコメントを書き込むくせを身に着けておきましょう。
より実践的なコードを書きたい場合は、独学では難しいと思いますので、実務で覚えていくか、もしくはプログラミングスクールで現役のエンジニアの講師からアドバイスを受けたりしましょう。
別の記事でまとめていますので、検討されている方はぜひ読んでみて下さい。
現役エンジニアがオススメするプログラミングスクール3選【無料体験あり】
「一からきちんと学べるオススメのプログラミングスクールを知りたい。プログラミングの効率的な学び方を知りたい」←こういった疑問に答えます。本記事内容:まずはどのプログラミング言語を選ぶべきか/現役エンジニアがオススメするプログラミングスクール3選/プログラミングスクールにプラスして行うべきこと