こんにちは。Web系エンジニアのカズです。数年前に未経験からプログラミング学習を始めて転職しました。現在エンジニア歴は約7年になります。
今回はプログラムエラーで困っている初心者の方に向けて、エラーへの向き合い方や解決するために必要な過程についてお話します。
エラー解決に必要なこと
エラー解決に必要なことは、「処理がどこまで正常に動いているか。」「処理がどこで異常が起きているのか」この2点を把握することが、まずスタートです。
最近私は初心者の方の学習をサポートする機会があるのですが、これが出来ていないことが結構あります。
例えば、こんな質問内容がありました。

PHPを学習中なんですけど、上手く動かなくて質問してもよいですか?

OKです!
下記のような画面で「ユーザー名」「メールアドレス」欄に入力した値をデータベースに登録したいです。
しかし、登録ボタンを押してもデータベースにデータが入りませんでした。どうすればいいですか?
ソースコードを送ります。
index.php
register.php(登録処理を書いているPHP。ソースコードは割愛。)
ここで問題なのは、質問者が「どこまで処理が動いているのか」「どこで異常が起きているのか」をソースコードベースで把握できていない。もしくは、「自分で把握しようとしていない?」ということです。
では、処理がどこまで動いているのかを把握するにはどうすれば良いでしょうか。
簡単です。デバックしていきましょう。どんなに長くて難しい処理でもデバックしていけば、おおよそ怪しい箇所が見つかります。
今回はPHPのソースコードです。PHPのデバック方法が分からなければ、「PHP デバック」などでググりましょう。
PHPのデバックはvar_dump()を使います。
ちなみに、echoやprintなどもありますが、基本的には画面に文字を表示したいときに使用するのでデバックでは、あまり使用しません。
今回の一連の流れは登録ボタンを押したときに、index.phpからregister.phpに処理が移ってregister.php内の登録処理が走るという感じです。
なので、まず登録ボタンを押したときにregister.phpに処理が移っているか。index.phpからPostした値(ユーザー名やメールアドレスの入力値)がregister.phpに正常に渡っているのか。ということをデバックして確認したいですね。
つまりregister.phpの一番上の行でvar_dump($_POST);を実行しましょう。
デバックした結果このように出力されました。
まずこれで、register.phpに処理が移っていることは分かりますね。
あれ?Key名がuser_になっているけど、userになるはずだな。
index.phpでname属性をuserにしていたのに、なんでuser_になっているんだ?
「name=”user”」にしたはずが「name=”user ”」とスペースが入ってしまっててuser_に切り替わってしまっていたことが原因でした。(汗)
結果この一連の流れで何が言いたかったかというと、デバックして「ソースコードを理解していこう。」ということです。
このようになる背景はググったサイトからソースをコピペしてきて、そのまま使ったけど動かない。
「どうしよう?」ってなる方が多いと思っています。
コピペはしてもOKです。ですが、ちゃんと理解してからコピペしたソースコードを使いましょう。
理解するにはデバックして、分からないメソッド(今回でいう$_POSTとか)があれば調べましょう。
このような作業を飛ばしている方が意外と多いのではないでしょうか。
質問の仕方
先程はデバックして調べましょう。という話がありました。
初めの質問の仕方のようにソースコードを丸ごと送って「動かないけどどうすれば良いですか?」
というやり方は現場のエンジニア目線で言えば、好まれません。
自分で調べられることは調べて、誠意を見せたうえで質問しましょう。
実際に現場に勤務することになれば、周りはベテランのエンジニアで自分は新人エンジニアという状況です。
分からないことも、きっと出てきます。
その時に相手が答えてくれる質問の仕方が出来ているかどうか。という視点は重要です。
なので、学習中から質問の仕方を意識してみてくださいね。
参考までに質問テンプレートを載せておきます。
①実現したいこと(期待値を示す)
②現状どのように、上手くいかないのか
③どの処理まで正常に動いているのか
④原因だと思われそうな箇所
質問の仕方について、他の記事でも参考例をだしています。
コメント