【壁】新卒1年目にぶち当たった頻出エラーを振り返ってみる

# はじめに
こんにちは！
アイレット株式会社で、新卒エンジニアとして働いている森田です。
今回は、新卒1年目の私が今年ぶち当たった頻出エラーについてまとめてみたいと思います。
皆さんの今年の頻出エラーもぜひ教えてください！:v:

# この記事を書こうと思ったきっかけ
私は大学時代に独学でプログラミングを学んでいました。
しかし、当時はChatGPTもGeminiもなかったため、初学者の私はエラーを自力で解決することができず、心が折れ学習を辞めてしまいました:cry:

現在では、生成AIを利用することでエラー解決が当時よりも簡単にできるようになっています。
そういったツールを使いながら、以下の本でエラー解決のノウハウを学び、基本的なエラーについては自力で解決できるようになりました:smile:

https://www.shoeisha.co.jp/book/detail/9784798180892

ということで、この1年の振り返りとして今年よく見たエラーをランキング形式でまとめてみました！

# 2024年私的頻出エラーランキング
それでは、2024年私的頻出エラーランキングを1位から3位まで振り返ります！

## 3位　TypeError
第3位は`TypeError`です！:tada:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936033/eb4b42b3-1f7a-dadf-192d-8392d4453008.png)


### エラーが起こる主な原因
TypeErrorは基本的に型が**期待される型と異なる型である場合**に発生します！

例えば、Pythonで整数と文字列を足そうとすると、以下のエラーが出力されます。
```
// 入力
a = 5
b = "hello"

result = a + b

// 出力
TypeError: unsupported operand type(s) for +: 'int' and 'str'
```
Pythonのオペランド演算子では、同じ型の値が期待されています。

にもかかわらず、int型とstr型という異なる型を足そうとしたため、`TypeError: unsupported operand type(s) for +: 'int' and 'str'`というエラーが出力されました。

また、PHPにおいて引数の型が指定されている場合に、異なる型の値で関数を呼び出すと、以下のエラーが出力されます。
```
// 入力
<?php
function addNumbers(int $a, int $b): int {
    return $a + $b;
}

echo addNumbers(5, "10");
?>

// 出力
Fatal error: Uncaught TypeError: Argument 2 passed to addNumbers() must be of the type int, string given（略）
```
addNumbers関数ではint型のaとint型のbが渡されることを期待しています。

にもかかわらず、addNubmbersをstring型の "10" で呼び出しているため、
`Fatal error: Uncaught TypeError: Argument 2 passed to addNumbers() must be of the type int, string given`
（addNumbers関数にstring型が渡しているけど、int型を渡してね！） 
と怒られてしまっています。

### 解決策
前述の通り、TypeErrorは基本的に型が**期待される型と異なる型である場合**に発生します。
なので、解決策としてはめちゃくちゃ抽象的ですが、**期待されている型のデータを渡してあげる**のが最適解です。

上の例で言えば、
1つ目は演算対象の値の型が同じであることが期待されているので、int型かstring型のどちらかに寄せることで解決できます。
2つ目は関数の引数の型が指定されているので、期待されている型通りのデータを渡してあげることで解決できます。

TypeError解決していきましょう！

## 2位　command not found
第2位は `command not found` です！:tada: :tada:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936033/545220a7-5266-49ac-5aa7-e775da77d03c.png)

### エラーが起こる原因
コマンドの実行ファイルが**見つからない場合**に発生します。
この「見つからない」には以下2つの意味合いがあります。

**①そもそも実行ファイルがインストールされていない**
**②インストールはされているが、パスが通っていない（実行ファイルが認識されていない）**

### 解決策
**①そもそも実行ファイルがインストールされていない**
インストールしましょう！

**②インストールはされているが、パスが通っていない（実行ファイルが認識されていない）**
パスを通しましょう！
「パスを通す」というのは、簡単なコマンドでプログラムを実行するために、環境設定ファイルに書き込みを行うことを指します。
例えばgitのバージョン確認を行いたい場合、以下のようにコマンドを実行できます。
```
//PATHを通さない場合
k-morita@k-morita ~ % /usr/bin/git -v
git version 2.39.5 (Apple Git-154)

//PATHの通し方(zshの場合)
k-morita@k-morita ~ % vi ~./zshrc
→ ~./zshrcに export PATH="/usr/bin:$PATH" を書き込む

//PATHを通す場合
k-morita@k-morita ~ % git -v
git version 2.39.5 (Apple Git-154)
```
パスを通すことで、パスを指定して実行していたgitコマンドを`git ~`という形で実行できるようになりました！
「パスを通す」ことについては、以下のブログが非常に参考になりました。是非ご一読ください！

https://zenn.dev/d0ne1s/articles/1f435463551ac2


## 1位　UndefinedError
映えある第1位は… `UndefinedError`です！:tada: :tada: :tada:

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936033/a0b936cb-003e-b3f6-e5eb-c8db816dd919.png)

### エラーが起こる原因
対象とする変数やプロパティが**未定義の場合**に起こります。

```
// 入力
<?php
$resolve = 'エラー解決！' 
echo $resolbe;
?>

// 出力
Notice: Undefined variable: resolbe
```

上記コードではresolveという変数が定義されているのみで、resolbeという変数は定義されていません。
にもかかわらず、echoで変数resolbeを出力をしようとしているためUndefined（未定義）と言われています。
変数名のスペルミスをしても起こるので、気を抜いていると結構やってしまいますね^^;
### 解決策
気をつけて定義してあげましょう！
```
// 入力
<?php
$resolve = 'エラー解決';
echo $resolve;
?>

// 出力
エラー解決
```
原因の例ではスペルミスをしていたため、UndefinedErrorが起こっていました。
そのため、スペルミスを修正すれば、エラーを解決することができます。

# おわりに：エラーに対する考え方の変化
元々エラーが出ると、コーディングが止まってしまって最悪だー！:disappointed_relieved:と思っていたのですが、エラーのパターンを理解していくことで、エラーを「自分のコードをどのように修正すれば上手く動くようになるのかを教えてくれるもの」と捉えることができるようになりました。

考えてみると、自分のコードが上手く動かないときに、エラーが出てくれなければ問題解決にかなりの時間がかかってしまうので、出てくれた方がありがたいですよね！:grin:

今日も元気にエラー文を有り難がりながら、エラー解決をしていきたいと思います！:v: