迷走と再生：一人旅のオデッセイ、失敗と勘違いの回顧録

# 自己紹介

2020年5月 コロナで外出できなくなったのでPythonを触り始める。

2021年4月 仕事を辞めてエンジニア養成スクールに入学する。詳細は次の記事をお読みください。

https://qiita.com/philosophy_note/items/0b6f8751e61728c26d30

2022年2月 都内のベンチャー企業でエンジニアとして働き始める。Ruby on Railsがメイン。

プログラミング学習をしていく上で多くの失敗や勘違いをしてきました。
かねてから記事としてまとめたいと思っていましたが、
怠惰によりできておりませんでした。
今回、次のキャンペーンを見ていい機会なので書いてみることにしました。

https://qiita.com/official-events/e9f582bec72278130942

## 環境構築

### パスを通す
(^O^)「Pythonで自然言語処理をするぞ！ よくわからないけどMecabとやらを使えばいいらしいからネットの記事を元にやってみよう！」

（数時間後…）

(；д；)「できない…**issueを英語で書く必要はありません** ってどういう意味だろう…泣」

#### 対応策 
「パスを通す」ことを理解する。プログラムがどこを参照しているかを意識する。

https://qiita.com/sta/items/63e1048025d1830d12fd

環境変数も最初はよくわかっておりませんでした。

https://qiita.com/fuwamaki/items/3d8af42cf7abee760a81


参考：Mecabについて

https://taku910.github.io/mecab/

https://rinsaka.com/python/nltk/01-prepare.html

### 爆速という言葉に騙される
(^O^)「Railsでアプリを作ろう！ ローカル環境を汚したくないから、Dockerで環境構築しよう！　30分で環境構築っていう記事を見つけたらサクッと環境構築して早く開発しよう！」

（数時間後…）

(；д；)「MySQLのimageのバージョンやGemの問題で全く環境が構築できない…泣」

#### 対応策
Dockerfileで記述されている内容を理解する。
ホストマシンの環境がDockerコンテナの動作に影響を及ぼす可能性があることを認識しておく。
特にM1・M2 Macの場合、CPUがこれまでのMacと異なることを把握する。

https://zenn.dev/suzuki_hoge/books/2021-04-docker-picture-60fbe950136be9c7ad85

## デプロイ
### ローカル環境で動くならば本番環境でも同じように動くと思い込む
(^O^)「ローカル環境で動くアプリケーションを最後まで作りきったぞ！あとはHerokuにリリースするだけだ！」

（数時間後…）

(；д；)「エラーが大量に出た…やっと画面が映ったと思ったらcssが適用されていない…」

#### 対応策
ローカル環境と本番環境は異なることを理解する。
デプロイできるかを確かめるためにHello Worldができたらすぐにデプロイする。
本番環境での静的ファイルの扱われ方を勉強する。

https://railsguides.jp/asset_pipeline.html

https://docs.djangoproject.com/ja/4.2/howto/static-files/deployment/

## Git
### 変更しすぎて訳がわからなくなる
(^O^)「頑張って1つ機能をいいところまで作ったぞ！もう一工夫すれば完成だ！」

（数時間後…）

(；д；)「変更しすぎて訳がわからなくなって、戻そうとしたら、できていたところも削除してしまった…」

#### 対応策
Gitを入れてこまめにコミットする
コミットメッセージにどこまで作業したかを記録しておく
コミットはコマンドで戻せる（コマンドの内容には要注意）

https://www.amazon.co.jp/%E6%94%B9%E8%A8%822%E7%89%88-%E3%82%8F%E3%81%8B%E3%81%B0%E3%81%A1%E3%82%83%E3%82%93%E3%81%A8%E5%AD%A6%E3%81%B6-Git%E4%BD%BF%E3%81%84%E6%96%B9%E5%85%A5%E9%96%80%E3%80%88GitHub%E3%80%81SourceTree%E3%80%81%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E6%93%8D%E4%BD%9C%E5%AF%BE%E5%BF%9C%E3%80%89-%E6%B9%8A%E5%B7%9D-%E3%81%82%E3%81%84/dp/4863543433

https://qiita.com/itosho/items/9565c6ad2ffc24c09364

https://zenn.dev/itosho/articles/git-commit-message-2023

https://qiita.com/shuntaro_tamura/items/06281261d893acf049ed

### コミットで載せてはいけないものを載せてしまう
(^O^)「S3にアクセスするプログラムを書こう！アクセスキーはとりあえず直書きで書いておいて、最後に削除しよう！」

（数時間後…）

(^O^)「とりあえずいいところまでできたから、コミット！」

（数時間後…）

(^O^)「最後までできたぞ！忘れずにアクセスキーを削除して、コミットしてプッシュ！」

(；д；)「Githubからメールが飛んできた…どうして…」

#### 対応策
**コミット履歴に載った瞬間にアウトです。.envを使用するなど、開発初期からコードに載せない対策をとりましょう。**

https://zenn.dev/st43/articles/88f3e7a60ba216

## AWS
### EC2を止め忘れる

(^O^)「ディープラーニングしたいからEC2でサーバー立てたけどよくわからないや」

（一月後…）

(；д；)「（請求書を見ながら）こんなにAWS使った覚えないよ…」

#### 対応策
「自分は大丈夫w」と思わずに黙って、無料利用枠を超えた場合のアラートを設定する

https://aws.amazon.com/jp/getting-started/hands-on/control-your-costs-free-tier-budgets/

この他AWSを初めて使う際に設定しておいた方がいい内容の記事がたくさんあるので目を通しておく

https://dev.classmethod.jp/articles/aws-baseline-setting-202206/


## 通信関連

### レンダリングを理解していない
(^O^)「APIで取得したデータでグラフを描画しよう！」

（数時間後…）

(；д；)「データを取得すると画面全体が更新される…グラフだけ更新できればいいのに…」

#### 対応策
**Ajax通信を勉強する**

https://developer.mozilla.org/ja/docs/Web/Guide/AJAX

https://qiita.com/hisamura333/items/e3ea6ae549eb09b7efb9

http通信も勉強しましょう

https://gihyo.jp/book/2010/978-4-7741-4204-3

### APIを理解していない
(^O^)「APIを使えばデータをたくさん取得できる！便利！」

（その後…）

(；д；)「え、APIって自分で作れるの！」

#### 対応策
**何もわかっていないのでAPIをゼロから学ぶ**

[APIを基礎からしっかりと学び、Django Rest Frameworkで天気情報を取得するアプリを作ろう！](https://www.udemy.com/course/api-django/)

https://qiita.com/Yametaro/items/46f134f0ac31b751ee6a

学んだら作る際の注意点を勉強する

https://www.oreilly.co.jp/books/9784873116860/

## DB関連
### 適当にDB設計してやり直す
(^O^)「DBなんてデータを格納するだけだから適当でいいや、早くコード書こう！」

（一週間後…）

(；д；)「テーブルの設計を適当にしすぎて、機能追加できない…ゼロからやり直しだ…」

#### 対応策
DB設計を疎かにしない。
フレームワークに頼っているとSQLも疎かになりがちなので、勉強する。

https://www.kinokuniya.co.jp/f/dsg-08-EK-1169058

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

### UPDATE・DELETEにWHEREをつけない
(^O^)「開発してたらデータを間違えた！UPDATE文で修正しよう！」

(；д；)「間違えてテーブルの内容を全て修正してしまった…ロールバックもできない…」

#### 対応策
「気をつける」だと対応にならないので、環境設定で対応する

https://dev.mysql.com/doc/refman/8.0/ja/mysql-tips.html

どうしてもSQLで書き換える場合はトランザクションを張ってロールバックできるようにする

https://dev.mysql.com/doc/refman/8.0/ja/commit.html


## 感想
この記事を読んで
「こんな失敗するわけないだろwwwwwww馬鹿じゃねえのwwwwwwww」
「こいつアホだなwwwwwwwww」
と同じ失敗や勘違いをしてくれる方が一人でも増えれば幸いです。

記事を書いてみて思ったのですが、自分の理解・対応策はまだ不十分です。
「そうじゃない」「もっとやるべきことがある」などコメントをいただけますと幸いです。

## 余談
タイトルはChatGPTに考えてもらいました。![スクリーンショット 2023-08-03 1.19.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638565/2404907c-d6be-cad5-b30f-eefc95113116.png)