【体験談】未経験から半年でweb系エンジニアになるために、、、

#はじめに

エンジニアの皆様、今日も元気に開発やっておりますでしょうか。

この度、半年前まで全くの未経験だった私がrailsの自社開発企業に内定をいただき2020/2からwebエンジニアとして働くことになりました。
友人から経緯や通っていたプログラミングスクールについての質問がちょこちょこ来るようになったので、これからエンジニアに未経験転職する方や独学中の皆様の励みになればと思い記事をまとめることにしました。

#私について
まずはじめに、少しだけ自分のプロフィールについて話します。
現在２３歳で、早稲田大学文化構想学部を卒業後、食品のメーカーで営業をしていました。
**1年半ほど勤めた後に、退職し、エンジニアになることを決めました。**
（詳しい経緯や動機は需要があれば書きます、、、）

2019/6末日に退職し、プログラミングスクールTECH::EXPERTに通うことを決めました。
独学ではなくスクールに通った理由は以下の２点

- 短期間で学習＋転職活動を終わらせて、実務経験を積みたかったため
- ある程度の強制力がないと自分を律せないと思ったため

その中でもrubyをメイン言語としている点とチーム開発がカリキュラムに組み込まれている点を重視して、
TECH::EXPERTに通うことを決めました。

正直、この６ヶ月間の資金繰りは結構辛かったです。

| Left align       |       Right align | 
|:-----------------|------------------:|
| TECH::EXPERT受講費         |             ６０万円|
| 日々の食費     |         ５万円/月    |
| 居住費          |              ５万円/月  |
| 水光熱費           |                １万円/月 |
| 通信費       |             １万円/月 |
| 交通費          |           １万円/月 |
| 交際費          |           ２万円/月 |
| 雑費          |           ３万円/月 |
ざっと見積もってもこんくらいでした。他にも先払い住民税やmacbook新調費や転職活動の交通費等結構お金はかかります。私は友人の家に転がり込んだのでなんとか人間らしい生活はできていました（笑）
少なくとも受講費とは別に半年間くらい生活できる貯金はしておいた方がいいかもです。

話が少し外れましたが、そんなこんなで**2019/7/20からTECH::EXPERTで本格的にプログラミングの勉強をはじめました。**


#エンジニアになるための６ヶ月

##準備

前職は営業だったためプログラミングはズブの素人でした。
「まずは自分の環境を整えないと」とおもい色々生活環境を変えました。

- まずは退職。（両親には結構反対されました（笑））
- プログラミングスクールTECH::EXPERTの申し込み。
- 東京へ引っ越し。(前職の勤務地が名古屋だったため)
- progateをとりあえず１周。
- macbook pro購入
- twitter,Qiitaアカウント開設

こんなかんじですかね。結構色々環境を変えました。
あと退職してから時間あったので、東南アジアに１週間くらい旅行いってました（笑）



##１ヶ月目-７月
私が通っていたプログラミングスクールでは入校の２週間前からカリキュラムを受講できたので、
7/20まではひたすらガリガリカリキュラムを進めていました。

**内容はHTML,CSS,Ruby,Railsの基礎を一通りやる。
その後、カリキュラムに沿ってtwitter風アプリを作るって感じでした。**

正直、初めはちんぷんかんぷんでした。
*「クラスってなに？オブジェクト指向？」
「環境構築ってこんな時間かかるの？」
「やること多すぎ！！」*
って感じでした。

それでも毎日12時間、休みなしでスクールに通って、帰宅してからも家で勉強していました。
（ちなみにこれを3ヶ月続けていました）
『よく体調壊さなかったな』と今では思います。

###制作物
[twitter風アプリ](https://fast-falls-4868.herokuapp.com/)

##2ヶ月目-8月
**8月からは応用のカリキュラムに入り、メッセージアプリを作成していました。
またGit,Github,jQuery,AWS,SQLも並行して勉強していました。**

このあたりからrubyやrailsの挙動について少しずつ慣れてきました。
バグが起こっても仮説→調査→原因発見→解決のサイクルを回せるようになり、
ほとんどのバグを一人で解決できるようになりました。

簡単なアプリケーションは一人で作れるようになり、
gemの使い方やCRUDは何も見なくてもガリガリコードをかけるかけるようになってきたのもこの頃です。

**隙間時間にLINEのBOTや日記アプリ、マッチングアプリも制作していました。
とにかく寝る時間と食う時間以外はコードを書いていました。**

またスクールでは友人もたくさんできて、学習が楽しくなってきたのもこの頃からです。
わからないことや新しく得た知識も教え合い、モチベーションも保てました。
20代が多かったので共通の話題や価値観も近い人が多く、普通に居心地がよかったです。
ちなみに卒業してからもプライベートで遊んだりする友人もできました。

###制作物
[メッセージアプリ](https://thawing-stream-63240.herokuapp.com/users/sign_in)

##3ヶ月目-9月
いよいよプログラミングスクールのカリキュラムも残り１ヶ月になり、
最終課題のチーム開発を残すのみになりました。

最終課題では某フリマサイトのクローンを作るというものでした。
**SNS認証からAjax通信での検索や決済機能、AWSデプロイ、SSL化などアプリケーション作成の基礎をフロントからインフラまで集大成で行いました。
ここからカリキュラムはないので、自分自身でやり方を調べながら実装していかなければなりません。**

このチーム開発を通して、かなり技術的にレベルアップしたように感じます。
答えがないため、頭から尻まで考えて実装しなければならないし、
ありがたいことにスクラムマスターをやらせていただいたため、
チームでの開発の難しさを感じれたのも良い経験でした。


###制作物
[フリマサイト](https://freemarket-sample-58a.com/)
[フリマサイトソースコード](https://github.com/nakanishikeita03/freemarket_sample_58a
)

##４ヶ月目-１０月
ここから就職活動に入る人もいましたが、私はポートフォリオの作成にとりかかりました。
[「エンジニア向けのコミュニケーションアプリ」](https://go-en-jp.com/)を作成しました。

概要が気になる方は[ソースコード](https://github.com/nakanishikeita03/kei-match2)を見てください。

- Bootstrapとメディアクエリを活用したレスポンシブ対応
- jQueryを用いた動的アニメーション/ajax通信の実装(インクリメンタルサーチ/メッセージ自動更新)
- 外部APIを利用したログイン機能
- CircleCIとGitHubを連携させて自動テスト、gem selenium-webdriver/ChromeDriverを用いてのブラウザでテスト
- インフラ周り(AWSを使用/Capistranoによる自動デプロイ/ELBをエンドポイントとする常時SSL化/画像データ保存でクラウドストレージS3を使用)

特に力を入れて作った点です。制作期間は３週間くらいでした。
<img width="1436" alt="スクリーンショット 2020-01-10 22.53.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501638/25907775-ad7a-9dfe-57d1-c8735064f175.png">

###制作物
[エンジニア向けのコミュニケーションアプリ](https://go-en-jp.com/)
[ソースコード](https://github.com/nakanishikeita03/kei-match2)

##５ヶ月目-１１月
さて、ここから就活です！！！

スクールでも企業を紹介してくれますが、基本的には自分での申し込みをメインとしていました。
基本的にはRailsの自社開発企業に狙いを絞って受けていました。

**まずはwantedlyで100社くらい「話を聴きに行きたいボタン」をぽちぽちしていましたが、
全然通りません。。。**
返信が来たのは10社/100社くらいだったと思います。

並行して、直接企業のホームページから申し込みもしていました。
だいたい10社くらい応募しましたが、意外と反応が良く、書類で落とされることは少なかったです。

**スクール経由でも10社くらい応募し、
ありがたいことに書類や面接で落とされることはほぼなく、途中辞退するか内定をいただきました。**

##6ヶ月目-１2月

**そんなこんなで、１２月の2週目くらいに就職活動を終えました。**

４社から内定をいただき、
最終的には２社でかなり迷いました。

- 東証一部上場の某ECサイト
- 人材系ベンチャー

どちらも私にはもったいないくらい魅力的な企業でしたが、
会社風土やベンチャーに勤めたいという当初の意思を鑑みて
人材系ベンチャーに入社することを決めました。

**2020/1から恵比寿の人材系ベンチャーでバリバリコードを書いています。**

#プログラミングスクールってどうなの？
プログラミングスクールに入学するか迷われている方もいるんじゃないでしょうか？

結論から言うと
**プログラミングスクールに入ってよかったと私は思っています。**

###良かった点

**- やらざるを得ない環境**

「プログラミングを独学で勉強をすると95%の人が挫折する」と聴きます。
実際、私の周りでもプログラミング独学を挫折した人は多いです。
ですが私の同期で入学した人の８割くらいは卒業し、エンジニアとして働いています。

エンジニアになるための学習量はとても多いです。
未経験からエンジニアになるためには1000時間以上学習しなければならないとも言われています。
1日10時間勉強したとしても100日かかる計算です。

*「なんのために勉強してるんだっけ？」
「思ったよりも学ぶことが多すぎる！」*

絶対に誰もが１度は感じます。

**しかし、スクールのカリキュラムはそんなことを考える暇もないほど、
忙しいです。**

１日１０時間休みなしで学習を進め、
定期的にテストがあり、合格しなければ次に進めない。
毎日同期と競争する環境。

**良い意味で脳死でプログラミングができます。
3ヶ月間、何も考えずに自分の技術力を向上させるためだけに学習します。**

**- 自分を追い込めたこと**

人間は易き方向に流れる生き物です。
*「明日から頑張ればいいや」「今日は昼頃起きよう」*

ある程度の強制力がないとほとんどの人間は自堕落になります。
みんな自宅では集中できないから、図書館やカフェで勉強します。


それと同じです。

肉体的にも精神的にも自分をかなり追い込めます。
特に最終課題のチーム開発の時にはそれが顕著に現れていました。

*「このバグを解決してから寝よう」
「あと少しだけカリキュラムを進めよう」
「ここまで進めてたら明日チームの奴らビビるだろうな」*
こうして気がつけば朝になっていたこともあります。

この追い込みは独学ではできなかったと思います。

**- 一緒に学習する仲間の存在**

綺麗事はあまり好きな質ではないのですが、
スクールに入って価値観が近い友人が数人できました。

これは自分にとってかなり大きかったです。

「フリーランスとして死ぬほど稼ぎたい」
「自分のブランドをwebで集客できるようにしたい」

面白い生き方や価値観を持っている人間が多かったと思います。
「こいつらに負けていられんな」
何度もモチベーションを上げさせてもらいました。

もちろんITのこととか技術的なこともたくさん学べましたし、
一緒にゼロから学習していた友人は大きな励みになっています。

###悪かった点
良いことばかり並べててもステマっぽいので悪いことも記しておきます。

**- メンター/カリキュラムの質が低い**

**メンターは正直かなり質が低かったように感じます。
ほとんどがエンジニアとしての実務経験がないアルバイトでした。**

正直、学習を初めて２ヶ月くらい経てば(それなりに自分自身で学習を頑張っていれば)、
メンターより自分の方が技術力が高い状況になります。
質問をしていたのも最初の１ヶ月くらいだけです。

中には親切で技術力が高い方もいますが、かなり少数ですし、
その方が毎回コーチングしてくれる訳ではないです。

カリキュラムに関してはrailsチュートリアルを少し優しくしたような感じでした。
フロントからインフラまで全て網羅してるせいもあってか、
一つ一つの項目が薄いです。

今となっては「なんでここを深掘りしてカリキュラムを作らなかったんだろう？」と思う箇所も多々あります。

**ネットに転がっている無料のカリキュラムの方がわかりやすいと個人的には思ったほどです。**

**- 受講料が高すぎる**

ほとんどの人が思うのではないでしょうか？
私が入学した時は3ヶ月の短期コースで60万、6ヶ月の夜間コースで80万くらいだったと思いますが、
**普通の金銭感覚をしている人からすれば安い金額ではありません。**

別途でmacの購入費だったり、転職活動の費用もかかります。
しかもその間無職になるので、金銭的なコストは安いとは言えないです。

「カリキュラムやメンターのためだけに60万を払うべきか？」と聞かれれば
私は「NO」と答えます。

###結論

プログラミングスクールは**環境**を買うものだと思いました。
カリキュラムやメンターのために入学するのはやめた方が良いでしょう。

「本気でエンジニアになりたい」人が短期間で濃密な学習ができるのはまちがいないです。
自分を追い込める機会だったり、やらざるを得ない状況はそう簡単に作り出せるものではないです。
どれだけ強い覚悟を持っていても、時間が経てばそれが薄れていくことも往々にしてあります。
それが人間なので。

結局はその人次第と言ってしまえばそれまでですが、
自分を律せない私にとっては最高の環境を買えたと思っています。

#おすすめ技術本

**- イラスト図解式 この一冊で全部わかるWeb技術の基本**
おすすめ度　★★★★★

すごく薄くて読みやすい上に、わかりやすいです。
プログラミングの技術書というよりはwebに関する全般的な知識についての本なので、
エンジニアもそうでない方も１回は読んでおくと良いです。
私はwebの知識がほぼ皆無でしたので、この１冊にすごく助けられました。


**- webを支える技術**
おすすめ度　★★★★★

『イラスト図解式 この一冊で全部わかるWeb技術の基本』を深掘りしたような内容になっています。
ボリュームが結構ありますが、読みやすいです。
私は転職活動の合間に読んでいました。


**- 現場で使える Ruby on Rails 5速習実践ガイド**
おすすめ度　★★★★☆

これは結構使えました。それなりに分厚い本なので読み応えがあります。
初歩的なことから割と実践的なことも書いてあるので働き始めてからも重宝しています。

**- スッキリわかるSQL入門 ドリル215問付き！**
おすすめ度　★★★★☆

SQLの本ならこれが一番わかりやすいと思いました。
かなり薄いですし、手も動かせるので学習には最適です。
SQLはどの言語を使う際にも必要(最近ではビジネスサイドでもSQLを使いこなす人が沢山いるらしい、、、)なので、
マスターするのに損はないです。

**- Amazon Web Services実践入門**
おすすめ度　★★★☆☆

初め、一読した時は難しいと思いました。
その後、udemyでawsを一通り勉強したあとだとスッと頭に入ってきたので、
入門本としてはあまりお勧めではないです。
ただ、内容は結構濃いので一通り勉強したあとに購入するのは良いと思います。

**- Everyday Rails - RSpecによるRailsテスト入門**
おすすめ度　★★★★☆

RSpecに関する本が僕の探した限りではこの１冊しかありませんでした。
内容自体はわかりやすいです。
ただテスト自体はRSpec以外でもかけますし、
わざわざこの本を読んでテストを書くというよりは、
必要になった時に購入するのが良いと思います。

**- Ruby on Rails チュートリアル**
おすすめ度　★★★☆☆

rubyをある程度理解している上で進んでいくので、初学者には少し難しいかもしれません。
ただ、アプリケーションを１からつくるため、制作の流れはわかります。
progate等で基礎の基礎を理解したあとでやると良いでしょう。



**- 1冊ですべて身につくhtml & cssとwebデザイン入門講座**
おすすめ度　★★★★☆

私が初めて読んだ技術本です。
マークアップの勉強はとりあえずこれから初めて見ると良いでしょう。
この１冊を完璧にすれば、LPの案件をクラウドソーシングで取れるレベルにはなります。

**- udemy**
おすすめ度　★★★★★★★★

結局udemyが最強です。
勉強をはじめて２ヶ月くらいが経ってから、ほとんど本での勉強はしなくなりました。
値段が高いのがネックですが、四六時中セールをやっているので、
その時に購入しましょう。
活字よりも、映像や音声の方が確実にわかりやすいし、頭に入ってきます。

#エンジニア就活について
**転職活動は１ヶ月半〜２ヶ月費やしました。**
人によってバラバラですが、これくらいの期間は見ておくと良いでしょう。
この期間は９社/週くらいのペースで面接していました。
1日３社面接はしごする日もありました。

###志望企業
スクールを卒業し、ポートフォリヲを提げてエンジニアとしての転職活動に臨みました。

**はじめは、肌感を掴むためにもあまりこだわりを持たずに受けてみようと思い、
wantedlyで100社くらい「話を聞きに行きたい」ボタンをぽちぽちしました。**
結果は10社くらい返信が来ました。

その中ですぐに選考してくれた企業もいくつかあり、
面接を初めて２社目でクラウド事業を展開しているベンチャーに内定をいただきました。

待遇面も悪くないし、海外展開もしていて楽しそうだったのですが、
結局、「自分のやりたい職種と微妙に違う」と思い、内定を辞退しました。

ある程度面接を受けた後、
兼ねてからの希望だった**「Railsの自社開発企業」**に的を絞り、活動していました。

自分でホームページから書類を送った企業の中には誰もが知っているサービスを展開している企業もありましたが、
幸いにも書類で弾かれることはあまりありませんでした。

**結果、４社から内定をいただき、いろいろ悩んだ結果、
人材系ベンチャーに入社することを決めました。**

|    　　　　　　　　| wantedly  　　  |       直接応募 |    スクール紹介    |
|:-----------------|------------------:|------------------:|------------------:|
|書類応募           |              100? |       11        |8
|書類通過         　|            　　　11|       8          |7
| 一次通過(辞退)    |              　9(4)|        5(3)       |6(5)
| 二次通過  (辞退)  |                4(2)|         2        |1
| 内定          　　|            　　　 2|       1      |1

###よく聞かれた質問
**- どうしてエンジニアになろうとおもったのか？**
よく聞かれる度　★★★★★

ほとんどの面接で聞かれるため、回答を事前に用意しておくことはマストです。
プログラミングに興味を持った経緯→転職した理由のストーリーをわかりやすく説明できると良いでしょう。
教科書通りのテンプレではなく、自分の体験談を具体的に話すと良いでしょう。
「なぜプログラミングを勉強しようと思ったのか？」
「なぜ退職に踏み切れたのか？」
自分自身で深掘りしておくことが必要だと思います。

**- 前職で頑張ったこと**
よく聞かれる度　★★★★★

この質問もほとんどの面接で聞かれます。
頑張った経験＝エンジニアになる理由
だとベストですが、
全員がそうではないと思いますので、
前職で力を入れたことや大変だったことを話せれば◎
この時気をつけていたのは、
面接官は自分の前職についての知識はほとんどないということです。
専門用語や競合など前提知識はないので、
小学生にもわかるくらい噛み砕いて説明することを意識していました。

**- 将来なりたいエンジニア像**
よく聞かれる度　★★★★☆

大きく２種類に分けられます。
「マネジメントを行うPM的な役割」
「技術を追求していくTHEエンジニア」

どちらでもよいと思いますが、なぜそうなりたいかは考えておく必要があります。

**- どんな風に勉強しているか**
よく聞かれる度　★★★★☆

入社後にどうやってスキルアップしていってくれるか測る質問です。
正直に答えていました。
背伸びをする必要はないと思いますので、普段やっていることを簡潔に話しましょう。


**- 志望理由**
よく聞かれる度　★★★★★

これも必ず聞かれるので、あらかじめ考えておく必要があります。
企業のHPや決算資料はもちろん、
技術ブログやSNSなども見ておいた方が良いです。
その上で自分がなぜ志望するのかを深掘りしておきましょう。
「なぜ自社開発企業なのか」→「なぜ◯◯業界なのか」→「なぜこの会社じゃないとだめなのか」→「なぜこのサービスに携わりたいのか」
なぜ？を何度も自問自答していました。

###ポートフォリオって必要なの？

ポートフォリオは作っていた方が良いです。

**未経験エンジニアではポテンシャルを示すことが一番重要です。**
実務の経験がないので、面接官からすればどれだけ会社に貢献できるか未知数なのです。

*「この人はこんな技術を使っているから、普段から勉強しているんだな」
「ドキュメントが少ないのに実装しているから、自走力がありそうだな」*

こう思ってもらうことが大事です。

**しかし、残念なことに我々が思っているほど面接官は我々に興味がありません。**
人気な企業はわざわざ未経験を育成する必要もないし、
面接官も暇人ではありません。

面接を通してしっかり機能やコードを見てくれているなと感じた企業は片手で数える程しかありませんでした。


####ポートフォリオ作成で気をつける点
そこで、**面接官が見てくれるポートフォリオ**を心がけていました。

- 未経験が使わないような技術を使う
- テストユーザーを作ってログインを簡単にする
- トップページを見ればある程度の機能がわかるようにする
- どんなデバイスからも閲覧できるようにする
- readmeはわかりやすく、読みやすく書く

工夫できる点はたくさんありますが、面接官が
*「こいつに会ってみたい」
「見やすい」
「おもしろい技術使ってるな」*
と1mmでも思わせたら勝ちだと思って、
ポートフォリオを作成していました。

###技術選考

会社によっては技術の選考があります。
ほとんどの場合、選考の初期段階（１次選考前後）で行われました。

口頭で質問されるケースや紙に記述するケース、webでの試験など
多種多様でしたが、未経験エンジニア向けの質問なのでそこまで難しい質問が飛んでくる訳ではありません。

- セッションとcookieの違いは？
- オブジェクト指向のメリットとデメリットは？
- includeとextendの違いってなに？
- メソッドのアクセス権でprivateとprotectedの違いってなに？
ここらへんの質問がすらすら答えられれば問題ないと思います。

コーディングの試験は[paiza](https://paiza.jp/)で隙間時間に勉強していれば余裕です。


#アウトプットの重要さ
アウトプットはかなり重要だと痛感しました。
特に転職活動においては「アウトプットをしているか」必ず聞かれます。
私はQiitaとtwitterを主軸にしてアウトプットしていました。

**- 技術的な向上を図れる**
他人に伝えるには、まず自分が完全に理解していないと教えられません。
また頭ではわかったつもりでもいざ言語化しようとするとできないことが多々あります。

文字に起こして発信することでその技術に対する理解を深められます。
また自分より優秀なエンジニアからフィードバックしてもらえることもあります。

**- 人と繋がれる**
**実は、１０月（４ヶ月目）から仕事をいただいておりました。**
**Qiitaに上げていた私の記事を読んだweb制作会社の社長さんが
「リモートで仕事をしてみない？」と声をかけてくださり、１０月から８０H/月、フルリモートで既存のwebサービスの開発に携わらせていただいておりました。**

業務内容はバグ修正とRSpecを使ったテストの実装でしたが、
この経験はかなり力になりました。経済面でも助けられました（笑）

そもそも実際に稼働しているサービスのソースコードを見るのも初めてでしたし、
自分が作っていたポートフォリオとのレベルの違いに驚愕しました。
*「こんなメソッドあるんだ」
「コントローラー７０個くらいあるじゃん、、、」*

転職活動をする前に実務経験を積めたのはすごくよかったです。
今も継続してお仕事をもらっています。（いつクビになるかわかりませんが、、、）
そして、社長さんには本当に感謝しています。

アウトプットをしていれば誰かが見ていてくれるし、
それが無駄になることはないと思います。
小さなことでも良いので続けることが大事ですね。

#最後に

最後まで読んでいただきありがとうございました。
この6ヶ月は自分の人生の中で転機だったように思います。

いままで自分の人生は自分で選択しているようで選択していなかった人生だったのかもしれないなと今では思います。
*偏差値の高い大学に行くのがあたりまえ。
大手の企業に行くのがあたりまえ。
上司に従うのはあたりまえ。*

エンジニアになったこと以上に
自分で考え、決断したことに意味があると私は思っています。

私の決断を支えてくれた全ての人に感謝します。
本当にありがとうございました。

これからも私の挑戦は続いていきますので、
見守っていてください！！！

では！！！！