30代未経験からLaravelでポートフォリオ作り、実務経験を積みGo転職までに実践したこと

## はじめに
+ 私は、全くの未経験で、働きながら独学4ヶ月程度でポートフォリオ（Laravel）を作り、Web系自社開発企業に転職することができました。
そして、８ヶ月の実務経験（主にLaravel,Vue.js）を積み、ポートフォリオ(Go)を作り、Go/AWS等を使用されている会社さんから内定を頂きました。
+ **未経験からWeb系自社開発企業を目指している方**に向けて、経験を踏まえて記事を書いてみました。
+ あくまで一つの例ですので、いろんな方の経験談を踏まえて総合的に判断されるといいと思います。

## 記事の流れ
1. 未経験からポートフォリオを作り、Laravel案件参画まで
2. 実践した勉強方法
3. 使って良かった教材
4. ポートフォリオ作り
5. 実務を経験して
6. Goのポートフォリオを作り、内定を得るまで

# 1. 未経験からポートフォリオを作り、Laravel案件参画まで
##### 1ヶ月目
+ 何か新しいことを始めたいと思って色々検索した時に、たどり着いたのが、ドットインストール、Progateというサイトでした。
+ **最初に、h1タグで、Hello Worldを挟んでブラウザに表示させた時の感動**は、今でも忘れません。
プログラミングは、ゲームのように楽しくて、PS4のボタン多めバージョンだと思いました。

##### ２ヶ月目
+ ドットインストール、Progate、Paizeの有料会員になり、取り憑かれたようにプログラミングにハマってしまいました。（学習した順序は、HTML→ CSS→ Javascript→ PHP→ Laravel）
+ この頃に、本格的にエンジニアへの転職を考え始めました。こんなに楽しいなら、職にしてしまおうと。
+ 色々検索したところ、**一つの言語・フレームワークで、ある程度のレベルのポートフォリオを作れば、30代未経験でもなんとかなるんじゃないか**という仮説に至りました。
+ その時、一番やっていたPHP(Laravel)に絞って、ポートフォリオを作り始めました。

##### ３ヶ月目（主にポートフォリオ作り）
+ Heroku、AWS（EC2）へのリリースや、Dockerによる環境構築にチャレンジしてみました。
+ コンピュータの基礎を何も理解していなかったため、検索して見つけた記事の通りやってみて、途中で何時間もハマるということを繰り返していました。
+ この時に、遅ればせながら、コンピュータの基礎、データベースの基礎、ネットワークの基礎、Linuxコマンド等を勉強しました。
+ **まだ見せれるポートフォリオがない段階で、数社の面談に行ってみましたが、反応は良くなかった**です。言われて印象に残っている言葉としては、「PC持参で、作ったものを見せるぐらいじゃないとねー」と言われました。

##### 4ヶ月目（主に転職）
+ ポートフォリオの機能を追加しながら、転職活動をしました。
+ 運よく、**オンラインサロン内のslackの求人チャンネル経由**で、転職が決まりました。（主にLaravelを使う求人検索サイトの新規開発フェーズ）
+ **面談では、学歴や年齢は一切聞かれない代わりに、細かい部分までポートフォリオを見ていただき**、とても嬉しかったことを覚えています。
+ **転職が決まった時のポートフォリオのレベルは、会員登録機能、お気に入り機能、ダイレクトメッセージ機能、閲覧履歴機能、検索機能、マッチング機能等があって、インフラにAWSを使っていました**。
+ ただ、オンラインサロン内の求人チャンネル経由での転職は、現時点ではまだまだ数が少なく、再現性が低いと思います。WantedlyやGreenをおすすめします。

### Railsではなく、Laravelを選んだ理由
現時点で、モダンなWeb系自社開発企業さんへの転職を目指す場合、言語のファーストチョイスは、案件数からして、Rudy(Rails)だと思います。ただ、セカンドチョイスとしてLaravelもいいと思います。
理由は、

+ 未経験エンジニアのRailsポートフィリオのレベルは、どんどん上がってる
+ Railsよりは少ないにしても、Laravelを使用する企業さんにも、モダンな環境はある

といったことです。
私は、Laravelを始めて１ヶ月程度で、Railsの方が案件が多いことを知りましたが、さっさと実務を経験した方がスキルアップが早いと判断し、そのままLaravelに絞りました。
**もうすでに、Laravelの勉強を始めている方は、Railsに変えなくても良い**というのが私の見解です。


# 2. 実践した勉強方法
### １、 progate/ドットインストール/paiza
+ **プログラミングを始めるサイトとして定番**になっています。無料でやってみて、分かりやすいと感じたサイトの有料会員になると良いと思います。私は、**それぞれ２ヶ月間有料会員**でした。
+ 実務経験を積むと、この段階が物足りなくなり、飛ばして下の２に行くようになります。

### ２、 書籍かUdemyで学習（１周）
+ 最初は、写経して動作を確かめていましたが、**教材の言う通りにやるYesマンの状態**にだんだん飽きてきて、**もし教材の言うようにやらなかったらどうなるかという反抗心**を持って取り組んでいました。
+ 後で見返すことは何度もありますが、**２周目はしない**という方針でした。
+ 暗記はせず、理解に努めました。具体的には、なんで？って思った部分を一つ一つ調べて、**６割程度理解したら次に行く**という感じでした。完璧主義は捨てた方が効率的です。
+ Udemyは、月に何回かあるセールの時に千円台になるのでその時に買った方がいいと思います。


### ３、作ってみたい機能を自分でググりながら実装
+ この段階で一番成長できた実感があります。**簡単な機能であっても、自分で検索しながら実装できたら、Progateでいうと、1200レベルぐらい上がります**。（なので、Progateを何周もやることは非効率です。）

+ いきなり難易度の高い機能はやらず、**できるだけ段差の低い階段をたくさん登っていく**ようにしていました。
+ 何度も検索して、ブラウザがタブまみれになっても分からない場合は、いったん置いておいて、前提となっている知識の部分を書籍や動画で先にガッツリ勉強する（２と３を繰り返していく）というのを心がけていました。

+ 「基礎」という言葉は、いろんな人がいろんな意味で使い、非常に曖昧な言葉ですが、「**実務未経験者が、実務で初タスクに取り組むために必要な基礎」は、少なくとも１〜３まで終えたレベルであり、３で作った機能が多ければ多いほど、基礎が盤石になり、初タスクでの精神的負担が減る**と思います。

+ 作ってみたい機能が浮かばない場合は、Qiita内で、その言語・フレームワークで検索して、できそうな機能から実装してみるのも良いと思います。最初は**Qiitaのコピペであっても、少しずつ自分なりに付け加えて行き、たくさんの葉っぱを付ければ、いつの間にかオリジナルの綺麗な花が咲いています**。
+ 仮に**うまく実装できなかったとしても、それは、できない方法を見つけたという意味でスキルアップしてます**し、後で必ず役に立つので、落ち込まなくて良いと思います。

# 3.使って良かった教材
### Laravel
+ 青い本「[PHPフレームワーク Laravel入門](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF-Laravel%E5%85%A5%E9%96%80-%E6%8E%8C%E7%94%B0%E6%B4%A5%E8%80%B6%E4%B9%83-ebook/dp/B07CLLW4MX/ref=tmm_kin_swatch_0?_encoding=UTF8&qid=&sr=)」
+ 緑の本「[PHPフレームワーク Laravel実践開発](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF-Laravel%E5%AE%9F%E8%B7%B5%E9%96%8B%E7%99%BA-%E6%8E%8C%E7%94%B0%E6%B4%A5%E8%80%B6%E4%B9%83-ebook/dp/B07WW45Q1X/ref=pd_aw_sbs_351_1/358-2978675-7435652?_encoding=UTF8&pd_rd_i=B07WW45Q1X&pd_rd_r=e8d8671d-446e-4a85-b64a-651789195d8e&pd_rd_w=cnOaL&pd_rd_wg=V09Bt&pf_rd_p=1893a417-ba87-4709-ab4f-0dece788c310&pf_rd_r=Z4E3DRRXVGA5EVG8P6AV&psc=1&refRID=Z4E3DRRXVGA5EVG8P6AV)」

青い本と緑の本は、すごく分かりやすいですし、現場にも置いてあるので、Laravelをやるなら本当におすすめです。
青い本と緑の本を終えると、Laravelに関する調べ物の８割は、[公式ドキュメント](https://readouble.com/laravel/6.x/ja/)で解決できるようになりました。
公式ドキュメントは、どこに何が書いてあるか大まかに把握しておくだけでも、実務のタスクのスタートダッシュが違います。


### Git
+ Udemy 「[はじめてのGitとGitHub](https://www.udemy.com/course/intro_git/)」（無料）
+ Udemy 「[もう怖くないGit！チーム開発で必要なGitを完全マスター](https://www.udemy.com/course/unscared_git/)」

**Gitは勉強していないと、現場で一番迷惑をかけてしまう部分なので、優先度は高い**と思います。

### Linux
+ 「[Linux標準教科書](https://linuc.org/textbooks/linux/)」(PDFは無料)

+ 「[［試して理解］Linuxのしくみ](https://www.amazon.co.jp/%EF%BC%BB%E8%A9%A6%E3%81%97%E3%81%A6%E7%90%86%E8%A7%A3%EF%BC%BDLinux%E3%81%AE%E3%81%97%E3%81%8F%E3%81%BF-%EF%BD%9E%E5%AE%9F%E9%A8%93%E3%81%A8%E5%9B%B3%E8%A7%A3%E3%81%A7%E5%AD%A6%E3%81%B6OS%E3%81%A8%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98-%E6%AD%A6%E5%86%85-%E8%A6%9A-ebook/dp/B079YJS1J1)」

AWSにデプロイする前に、一通りやっておくと理解が早いです。

### Docker
+ 「[ITエンジニアになる！ チャレンジDocker仮想化環境構築入門](https://www.amazon.co.jp/IT%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AB%E3%81%AA%E3%82%8B%EF%BC%81-%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8Docker%E4%BB%AE%E6%83%B3%E5%8C%96%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E5%85%A5%E9%96%80-%E5%B0%8F%E5%B3%B6%E4%B8%80%E4%B9%9F-ebook/dp/B07JW4MKNT)」
+ 「[Docker/Kubernetes 実践コンテナ開発入門](https://www.amazon.co.jp/Docker-Kubernetes-%E5%AE%9F%E8%B7%B5%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80-%E5%B1%B1%E7%94%B0-%E6%98%8E%E6%86%B2-ebook/dp/B07GP1Q3VT/ref=tmm_kin_swatch_0?_encoding=UTF8&qid=&sr=)」
 
※　実務未経験時点では、Swarm、Kubernetes部分はやりませんでした。

### AWS
+ Udemy　「[ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得](https://www.udemy.com/course/aws-and-infra/)」

### リーダブルコード
他人から見て、より分かりやすいコード、機能を追加しやすいコードを書こうと考えた時に、ヒントになる本です。

# 4. ポートフォリオ作り
サイト：　[相方マッチングサイト(停止中)](http://geininmatching.ml/)
ソースコード：　[GitHub](https://github.com/masataka715/geininMatching)
※検索部分やインフラ部分には、転職が決まった後に追加・変更した部分があります

### ポートフォリオとして何を作ったら良いか
+ **基本的に作りたいものを作った方が良い**です。その方が、ポートフォリオのモチベーションが継続しやすく、結果的にレベルの高い物が作れます。
+ ただ、思い浮かばない人に対しては、マッチングサイトか、SNSをおすすめします。なぜなら、未経験者に作っている人が多いので、ネット上に情報も多く、また初学者に馴染みのある機能が多いからです。
+ 私は、お笑いが好きなので、ボケとツッコミをマッチングさせることを思い付きました。そんなふうに、**自分の好きなことを絡めた、マッチングサイトかSNS**がおすすめです。
+ 一方で、採用担当の方はおそらく、マッチングサイトやSNSを見ることにもう飽きていると考えられます。なので、**マッチングサイトやSNS以外を作ればアピール材料にはなりますが、それを作っている人が少なければ少ないほど、情報も少なく、実装の難易度が上がるリスクもあります**。その一長一短を認識した上で、選択した方が良いと思います。

### ポートフォリオ作りで気を付けたこと
+ **業務で忙しい採用担当の方が、ポートフォリオを見る負担をできるだけ減らす**ことをとにかく心がけました。
+ 時間は限られるため、どこに力を入れるかが重要ですが、迷ったら、**自分が一番面白そうだと感じたところに、熱意を爆発させて、それを採用担当者の目にとまる所に書くのが良い**と思います。

##### ホーム画面で離脱されるかどうかが一つの山場
+ **ホーム画面のボタン群**を見るだけで、どのような機能があるか把握できるようにしました。
+ バッグエンドエンジニアのポートフォリオだとしても、採用担当者の離脱率を低下させるために、**ホーム画面の見た目**には気を使った方がいいとは思います。（私の場合は、見た目はBoostrapで済ませて、他の機能を一つでも増やす方針でした。）

##### 簡単ログイン機能
+ 採用担当の方が、わざわざメールアドレスやパスワードを入力してくれる可能性は低いので、ボタン一つでログインできるようにしました。
+ ポートフォリオのURLを書く場合には、「簡単ログイン機能もあります」というような記載を添えてもいいと思います。

##### GitHubのReadmeをちゃんと書く。
+ 採用担当の方に、必ず見てもらえる訳ではありませんが、見やすくしておくことで、離脱率を低下させることができると思います。そして、アピールしたい機能をReadmeのできるだけ上の方に書きました。
+ 機能を追加するたびに、Readmeに追記することで、どんどんReadmeが充実してきて**モチベーションにつながる**面もありました。

# 5. 実務を経験して
+ ポートフォリオを作っておいて本当に良かったと感じました。ポートフォリオでやったことが役に立つ場面ばかりで、**ポートフォリオ作りの延長線上に実務がある**ということが身にしみてわかりました。
+ ポートフォリオ作りのおかげで、少なくともLaravelに関しては、業務で精神的に苦労した記憶がありません。逆に、ポートフォリオで全く使わなかったVue.jsを業務で使う時は、非常に大変で、業務外でも必死に頑張った記憶があります。
+ 実務を経験した上でポートフォリオを見ると、お恥ずかしいコードばかりで、誰にも見せたくなくなりました。逆に言うと、それだけ、**実務経験には成長させる力があります**。
+ エラーに動じなくなりました。
実務未経験時には、**エラー画面は**、おぞましい悪魔だと思っていましたが、実務経験を積むと、**エラー原因のヒントをくれる天使**に思えてきました。

+ 環境構築（→自分のスキルが上がったことを一番実感できるもの）

LaravelをAWS（EC2）へデプロイするのにかかった期間

 　|期間
---|---
実務未経験時点|約1週間
実務３ヶ月|丸１日
実務６ヶ月|３時間程度

※LaravelのEC2へのデプロイの手順は、以前にQiitaにまとめました。
[LaravelをAWSのEC2へデプロイする手順](https://qiita.com/masataka715/items/6e46f1f5e53bdff6cd3d)

# 6. Goのポートフォリオを作り、内定を得るまで
### Goの学習
+ Goを選んだ理由は、動的型付け（PHP）の次は、静的型付けも学んで、バッグエンドエンジニアとして対応できる技術の幅を広げたいと思ったからです。
+ 勉強方法やポートフォリオ作りは、上記のLaravelの時とほぼ同じ方針で取り組みました。
+ **PHPやRubyに比べて、ネット上の情報が少ないので、他言語で培った考え方と検索力が必要**になってきます。
+ **実務で一つの言語・フレームワークに慣れると、他言語の習得も早い**と聞いていましたが、本当にその通りでした。

### 使った教材
##### Go
+ Udemy 「[現役シリコンバレーエンジニアが教えるGo入門](https://www.udemy.com/course/go-fintech/)」
後半のアプリ開発部分は、急に難しくなるので入門時点では後回しにしてもいいと思います。

+ オライリーの書籍「[Go言語によるWebアプリケーション開発](https://www.amazon.co.jp/Go%E8%A8%80%E8%AA%9E%E3%81%AB%E3%82%88%E3%82%8BWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-Mat-Ryer/dp/4873117526)」
チャットアプリ、コマンドラインツール、APIなど色々あるので、好きな部分からやってみて良いと思います。


+ オライリーの書籍「[Go言語による並行処理](https://www.amazon.co.jp/dp/4873118468/)」
なかなかポートフォリオレベルで、並行処理が必要な処理はなく、ポートフォリオに組み込むことは難しかったです。

##### GCP
+ Udemy 「[現役エンジニアが教える、手を動かして学ぶGoogle Cloud Platform(GCP) 入門](https://www.udemy.com/course/google-cloud-platform-gcp/)」
+ 「[GCPの教科書](https://www.amazon.co.jp/GCP%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8-%E5%90%89%E7%A9%8D%E7%A4%BC%E6%95%8F-ebook/dp/B07S1LG1Y1/ref=tmm_kin_swatch_0?_encoding=UTF8&qid=&sr=)」

### ポートフォリオ
作成期間：３ヶ月程度
サイト： [gortfolio（停止中）](http://gortfolio.ml/)
ソースコード：[GitHub](https://github.com/masataka715/gortfolio)

+ ブラックジャック、条文検索、チャット、スクレイピングなど、追加してみたい機能を自分勝手に詰め込んだサイトです。タイトルは、「Go」の「portfolio」で「gortfolio」としました。
+ このポートフォリオを作る前は、バッグエンドにGinというGoフレームワークを使ったAPIとフロントエンドにVue.jsを使って別のアプリを作っていましたが、途中でGo自体に慣れ親しみたいと思い、**フレームワークは使わず、Goのみ**で作りました。
+ なるべくLaravelで作ったことないものを作りました。理由は、その方が新しいことを吸収できて楽しかったからです。
+ **Laravelという多機能なフレームワークに慣れていたせいで、苦労しましたが、フレームワークが裏側でやってくれている部分を自分で実装することで、また一つレベルアップできた**と感じています。
+ インフラは、LaravelのときはAWSを使っていたので、GoではGCP(GCE)を使ってみました。AWSでクラウドに慣れていれば、GCPの学習コストは低いです。
+ ポートフォリオのレベルは決して高いものではありませんが、Laravelのポートフォリオと合わせて、自走能力や学習意欲が証明することはできたと感じています。

#### 転職活動
+ WantedlyやGreenを使い、いろんな会社さんの面談・面接を受けました。**転職活動では、経験豊富なエンジニアや経営者の方とタダでお話ができるので、非常に有意義**でした。
+ Goのエンジニアを募集している会社さんのほとんどは、実務経験が豊富な人を求めているようでしたが、運よくGreen経由で内定を頂きました。
+ 運が良かった部分があると思いますが、それでもその運を引き寄せたのは、ポートフォリオがあったからだと面接を通して感じました。

## 最後に
３０代実務未経験であっても、Web系自社開発企業であっても、ポートフォリオという武器があれば、面接で十分に闘うことができます。
そして、**ポートフォリオを自分で作った時の達成感は、作った人にしか味わえない最高の気持ち良さ**です。是非作ってみてください。