Web開発初心者がLaravelで実務開発するまでの3ヶ月の研修ステップ

# はじめに
弊社、<a href='https://re-build.company/'>株式会社Re:Build</a>は現在、沖縄拠点で全社員で7人。エンジニアインターン1人。そのうち正社員でエンジニアが6人いますが、ほぼ全員Web開発初心者の状態で入社しました。
また、大学生インターンや若手Web開発初心者の採用も積極的に行ってきました。採用後は7人という少人数の会社ながらも3ヶ月の研修カリキュラムをみっちり行って頂き、Laravelで実務開発するまでサポートしてきました。実際に昨年の1月にWeb開発初心者で入社した方は3ヶ月の研修を経て、今では設計から開発、Laravel、Vue.jsでのSPAのWebアプリ開発までこなすまで成長してくれています。   
これらの話をCTOやスタートアップ経営者の方に話すとけっこう驚かれることが多く、どうやってこの会社規模で研修まで丁寧にやられているんですか？と聞かれるようになってきました。   
そこで、今回は全ては書けませんが、全体の流れや研修においての考え方を書ければと思います。
あと、こちらのツイートの反応が少し良かったのもあり、書くことにしました。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">できれば、年内に沖縄で未経験のエンジニアの募集を始めようと思ってます🙌<br>年末年始の期間であれば、僕が可能な限り教える予定です！<br>内容としては、下記です！<br><br>研修①<br>PHPの独自フレームワークで掲示板制作-&gt;300時間<br>↓<br>研修②<br>Laravelでブログ制作-&gt;300時間<br>↓<br>研修③<br>LaravelでOJTありつつの実務 <a href="https://t.co/dZg2niVL8V">pic.twitter.com/dZg2niVL8V</a></p>&mdash; カンボ🏝沖縄@Webエンジニア (@kanbo0605) <a href="https://twitter.com/kanbo0605/status/1204766251962130432?ref_src=twsrc%5Etfw">December 11, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>   


## Web開発初心者とは？   
ここで言うWeb開発初心者とは下記を示します。   
 
- プログラミングスクールを卒業したが、実務はまだやった事が無い。
- 独学でHTML、CSS、JSなどはやったが、実務はまだやった事が無い。
- SIerで働いているが、大規模な基幹システムの開発が多く、Web系の開発はあまりやった事がない。

# 私の経歴
私自身、最初の会社はプログラミング未経験でSESの会社に入社し、現場としてはウォーターフォール型の開発が多く、2年弱勤務していましたが、コードを書いていた期間は3ヶ月もありませんでした。そこから上場企業のWeb系開発会社に転職して、たくさんの事を学ばせて頂きました。前職の方々には感謝しても感謝しきれません。会社を辞めた後は1年弱、フリーランスエンジニアを経験し、今は沖縄で起業し、システム開発会社の代表をやっています。会社は起業してから2年経ってます。

# 正社員の研修カリキュラムについて
- 前提：ProgateやプログラミングスクールでHTML,CSS,JSの基礎を勉強している。  
-> 200時間
- 研修① PHPの独自フレームワークで掲示板制作※人によって進捗を見て変動  
->150時間~300時間
- 研修② LaravelでのCRUDアプリ作成   
->300時間

# 研修内容について
## 研修で重点的に教える事   
※ここでは、座学ではなく能動的に研修に取り組んでもらうことが重要。

- 質問の仕方
- 自己スケジュール管理
- ググる力
- 開発の楽しさ
- フレームワークに依存しない深い理解

## 研修をやるにあたって他社から聞いた課題
- 社内リソースがない。
- 研修担当が属人化しており、担当者が炎上すると放置気味になってしまう。
- 研修カリキュラムを作るのが大変。
- 研修したところで実務で働くにはだいぶ、時間がかかる。
- 直近の仕事がなく、結局、雑務をお願いしてしまい、実務でコードを書けるようになるまでにだいぶ、時間がかかる。

## 社内での教育体制、文化づくりについての工夫 
- <b>1.研修担当者を属人化させない。メイン担当者はつけるが、誰でも教えてOKの体制にする。</b>
研修担当者を固定してしまい、担当者が忙しくなると研修がストップしてしまうので、複数人でサポートする。

- <b>2.会社として新人に教える文化を定着させる。</b>
代表の私自ら積極的に質問に答える姿勢を見せる。そういった姿勢を見せて、社内全体で新人に教える文化づくりを形成する。

- <b>3.新人教育を評価制度にも組み込む。</b>
私自身、会社員として働く中で新人教育が評価制度に組み込まれているケースが少なかったです。そうなると、何が良くないかと言うと、研修担当者は自分の実務もやりつつ、新人教育を熱心にやって実務でタスクが遅延すると怒られるということが起きたりします。この辺りは仕組みなどで改善できるかもですが、わかりやすく評価制度に入れた方が教育を頑張った人が評価されやすいので、良いと思いました。

- <b>4.研修生に研修以外の雑務をなるべく、やらせない。</b>
短期的に見ると、書類のコピーなどの雑務をやってもらった方が他の人のリソース削減に繋がるが、半年や1年スパンで見た時にそういった事を重ねているとなかなか、実務で開発ができず、会社的にも逆に損だとは思っています。
また、本人としてもまずは技術的に独り立ちするまでの状態にいかないと不安が募ると思っていますし、私自身もそうでした。

## 研修内容
### 研修① PHPの独自フレームワークで掲示板制作
- コードレビューは随時、研修担当者が行う。
- 要件
    - 生のPHPのみで作成すること(フレームワークは使わない)
    - MVC
    - バリデーション
    - routing
    - CSRF対策
    - XSS対策
    - SQLインジェクション対策
    - PHP7での書き方になっているか
    - psr-12に準拠しているか
    - https://www.php-fig.org/psr/psr-12/


これらをやる理由としては、CSRF対策などを基礎からしっかり知ってもらいたいというのがあります。これらはいきなりフレームワークから入ると中で何が動いているのかよくわからないというのが発生したりします。   
例えば、SQLにおいてもORMでクエリ発行はできるけど、複雑な条件になった時に生のSQLを書けないなどが出てきたりします。   
また、Rubyで言うSinatraに近いちょうど良いフレームワークが無い(Slimが近いがドキュメントが少ない)のもあり、独自フレームワークのカリキュラムをやっています。
<img width="860" alt="スクリーンショット 2020-01-05 18.56.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85181/56e40dbc-8fd1-da5a-5045-2dce90833110.png">

### 研修② LaravelでのCRUDアプリ作成研修
- コードレビューは随時、研修担当者が行う。
- 要件
    - LaravelでCRUDのあるアプリを作成する事
    - 基本的には自分のアイディアで作りたいアプリを作成する
        - 例：Twitterっぽいアプリ、旅行先情報ストックアプリなど。
    - 自分で画面設計、DB設計から行う。
    - 自分で作りたいアプリを作ることで開発することの楽しさを知ってもらう。

ここでの工夫としては、あえてこれを作ってくださいという明確なカリキュラムは用意せずに自分で作りたいアプリを決めて、設計から開発までやってもらい、開発する楽しさを実感してもらいます。ただ、最低限CRUD要素や画像アップロードなどは入れてもらうようにしています。 
※その分、オーダーメイドな研修カリキュラムになるので、大人数での研修にはあまり向いていません。  
また、自己スケジュール管理やホウレンソウをしっかりやってもらうことです。実務に入るまでこれらがしっかり出来ていないとまずいので、自分で立てたスケジュールに対して、遅延が発生しそうな場合は機能削減やリスケなどを提案してもらうように伝えています。


# まとめ
- 少人数の会社でも研修のやり方次第でWeb開発初心者は教育できる。
- 社内での教育体制、文化づくりをしっかり整備することで会社全体で新人を育成していく。
- 研修生が能動的に取り組む研修カリキュラムを用意する事で研修担当者の負担を減らす。
- 研修生には研修でバリバリコードを書いてもらい、早い段階で実務に入れるようにする。短期的な視点でのコストは一旦、置いておく。
- 弊社でのPHP独自フレームワーク、Laravelの研修はオーダーメイド要素が強いので大人数での研修は向いていないが、確実に1~2人を研修するには効果を発揮すると思います。

# 研修で使っているオススメの本
- PHPフレームワーク Laravel入門   
![51M9CvLpz3L._SX385_BO1,204,203,200_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85181/e205d299-6901-b4f3-4c09-dbcc370e8046.jpeg)

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/dp/4798052582

- PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応    
![51ZkUUB4gqL._SX394_BO1,204,203,200_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85181/6eef4962-5a50-6483-9299-d268aabc0776.jpeg)

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-Web%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-%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B35-5-LTS%E5%AF%BE%E5%BF%9C/dp/4802611846/