Laravelをこれから勉強しようと思っている人へ

> 注： この記事はLaravel6辺りの頃までの話で止まっています。
> 今はもうLaravel8なので、選ぶべきバージョンの話からはあまり参考にしないほうが良いと思います。


ここ最近Laravelの需要が増えてきた結果、新参の人がどんどんLaravelを選択していってる傾向に感じます。

そこで、今現在Laravelをこれから勉強しようと思ってる人に対して軽く書きたいなと思います。

# PHP初心者、一度もフレームワークを使ったことがない人、英語を読むのが辛い人

正直なところ、最初にLaravelを選択するのはあまり良い選択肢では無いでしょう。
理由として、どうしても入門書が少ないことが大きいです。あとは技術的に知っておくべきことが意外とあること。

# 最低限知ってないとLaravel覚えるのが厳しいこと

* クラスの理解(インスタンス作成/コンストラクタ/継承/メソッド)
* 名前空間の理解
* オートローダーの理解(spl_autoload_register関数かcomposer自体)
* PSR-0, PSR-1, PSR-2(これはルールの理解なので知識としてあればOK)
* PHP7以降の知識(特に5.5以降は。新しい便利な演算子や書き方が増えて、Laravelもそれに合わせる方向に進んでいます)

以上がLaravelを覚えるために、前提として知っておいたほうが良いことです。

他のフレームワークを一度触ってからでも遅くありません。[パーフェクトPHP](https://www.amazon.co.jp/dp/4774144371/)などの本を一度やってくることを勧めます。(結構古い本ですが、PHPを理解するにはおすすめです。(Composerに関しては書いてないので、[PHP: The Right Way](http://ja.phptherightway.com/)を見ましょう))

# 選ぶべきバージョンは？

一時期までは5.1が最適とされていましたが、5.5以降のバージョンアップによる改変がそこまで大きくないこともあり最新の6系を触るほうが良いでしょう。(5.5系のチュートリアルは多いので5.5をちょっとやるのも手なのかも)
勉強するときは、フロントエンド周りやヘルパー周り等は6系で分割が進んでいるので最初の開始部分は6系のものを参考にするべきです。

# チュートリアル的なもの

5.1のときはドキュメントに[チュートリアル](https://readouble.com/laravel/5.1/ja/quickstart.html)が存在したのですが、現在のドキュメントには存在しません。

6はそこまで5.5からアップデートがきつくないので5.5を覚えて6に行っても良いかも。
ちょっと変わったところとして、フロントエンド周りがほぼほぼ外部ライブラリに移動したのと、基本の認証のscaffoldが変わったくらい。[JavaScriptとCSSスカフォールド 6 Laravel](https://readouble.com/laravel/6.0/ja/frontend.html)

英語ならLaracastsに無料のチュートリアル的なものがあります。
https://laracasts.com/series/laravel-6-from-scratch

ドットインストールにはLaravel5の[入門動画](https://dotinstall.com/lessons/basic_laravel_v2)が存在します。
こちらは5.5を前提として学ぶことができます。（途中から有料ですが)


# PHPや他の言語でフレームワーク使っていた人

最新の6を使うと良いでしょう。LTSは良いです。2年は必ずサポートされるので社内のプロジェクトでも安全安心。

Laracastsというサイトがあるので、そちらで英語の教材の動画を見ることが可能です。
[Laravel,シリーズ物に絞った結果 - Laracasts](https://laracasts.com/lessons?skill=1&type=series)

日本語のドキュメントに関してはほとんど6.0の翻訳が完了しているのもあり、できそうな人はすぐ6.0からやりましょう。

もしも、PHPに関する経験が浅い場合は [PHP: The Right Way](http://ja.phptherightway.com/) を見ると良いでしょう。また、[PSR(PHP Standards Recommendations)](http://www.php-fig.org/psr/)に関しても目を通しておいたほうが良いです。

正直、こっち側の人はある程度パワーを持ってる人だと思うので、あまり言うことがないです・・・。

# 私の場合

ちょっといいねの数がちょいちょい来るのと、今私がLaravelを触ってないこともありアップデート出来てないのを申し訳なく感じるので、私が理解していった方法を軽く書きます。
といっても、私はLaravelの本質を理解するのに1年~2年かかりました。

私の場合、当時FuelPHPの情報をアウトプットしていましたがFuelPHPの更新状況やちょっとうーんとなる点が出てきていたので情報収集をしていたところ、勉強会でたまたまLaravelを知りました。
当時は4系で、IoC Container(現在のサービスコンテナ)やFacade等、正直名前からは想像が難しくよくわからないものが多かったです。(それまでやってたFWはCodeIgniter2系やFuelPHP1系)
根幹がIoC Containerなのは勉強会でなんとなくわかったので、最初はとりあえず見えてるControllerやView、Model周りの知識を軽くつけてからIoC Container、通称DIコンテナの理解をソースから追っかけてました。
そこではすぐには理解は出来なかったし、ただとりあえずこいつを読めるようになればLaravelはある程度わかるはずだという謎の自信があったので、入念にソースをxdebugなどのツールを駆使して追っかけてた記憶があります。
そこから、他の人の作ったライブラリを見つつ、VoiceTextAPIを1ファイルのクラスにしてLaravelから読めるようにライブラリを作りました。(ここではまだ理解があやふやだったものの、ちゃんと読めたことに嬉しかった記憶があります)
その後、ふとしたタイミングでコンストラクタインジェクションとメソッドインジェクションの意味を知り、サービスコンテナの強み、Laravel自体の強みを理解することが出来ました。

最近、DIコンテナの記事を書きました。
[最高にわかるDIコンテナ(特にPHPにフォーカスした](https://qiita.com/fagai/items/bf336e56c5b2bddec749)

以前私がLaravelのサービスコンテナに関する記事を書いたのですが、これも貼っときます。正直これは図式化してないので把握が難しい気がする

* [LaravelのDIコンテナはどう使われているのか](http://blog.fagai.net/2016/09/17/laravel-dependency-injection/)
* [LaravelのIoCコンテナ、サービスコンテナに関してまとめ-その1](http://blog.fagai.net/2015/05/06/laravel-ioc-service-container-1/)

# 最後

ということで、軽く思っていたことを書いた感じになります。
Laravelの需要は今後も伸びそうな予感がします。ただバージョンアップされていくにつれてどんどん難しくなっているのでパワーで途中まで乗り切って、あとは見えた道を見逃さないように歩いていきましょう。