これからプログラミングを始めるみなさんへ

## はじめに

はじめまして。見習いエンジニアの古内と申します。
プログラミングをはじめてもうすぐ１年。
勉強の一環として始めたゲームのツール開発の経緯や、初心者ならではの失敗談や改善点を残していきたいと思います。

## 開発経緯

きっかけは去年の GW に実家に帰省した弟からの一言。

「プログラミングやってみない？」

以前からその分野に興味はあったので背中を押される形で Progate にて勉強をはじめました。
実際やってみると今まで使ってきたサービスの裏側が見え、もっとやってみたい、もっと知りたいと思うようになりました。
特に躓くこともなくあっさりと終了。

これなら本番もいけるかも、というわけで開発をスタートしました。

## 開発環境

### 環境

-   Ruby 2.5.1
-   Ruby on Rails 5.2.1
-   PostgreSQL
-   Docker
-   Docker Compose


### ツール

-   Git ( GitHub )
-	Atom Editor
-	iTerm 2
-	PG Commander

# 失敗談や改善点

ではここから私が一年間で経験した失敗談とその改善点をセットにして挙げていきたいと思います。

## 環境構築にものすごく手間と時間がかかる

Progate ではエディタや開発言語、フレームワークまですべて準備された状態でしたが、自分一人で開発を始めるとなるとそれらの環境を準備するところから始めなければなりません。

例えるならば実家ぐらしから独り立ちするようなものでしょうか。アパートで暮らすとなると家具や家電を用意し、家事も全て自分でやらなければなりません。

それと同じで Docker で開発環境を整えるにはポートの開放や作業ディレクトリなどの設定、ビルドしたコンテナに言語やフレームワークのインストールなど他にもやらなければならないことが山程あります。

### 反省点

初めての開発はわからないことばかり。プログラミングの勉強はしていましたが、環境構築に関しては全く触れていなかったのでそれを調べているだけで２日過ぎてしまいました。
それにコードを書き始めても１回でうまくいくことなんて滅多にありません。コードを書く -> エラー -> 修正 -> エラー -> ... の繰り返し。
開発に期限がある場合もあると思います。あとになって慌てないよう、できることは早めに進めることが吉です。

### 改善策

やるべきことに優先順位を付け手を抜くことは抜き、やり込むことはしっかりと
やり込みましょう。
最終的にやりたかったことは開発環境の構築ではなく、プログラミングだったので有志の方が作成してくれたテンプレートを活用しました。
環境構築が難しいと感じたときは GitHub 等に環境のテンプレートを公開している方がいらっしゃるのでそちらを参考にするといいと思います（私は[こちら](https://github.com/furuuchitakahiro/rails-docker#user-content-rails-%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E3%81%84)を参考にしました）。

## 英単語が読めない、わからない

とにかく英単語が多いです。ドキュメントを見ても全部英語。エラーメッセージを見ても全部英語。学校を卒業してから英語に触れる機会がなかったので頭が拒否反応を起こしてしまいました。

### 反省点

私はエラーメッセージを読もうとはしませんでした。前述の通り英語に拒否反応を起こしているので、メッセージをそのまま検索。結果、目当ての結果が出てこないことが大半でした。同じメッセージが表示されていてもエラーが起こっている環境は人それぞれなので、自分と同じパターンの人がいるとは限りません。

### 改善策

世の中の便利なものを最大限活用しましょう。
英単語がわからないときは chrome の拡張機能に[ google 翻訳](https://chrome.google.com/webstore/detail/google-translate/aapbdbdomjkkjkaonfhkkikfgjllcleb) があります。単語を選択するだけで自動で翻訳してくれます。

エラーを起こしたときはエラーメッセージやその本文、公式ドキュメントを見てみましょう。英語ばかりですが上記の翻訳機能を使えばなんとか読むことができるはずです。

## 要素分解ができない

例えばサジェスト機能を実装するとします。
一口にサジェスト機能と言ってもそれは様々な技術の集合体であり、それを１つ１つ紐解きプログラミングしていく必要があります。
しかし私は機能そのものの名前を検索していたため、実装のためのキーワードがわからず、丸一日消費してしまいました。


### 反省点 

正直これが一番難しいです。

例に上げたサジェスト機能を分解すると 、

~~~
1.	HTML に入力された文字列を javascript で取得
2.	文字列をクエリ文字列でフロントからサーバーへ
3.	送られてきた文字列で DB 内を検索
4.	検索結果を Json に変換
5.	Json をサーバーからフロントへ送り返す
6.	Json を HTML 上に展開
7.	展開された文字列がクリックされたときその文字列を入力欄に代入
8.	展開された文字列を非表示にする
~~~

これだけの技術が必要です。
要素分解することができればあとは調べながら実装するだけです（私はここまで分解できませんでした ... ）。

### 改善策

自己解決能力はとても大切なことです。

しかし慣れない環境や単語に何をどのように調べればいいか検討がつかないことがあると思います。にっちもさっちもいかないときはそのコードを誰かに見てもらうのも手です。言葉では伝え切れなくともわかることがあるかもしれません。

他にも１度ノートやホワイトボードに書き出してみるのもいいと思います。頭の中だけで考えているとどうしてもゴチャゴチャと散らかりがちです。文字や図として書いて可視化することで今まで見えにくかったものも見えるかもしれません。


## 周りのできる人ばかりを見てしまう

これは技術的なこととは関係ありませんが、自分を周りの人と比較してしまい自信が喪失してしまいました。

こんなこともできないのに本当に自分は必要とされるのだろうか、そもそもこんなことをやる意味あるのだろうか、どんどんネガティブな考えに。できる人はこの時間、この瞬間にも前に進んでいるのに私は何をやっているのだろうと焦燥感に駆られていました。

### 反省点

必要以上に他人を意識しすぎていたと思います。

### 改善策

人は人、自分は自分です。

当たり前ですが最初からできる人なんて存在しません。上ばかり見ていても首が疲れるだけです。たまには後ろを振り返り自分が歩いてきた道を見るのもいいかもしれません。そして落ち着いたらまた上を向いて歩いていきましょう。



## 最後に

自分もまだわからないことだらけで技術的なことは書けなかったのですが、個人的に大変だったこと、辛かったことを振り返ってみました。ネガティブなことばかり書いてしまいましたがそれ以上に面白い発見、感動する体験があると思います。もし私と同じようなところで立ち止まってしまったときに解決の手がかりになれれば幸いです。

## 参考

- [Poketool](https://github.com/full-fruity/poketool)
作ったもの