侍エンジニアを卒業してベンチャー企業でエンジニアとして働いている北野です。
他の記事で侍エンジニアをうまく活用する方法について説明させていただいたのですが、その中で質問スキルを高めることの大切さに触れました。
今回はその内容を深堀りして解説します。この質問スキルを高めることで、プログラミング学習におけるエラー解決のスピードが大幅に短縮できるので、ぜひ参考にしてください!

きたの まさたか
質問する際にまず考えるべきこと
僕もはじめはそうだったのですが、
と思ってしまいますよね。
しかし、実際プログラミング学習を進めると、エラー解決には地道な調査や確認が必要となります。インストラクターの方もすぐに答えがわかることばかりではなく、実際に色々調べたり、確認してくださっています。
調べる際に、ヒントが多いと答えにたどり着きやすいので、情報はできるだけ多いほうが良いです。なので自分の出せる情報はなるべく共有しましょう。
もし自分がなにか質問を受けて実際に答えを探すなら、どんな質問なら答えが出しやすいかを考えることが大切です。そうすれば自分は早く問題を解決してもらえますし、インストラクターの時間も奪われないので双方にとってメリットがあります。
インストラクターに聞き返されなくなったら質問スキルが上がってきた証拠です。そうなれば少ないやり取りで早急に問題を解決することができますね。
質問するときに共有する具体的な内容
主に共有する具体的な内容は下記の3点です。
- 解決したい内容を明確にする
- 状況を正確に共有する
- 試したことを共有する
解決したい内容を明確にする
自分が何に困っていて、どのような問題を解決したいのか明確に共有することがとても重要です。
明確であればあるほど、インストラクターも具体的なアクションを起こすことができます。
状況を正確に共有する
現在どのようなエラーがどのようなコードでどの操作をしたときに発生するのか正確に共有しましょう。
どんな環境で行ったのか、例えばローカル環境なのかCloud9なのかです。
これはターミナルのコマンドがMACなのかLinuxなのかで変わる事があるためです。環境該当箇所に関する言語やフレームワークのバージョンなども共有しましょう。
試したことを共有する
参考にした記事や動画などのソースがあればその内容も共有します。
また、エラーメッセージをググって見て得られた結果、その内容を試してどうなったのかを共有しましょう。
質問するときのポイント
まずエラーが出てしまったらすぐに質問してしまう人もいるかも知れません。昔の僕ですね。笑
ですが、まずは実際に自分で調べてみましょう。一番スタンダードな方法はエラー内容を検索することです。
記事が何件かヒットするので、自分の状況と親和性の高そうな記事に数件目を通して自分なりに理解して実践していきます。周辺用語や他のキーワード も絡めて粘り強く検索していきます。そして自分で検索できること、試せることがなくなって初めて質問します。
自分が実際に参考にした記事、自分がその記事の内容をどのように理解しているのか、エラーを言葉で説明するよりも実際に見てもらったほうがわかりやすいので、なるべくスクリーンショットや画面録画を行って共有します。
また、PCがマックなら画面上で範囲を限定して撮影することもできるので、画面全体ではなくエラーの出ている範囲に限定して撮影するとインストラクターの方も見やすいです。
この点は情報を限定して必要な箇所が映らない事もあって注意も必要ですので、状況によって判断してください。
僕もはじめは質問ばかりしていましたが、卒業間近になるとあまり質問しなくてもエラーを解決できる様になって来ました。このように徐々に自走能力をつけていきましょう。
具体的な質問例
では、実際に良い質問例と悪い質問例を紹介したいと思います。
- 課題
- Twitter投稿機能を作成してみたが、Twitterには投稿したくないという人もいると思うので、チェックボックスで投稿する/しないを切り替えられるようにしたい。
- 悪い質問例
- Twitterに共有する機能を作成して、チェックをつけたんですがTwitterに共有が反映されません。
これでは、どのようなエラーがでているのか、なぜ反映されないのか判断できません。次に良い質問例を見てみましょう。
- 良い質問例
-
アプリケーションで投稿を作成した際、Twitterにも共有する機能を作成しました。その際に投稿する/しないをcheckboxで切り替えられるように実装したいです。機能の設計はPostモデルにboolean型のshareという名前のカラムを追加して投稿の際にチェックをつけてコントローラーでtrue判定をしたいと考えています。
controllers/post_controller.rb
if @post.share? @twitter.update("テスト投稿") end
posts/_form.html.erb
フォームヘルパーはform_withを使っています。
<div class="field"> <%= form.check_box :share, {} , true, false %> <span class="twitter-share font-weight-bold"> <i class="fab fa-twitter"></i>Twitterに投稿 </span> </div>
現在のコードはこのようになっていています。
しかし、チェックをつけてもtwitterに共有されません。
@twitter.update("テスト投稿")
このコードのみだとTwitterに反映される事が確認できました。サーバーのログを確認してみたところチェックボックスでtrueではなく1が送られていました。checkboxでtrueを送信する方法を教えていただけますでしょうか?
検索したところ上記のコードでtrue/falseを送る事ができると記載されていました。
これは実際に僕が学習中に質問した内容なのですが、チェックボックスではtrue/falseが送れないということが分かり、Booleanでは無く、string型にすることで解決できました。
このように、要件を正確に伝えることで、エラーや問題を解決することができます!
良い質問のポイント
いい例をまとめると、以下の4つの要素に分解できます。
- 1.自分がどのような設計で機能を実装したいのかを明確に伝えている
- 2.問題に該当しそうな部分のコードを絞って伝えている
- 3.自分の思っている部分と実際のコードの挙動の差異を明確に伝えている
- 4.経緯を共有した上で自分の知りたいことを明確に伝えている
これが全て出来れば、自分で原因を特定できるかもしれませんが、自分なりに調査して質問するというのはこのような感じになります。
どのような設計で機能を実装したいか伝える
あなたがどんな設計で機能を実装したいのかの共有がなければ、どんなに技術のある人でもどのような要素が原因となってエラーが出ているのか特定のしようがありません。
あなたが持っている情報はなるべく正確に伝えるよう心がけましょう。
問題に該当しそうなコードを絞って伝える
いきなり全てのコードを伝えるよりも、自分なりにどのコードが問題になっているのか怪しい箇所を絞って共有しましょう。こうする事によって原因の特定が早くなります。
また、このコードだと動くということも共有すると、よりエラーの特定がしやすくなります。
自分のイメージと実際のコードの挙動の差異を伝える
自分ではサーバーに”true”を送りたいと考えているのに実際には1が送られてしまうなど、自分のイメージと実際のコードの挙動の違いを伝えましょう。エラーが起こる場合はエラーメッセージがこの項目に該当します。
これを伝えることで、あなたのイメージが回答者にも伝わりやすくなり、より具体的な回答に繋がります。
経緯を共有した上で知りたいことを伝える
あなたが問題に対してどのようにアプローチしたのか、経緯を共有した上で、自分の知りたいことを伝えましょう。
経緯を共有することで、どのような原因があるのかを絞り込むことができます。そのため、エラー解決がより早くできるようになります。
まとめ
いかがでしたか?
今回はどのように質問すれば解答が早くもらえるのか、実際に質問する際に注意するべきことをまとめてみました。
エンジニアとして働く上で、自走能力と質問スキルはかなり重要になってきますのでぜひ受講中に習得していただければと思います。少しでも質問のしかたがわからないという人にの参考になれば幸いです。