エラー解決の正攻法と質問力・ググり力

- プログラミング初心者です
- エラーの解決方法がわかりません
- Googleでどうやって検索すれば欲しい情報を出せるかわかりません
- 人への正しい質問方法がわかりません

って方用です!!

# 要約

||||  
|:-:|:-:|:-:|
|１|[エラー解決の正攻法](http://qiita.com/yogoken/items/84dc3bbeeaba0c273d2c#%E3%82%A8%E3%83%A9%E3%83%BC%E8%A7%A3%E6%B1%BA%E3%81%AE%E6%AD%A3%E6%94%BB%E6%B3%95)||
||1-1|[エラー文と呼ばれる箇所をじっくり読んで見る](http://qiita.com/yogoken/items/84dc3bbeeaba0c273d2c#1-%E3%82%A8%E3%83%A9%E3%83%BC%E6%96%87%E3%81%A8%E5%91%BC%E3%81%B0%E3%82%8C%E3%82%8B%E7%AE%87%E6%89%80%E3%82%92%E3%81%98%E3%81%A3%E3%81%8F%E3%82%8A%E8%AA%AD%E3%82%93%E3%81%A7%E8%A6%8B%E3%82%8B)|
||1-2|[読んでも見当がつかなかったらその部分を検索して調べる](http://qiita.com/yogoken/items/84dc3bbeeaba0c273d2c#2-%E8%AA%AD%E3%82%93%E3%81%A7%E3%82%82%E8%A6%8B%E5%BD%93%E3%81%8C%E3%81%A4%E3%81%8B%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%82%89%E3%81%9D%E3%81%AE%E9%83%A8%E5%88%86%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%97%E3%81%A6%E8%AA%BF%E3%81%B9%E3%82%8B)|
||1-3|[解決できた際に、なぜそのエラーが出たのかを理解しておく](http://qiita.com/yogoken/items/84dc3bbeeaba0c273d2c#3-%E8%A7%A3%E6%B1%BA%E3%81%A7%E3%81%8D%E3%81%9F%E9%9A%9B%E3%81%AB%E3%81%AA%E3%81%9C%E3%81%9D%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%81%9F%E3%81%AE%E3%81%8B%E3%82%92%E7%90%86%E8%A7%A3%E3%81%97%E3%81%A6%E3%81%8A%E3%81%8F)|
|２|[質問力とググり力](http://qiita.com/yogoken/items/84dc3bbeeaba0c273d2c#%E8%B3%AA%E5%95%8F%E5%8A%9B%E3%81%A8%E3%82%B0%E3%82%B0%E3%82%8A%E5%8A%9B)||  
||2-1|[質問力](http://qiita.com/yogoken/items/84dc3bbeeaba0c273d2c#%E8%B3%AA%E5%95%8F%E5%8A%9B)|  
||2-2|[ググり力](http://qiita.com/yogoken/items/84dc3bbeeaba0c273d2c#%E3%82%B0%E3%82%B0%E3%83%AA%E5%8A%9B)| 


## エラー解決の正攻法


これからRuby on Railsを使って開発をしている時に必ず下のような「エラーを知らせる赤い画面」が一日に何十回と出てくると思います。
プログラミング初心者の方にとって **解決策を探す方法** を知らないと何時間もかかってしまうということがざらにあります。

[![https://gyazo.com/e0f537788427a2898742a2b7b3c6bba3](https://i.gyazo.com/e0f537788427a2898742a2b7b3c6bba3.png)](https://gyazo.com/e0f537788427a2898742a2b7b3c6bba3)

ここでは、このようなエラーに直面した際の対処方法をお伝えします。

1. **エラー文と呼ばれる箇所をじっくり読んで見る**
2. **読んでも見当がつかなかったらその部分を検索して調べる**
3. **解決できた際に、なぜそのエラーが出たのかを理解しておく**

上記の1から3をエラーが発生するたびに回すようなイメージでエラー解決していきます。

#### **1 エラー文と呼ばれる箇所をじっくり読んで見る**

上記では「Template is missing」と書いてあります。ということは、「テンプレートがない」ということです。もう一個下を読み進めると、「Missing template posts/index, application .....」と書いてあります。「どうやらposts/というディレクトリの下のindexというファイルがないようだ」と推測できましたでしょうか？っただどのように解決すればいいかはわからない状態だとします。

#### **2 読んでも見当がつかなかったらその部分を検索して調べる**

とりあえずGoogleを開いて、エラー文そのまんま検索してしまいましょう。それで一番目に出てきたのが↓です。
[![https://gyazo.com/f347f13b953e0e11029a6f9a813d67ec](https://i.gyazo.com/f347f13b953e0e11029a6f9a813d67ec.png)](https://gyazo.com/f347f13b953e0e11029a6f9a813d67ec)

この記事をよく読み、今回の例に当てはめて見ると
「posts/index, application/indexに該当するビューを app/views から探したけれどいずれも見つからなかった」とさっきの赤いエラー文に書いてあることがわかりますね。
また、「解決策としてapp/views/posts にindex.html.erb を配置してあげると、erb に保存した内容が表示されるはずです」とも書いてあります。これで解決策もわかりました。

#### **3 解決できた際に、なぜそのエラーが出たのかを理解しておく**

一番重要なのはここで、 **なぜ上記のエラーが出て、index.html.erbを作成するとエラーじゃなくなるのか** ということです。
そもそも『ActionView::MissingTempate』というエラーは「指定されたviewファイルが無い場合などに起きるエラー」ということを抑える必要があります。

そして、こういう時の原因としては

1. 部分テンプレートが存在しない可能性
2. ファイルの名前が間違っている可能性

が考えらるというところまで理解しておくと次会った時に瞬時に解決まで導けます。

発生する様々なエラーに上記の1から3までを繰り返すことでほとんどのエラーを自力で解決することができるはずです。

ただ、いくら調べたり、コードを追加しても全く解決できる兆しが立たないこともあると思います。
目安として、 **15分** 自分で考えてみて解決できないのであればそれ以降考える時間は無駄です。

その際に、メンターに質問することを推奨するのですが、ただ闇雲に質問するのではダメです。
また、グーグル検索でをいかに技術を使いこなすかということについてもこれから言及していきます。 

#### おまけ
万が一バグの箇所を特定でき、スクリプトを修正したはずなのにエラーが出るって時に
**ファイルが読み込まれてない** 可能性があることも確認してください。
例として、rails cのreload!ではapp以下は読み込まれるけど、configの変更は反映されないとかです。

同様に、routes.rbなど**config/** の配下にあるファイルを変更した後も**rails serverを再起動** し直さないと
新たに加えたroutes.rbの記述が反映されません。そして、新規追加されたURLで求める画面を表示することができませんので注意が必要です。

## 「質問力」と「ググり力」

研修を通して、実際には二つのことを身につけて欲しいです。

**A. コミュニケーション能力(伝えたいこと、やってほしいことを正確に相手に伝える力)**
**B. 難しい概念を理解する力(問題を分解して理解して、体系化して理解する力、思考体力)**

実務配属された際は、主に社員さんからイシューやフィードバックをいただくのですが、
それまでに上記の特に**A**に関しては身につけておかないと、双方にとってマイナスに働いてしまいます。

研修中に技術力をつけることはもちろんですが、
上記の二点をしっかりとつけるために「質問力」と「ググり力」の向上は不可欠なので、
ちょっとしたtipsをご紹介します。

### 質問力を高める目的
「質問する側」と「質問される側」が **最小工数** で解を出せるようにする。

- 1. **ロジカルシンキング** とそれに則った **伝え方** を身につける

### ググり力を高める目的
**最短経路** で **問題解決策が書いてある設計図** を探す。

- 1. 情報を検索するためのキーワード選出技術を学ぶ
    - a **複数キーワード検索**
    - b **Google検索テクニック**
    - c **期間指定で検索**
    - d **英語で検索**
- 2. 信頼できるサイト・著者を知る
- 3. 一次ソースを調べる

## 質問力

### 1. ロジカルシンキングとそれに則った伝え方を身につける

**Slack連絡では何を相手にして欲しいのかを意識して伝える**
あくまで、文字しかないため伝え方によっては不快感を与えてしまうことがあります。
意識することは、 **技術的な質問の際に相手に何を教えて欲しいのかを端的に伝える** ことです。


#### **NG例**

```
質問です。
最後のtrueがあるが、set_userはhogehoge_controller.rbのupdateアクションでserviceオブジェクトのhogehogeにHoGeのenumの値を入れるためなためなのでidx.hogehogeで問題ないのではないか？(trueを消してもいいのでは？)
```

意味不明ですね↑読み手のことを全く考慮に入れていないです。
「なんの話？(お前どこやってんのか知らないよ)、結論何が知りたい？どこまで自力でたどり着いたの？」

#### **改善例**

A案

```
背景

やりたいこと

現状

聞きたいこと
```

B案

```
質問です。
【現状】
セキュリティ研修のSQLインジェクション

【質問】
脅威として認証を回避されること。対策案でプレースホルダを使うまでは理解済みであるが
実際の具体例でどのようにSQLインジェクションが発生するかが理解できないでいますので、
具体例を用いて説明して欲しい。

【調べたこと(コード付き)】
SELECT * FROM users WHERE email = 't' OR 't' = 't'; 
こんなコードはあったがちょっと読み方がわからなかったです
```

C案

```
Aではないか？そう思った理由はxxxです。
```

例として、【現状】【質問】【調べたこと(コード付き)】を説明するだけで
「今、私はこの範囲をやっていて、結論これこれが知りたいです。ちなみに、ここまで自分で調べました」
ってことが一発でわかりますし、答える方も気持ち良く答えられると思います。

上記の中で腑におちたものがあれば使っていただければいいですが、
ちょっと付け足したりして自由に伝え方を考えてみてください。


## ググリ力

### 1. キーワード選出技術
#### a **複数キーワード検索**
- 文章を単語に分割する
	- 「rubyonrailsとスラックでボットを作る方法」ではなくて「rubyonrails スラック ボット 作成」とか

#### b **Google検索テクニック**
- 検索ボックスに特別な検索キーワードを含めることで精度の高い検索ができる機能です。
	- マイナス検索
		- qiitaは有名だけど、あえてqiitaの記事以外の情報源が欲しい
			- `ruby on rails -qiita`
	- フレーズ検索
		- ""をつけて完全に一致したもののみ検索
			- 普通は「Ruby」「メタプログラミング」「入門」でgoogleは探してしまうが
			- ”Rubyメタプログラミング入門"で完全一致しか探さないため相当絞られる

#### c **期間指定で検索**
- 期間の設定方法
	- 検索した後に右上の「検索ツール」で一年以内とか選択することで最新の情報にフィルタリングをかけて検索できます

#### d **英語で検索**
- `rails スコープ　使い方`44,500 件ぐらいから抽出
- `how to use scope on rails`　5,120,000件から抽出するから、それだけ精度が高い解決策がある

### 2. **信頼できるサイト・著者を知る**
- Qiita
	- 日本で最も有名なプログラマ技術情報共有サービス
- Stack Overflow
	- 世界で最も活用されているエンジニア専門のQ&Aサービス
- Ruby on Railsのガイド: https://railsguides.jp/
- Ruby リファレンスマニュアル: https://docs.ruby-lang.org/ja/2.3.0/doc/index.html


【おすすめ】

[![https://gyazo.com/db1c98063f61ad9168fecac3492c931c](https://i.gyazo.com/db1c98063f61ad9168fecac3492c931c.png)](https://gyazo.com/db1c98063f61ad9168fecac3492c931c)
RubyやRailsなどのドキュメントを一元管理したい場合は
https://kapeli.com/dash
をダウンロードしてインストールすれば、わからないことがある際にすぐにリファレンスを見れます。


### 3. **一次ソース(github)を読む**
- 開発者や開発した組織が提供する情報(信頼性が最も高い)

例えば、kaminariというgemについて知りたいのであれば
「kaminari 使い方」と検索するより、本来であれば「gem kaminari」と検索してgithubのソースコードを読んだ方が勉強になる

### 最後に

「ググってもググっても、、」なときはそもそも何がわかんなくて具体的にどういうコードを見つけたいのかを明確化しましょう！！
案外難しく考え過ぎてたってこともよくありますので...