【反省会】およそ1年半Ruby on railsを勉強したけど客先面談ぜんぶ落ちた話

# はじめに
避けては通れないSES業界ならではの常駐先との面談にまたしてもおちてしまいました。
今回はなぜダメだったかを時系列で過去を振り返ることで
原因について独自に解明して、自分に足りてなかったことを
発見していく目的でこの記事を残します。
同時に、今学習されている方のご参考になればと思います。
## 2016年9月
Ruby on railsの勉強会を週に一度およそ6か月に渡り
開催するという告知のメールが送られてきました。

そのときわたしは入社して2ヶ月ぐらいで
前職で働いていたデータセンターでの経験が少しあった程度です。
とりあえずプログラミングの勉強会なのかなっていうイメージでした。

中学生のころからゲームが作れるようになりたかったけど
色々調べて挫折してずっと悩みを抱えながら、
大学も文系で留年してやりたくない仕事にうんざりして
転職した先の会社でこんな告知があったので、
もしかしたらゲーム作れるようになるかもと思い
参加してみようってなったのがきっかけでした。

- ダメポイント
      - Rubyという言語についてよく調べず勢いで参加することを決めてしまった。

## 2017年1月
毎週土曜日の勉強会が始まって半年たちました。
現場の業務が土日出勤しなければいけないこともあり
毎回参加することはできませんでしたが
土曜日1日参加することは苦に感じなかったし、
終わってからの飲み会が好きだったのでいける日は通ってました。

この辺りから文書投稿機能を持ったwebアプリの作成を始めます。
どんなものかというと、
・投稿確認
・文書投稿
・投稿内容編集
・投稿の一覧表示
・投稿削除
といった機能を持ってるやつです。


それから作成したものを[heroku](https://id.heroku.com/login)をつかってデプロイするまでが勉強会の最初の課題でした。

にもかかわらず週に一度しか開催しないのに家では寝てしまっているだけ、
だらだらやっていたので最初からソースコードを書いて作るなんてことはせず
[GitHub](https://github.co.jp/)上にある似たようなのを作成している人のソースコードをコピペして、
ローカル環境で**「rails s」**してサーバ起動して
エラーがでたら調べて、別の人とエラー内容が一緒だったりで、
エラー内容が似てたらその人が貰ってる回答の通りに修正してみたり、
たまたま動いたらラッキーなんてことを繰り返していました。
それでも解決しないときは主催者に質問して頼るって感じでした。


知識もないし日曜日は家でやらない日がほとんどだったので、
結局完成するのに2ヶ月かかってしまいました。



- ダメポイント
      - 2017年の秋から冬にかけて土日出勤や夜勤が続き勉強会に参加することができず
モチベーションが保てていませんでした。
こういうときに腐ってしまったので私は成長しませんでした。1人でやる時間を作らないとやってたことはすぐ忘れていきます。

## 2017年7月
勉強会発足からもうすぐで1年になるころです。
2作目のwebアプリが完成したのがこの時期で、
1作目の機能に加え、画像投稿(投稿・編集・削除)とログイン機能
(ログイン画面・ユーザのマイページ)も追加し作成しました。

作り方は1作目をベースにクラス名や変数名を変え、追加する機能について
新たに加えていくようにしていました。

この辺からログイン機能をつくるのがむずかしく、
他のSNSのアカウントからログインを認証する(API連携)っていうのが
開発環境では動くのに本番環境ではエラーになってしまうなんてことも
解決に時間がかかったし、何かにつけて**「No method Error」**が返ってきて
原因を調べるだけで1日終わってしまうなんてこともよくありました。

それでも空いた日曜日は遊んでしまっていたので
理解度としては微妙なかんじで、わからないものは
考えすぎず、ある程度はスルーして、
余裕があったらまた調べて忘れてを繰り返す感じでした。

- ダメポイント      
 - 期限を決めて作成することが大事でした。私は特に、
        追い込まれないと勉強しないタイプでした。

## 2018年3月
文書投稿、画像投稿機能と、ユーザ間のメッセージ機能
(ユーザ一覧、メッセージ投稿)を加えた3作目が完成したのが3月末でした。

ソースコードは今まで通りGithub上に上がっているものと、
今まで作ってきたやつから参考にしました。

ほんとは友達追加機能みたいのも作りたかったのですが、
多人数と多人数のテーブルの関係性の定義づけが難解だったので
作成したアプリではこの機能を追加するのを諦めました。

ユーザ一覧に表示されるユーザを1人ずつ区分けされた状態で
表示させるようにするのもたくさん失敗しました。bootstrapのグリッドシステムの
使い方について何度も調べ直しては記述して試していました。
その他のアイコンのサイズをいい感じに調整するのとかも大変でした(泣)



- ダメポイント      
 - いきなり作ることを始めずに、まずはクラス図を作ってやるべきだったと思います。(作ってた時はクラス設計って用語すら知りませんでした)
メモ用紙に必要な機能を簡単に書いて机に並べることで構造の理解が深まるし、実際の現場でもカンバンと言って、ホワイトボードなんかに貼ってクラス設計するらしいので、同じことしてたら友だち追加機能も作れたかもしれないです。
 - 他サービスを参考にしたわりに、デザインの決め方が下手だったと思います。アイコンの意味とかを考えず自分がやりたいことを優先してしまい、使う人がわかりやすいものを作れませんでした。 実際わたしはその時、なんでこんな風に作ったか説明できませんでした。
 - 退会処理のエラーが解決できませんでした。メッセージを誰かに送った後、退会ボタンを押すと**「InvalidForeignKey」**が出てました。has_manyのdependentオプションの追記漏れに気づいたのは、この記事を書きながらなんでだったかをもう一度考え直したときでした。
 
```ruby:app\models\user.rb
# ユーザアカウントが削除されたら削除されるようにする設定、dependent: :destroy
has_many :messages, dependent: :destroy
```

## 2018年4月
ここから客先面談を受けます。

言語問わず開発の案件に応募を出していただいたのが17件で、
そのうち2件面談依頼をいただくことができました。

結果としてはぜんぶダメでした。

- ダメポイント
 - 全体的にどの面談でも説明力不足を感じました。開発業務経験が無い分、今までやってきたことを全部説明できるぐらいになってないと難しかったんじゃないかなと思いました。具体的には**「gemって何ですか？」**という質問にちゃんと答えられなかったです。うろ覚えだったので「Rubyのパッケージ管理ツールみたいなのです」って自信なさげに答えていた感じです。それでどんなことができるのかまで説明できるとウケはよかったかもしんないです。
 - **「RSpec」**を使用した経験が無いことで落ちてしまったパターンがありました。自学ではwebアプリを作りたかったので、テスト案件を視野に入れたような学習を一切しませんでした。ちょっとでもかじってたら結果は変わってたかもしれません。

# まとめ
よくある記事の成功体験を読んで、自分にもできそうと思ってしまい
実際全然できなかったようなパターンが私です。

あとここまでやってわかったのですが、
話で聞いてるほどRuby on railsの習得はそんな簡単じゃないです。

たとえば、**「rake db:migrate」**とコンソールで実行すれば
マイグレーションが実行されます。

このコマンドを実行したときに何が起きているのか忘れてしまったときに、
もう一度調べることをサボってはいけません。私は結構サボってました。

Rubyの勉強だけではなくrails(フレームワーク)の知見、環境構築の知見、テスト手法の知見、
デプロイ手法の知見も必要となっていくので、
総合的に学習しなければいけないことが多いということを
まずは知っておかなければいけませんでした。

それを踏まえた上で、私は寝る間を惜しんで勉強できなかったし
もしそれができたとしても次の日仕事場では居眠りしてしまっていたので、
辛い時期がしばらく続く覚悟が必要だったと思います。


# さいごに
20代も終わりに近づいているので、地に足つけて
業務経歴を活かした方針で頑張ろうと決めたのが今月です。

1年半続けたおかげで何かしら勉強する習慣はついたので、
次のことを始めようと色々手を出しているのが現状です。

しばらくは無理なく楽しみながら色々続けて、
新しい目標を見つけていこうと考えてます。

[勉強メモ](https://qiita.com/okapy0922/items/1e0a83de0be2dcec9f50)