新卒1年目に使ったエンジニア質問テンプレート

## はじめに

今回は新卒1年目の時に自分が先輩エンジニアに質問する際に使っていた質問テンプレートを紹介します。

自分は相手に質問する時は「**いかに相手の時間を取らずに解決まで至れるか**」を重視して質問を考えています。

いきなり「OOがわからない」「OOのエラーが解決できない」「〇〇が動かない」といった答えを全て相手に丸投げするような質問をしていては成長はおろか、相手から「この子は自分で考えない子なんだな」と思われてしまいます。

そこで今回は初心者が先輩に質問する際にどのような手順で質問を作成すればよいかをテンプレートとして紹介します。

エンジニアとは書いているものの他の職種にも応用できるようなテンプレートだと思うので、ぜひ参考にしていただければなと思います。

## この記事の主な対象者

- 新人エンジニア
- 質問の仕方が分からない人
- エラー解決に時間を大幅に使ってしまう人

## Google人工知能開発チームの15分ルール

質問テンプレートに入る前に、そもそも質問をするタイミングについて考えます。

働きたての頃は、詰まった時に自分でずっと考えてしまいその結果、大幅に時間を消費してしまったという人も多いのではないでしょうか？

自分もそうでした。エラー解決や挙動がおかし箇所などを自分だけで長時間考え解決できなかった挙句、先輩に聞いたら一瞬で解決したという経験が多々ありました。

確かに自分で考えて解決しようとする試みは大切ですが、それによって長時間使ってしまったら開発全体の進捗にも影響が出てしまいます。

「**じゃあどのタイミングで質問をすべきなのか？**」

その一つの指標となるのが「[Google人工知能チームの15分ルール](https://twitter.com/math_rachel/status/764931533383749632?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E764931533383749632%7Ctwgr%5E%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Ftkybpp.hatenablog.com%2Fentry%2F2016%2F08%2F16%2F173055)」だと思います。

Google人工知能チームの15分ルールとは以下の内容になります。

- 最初の15分は自分で解決を試みる
- 15分経っても解決に至らなかった時は必ず人に聞く

前者を守らないと他人の時間を無駄にし、後者を守らないと自分の時間を無駄にする。

これを聞いて「**OK。じゃあ15分で無理だったらすぐ質問するわ**」と思うかもしれませんが、エンジニアの15分なんて秒で経過しまいます。

なので自分の場合は、エラー等で詰まってから**15分~45分程度**考え、それでも解決に全く至らない(解決策が見いだせない)場合は質問をするようにしています。

自分が先輩に質問するタイミングをまとめると、

- まず15分~45分程度自分で解決策を模索する
- その上で解決策を全部試したがクリアできなかったor全く解決策が浮かばなかった場合に質問へ

といった手順を踏むようにしています。

これはあくまで自分の目安でもあるので、それぞれの人によって自分が適切な時間やルールを決めて質問するのがよいかと思います。

(とはいうものの色々検証している間に45分を大幅に超えてしまうこともありますが...)

次の章から実際の質問テンプレートについて紹介します。

## 質問テンプレートについて

先に結論から伝えると自分は以下の手順で質問を作成します


**(1) 実現したいこと**
**(2) 実現するために自分が試した内容とその結果**
**(3) 調べた内容や資料**
**(4) 原因だと思われそうな箇所**

簡単な内容を質問の例として(1)~(4)を解説していきます。

### (1) 実現したいこと

まずはじめに自分が解決したい「**結論**」を伝えます。

これを先に伝えないと「**結局何をしたいの？**」と質問を受ける側はなってしまい大幅に時間をロスしてしまう可能性が出てきます。

今回は以下の質問を例に考えていきます。

**【実現したいこと】**

- 「該当の要素が横並びにならない」

※ 今回は誰でも理解しやすい簡単な内容を質問の例にしています。

---
### (2) 実現するために自分が試した内容とその結果

これを全く考えずに先輩にいきなり「**FlexBoxが効きません。コード見てください**」という質問は、相手の時間を取ることはおろか、先輩に「この子は自分で全く考えない子なんだ」と思われてしまいます。

そのため自分で最初は手を動かして試してみることが大切です。

試したことは箇条書き等でまとめると分かりやすいと思います。

**【実際に試したこと】**

- 横並びをしたい要素に``display:flex``を付与した
- 子要素の幅``witdh``を指定した
- ``display:block``で上書きされていないかをチェックした

**【実際に試した結果】**

上記を全て試してみたが、要素は横並びになりませんでした。

---
### (3) 調べた内容や資料

次にどのような思考を持って解決策を調べたのかを書いてきます。

**【調べた内容や資料】**

- 下記の内容でGoogleで検索をかけました
    - 「CSS 要素 横並び 効かない」
    - 「flexbox 効かない」
    
- 上記の検索結果より出てきた以下の記事を参考にしました
    - 記事URL①
    - 記事URL②

---
### (4) 原因だと思われそうな箇所

(1)~(3)で試した結果、解決には至らなかったが、その上で質問者に解決するための自分の仮説を用意しておく。

**【原因だと思われそうな箇所】**
- JavaScriptファイルがいくつか読み込まれていたのでその中で``display``を上書きするようなコードがあるかもしれない

上記を試みようとしたのですがJavaScript知見が自分にはまだなく、JavaScriptファイルが圧縮されておりコードの解読ができなかったので解決には至りませんでした。

このように最後に解決には至らなかったが、原因かと思われる箇所を明示し自分が試みようとしたことを記載することで、先輩としても解決の目処が立ちやすい質問を作成することができます。

### 最後に

いかがだっでしょうか。

今回は自分が新卒1年目で使っていた質問テンプレートを具体的な質問を通して紹介しました。

エンジニアとして働く上で「**分からないことが出てくるのは当たり前**」なので、自分で考えて正しい手順で先輩に質問をすることが大切です。

自分で考えすぎて長時間使ってしまうのもよくないし、逆に考えずに先輩の時間を大幅にとってしまうのも良くないです。

今回はそのようなことが起きないようにするための質問テンプレートを作成したのぜひ参考にしていただければなと思います。

他にも多数記事を執筆しているのでぜひ読んでいただければなと思います。

https://qiita.com/SMAC/items/e50c981e0518141be28f

https://qiita.com/SMAC/items/af433f1013221c5ed529

https://qiita.com/SMAC/items/3b14e2e8f89a33c0f959