Laravel8.0入門してみた感想

ララベル．かわいいなまえだね．
でも「Web職人のためのフレームワーク」みたいなキャッチコピーでかっこいいね．

ちゅき(._.)

というわけで入門した感想を述べます．

# 感想1. 環境の構築 → めちゃ簡単
僕はこれまでRuby on RailsとReactに触れたことがあります．
使ってるOSはWindows10．
するとどうなるか．

__環境構築で死す__

__コマンドプロンプトにerrorの嵐__

僕はもう疲れました．
こんなことならフレームワークなんか使わない方が早いや．
どうせザコだし僕．


そう思ってたある日，なんとなくPHPを使い始めて，それとなくLaravelにたどり着きました．
「どうせまた環境構築で死すんだろうな．．．」
半ばあきらめながらネットに落ちている記事を見ながらXAMPPやらLaravelやらを入れました．

...は？

__一度もエラーせず構築できた．__

こんなことがあるんですね．
もうこの時点で僕のハートはLaravel様の者でした．

「Windows想いなLaravel，好きです．」
僕はそう呟いて，そっと眠りについた．（え？）

#感想2. ネット記事より書籍を読め
「プログラミングの勉強に金はかけない」
そんな当たり前の常識の元，Laravel入門初日の僕はネット記事で学習をしていました．

__なんかよくわからん__

そもそもルートとかわからん．
データベースとか触ったことない．

うん，わからん．

公式ドキュメントもよくわからん．

この時点で僕は，少しだけLaravelに嫌気がさしていました．
だっていい記事全然ないんだもん．

すると，
メール「Kindle Unlimitedの定期購読，更新したで！」
僕「あ，Laravelの書籍あるんでね??」

ありました．
世間で「青本」と呼ばれているよさげなLaravelの本は，Kindle Unlimitedでは読めなかったけど，[別の](https://www.amazon.in/Quick-Master-Laravel-Sokushu-Japanese-ebook/dp/B07XC2QL4M)がありました．
でも全然わかる．なんか道筋めちゃ見える．テンション爆上げ．

__Laravelめちゃええやん__

環境構築で死してばかりの僕がフレームワークを扱っている．
その喜びを握られてまた，僕はLaravelに恋をしたのである．

#感想3.何をすればいいかが分かりやすい
そろそろLaravelのシステムについて言及したい．

フレームワークでよく思うことは，
「どのファイルに何書けばいいかわからん．」
ということです．
まあこればっかりはいかにちゃんと学ぶかみたいなところはあるかもしれませんが．

ただ，Laravelはめちゃわかりやすかった．
ざっくり言えば，

1. コントローラー（○○Controller.php）で諸々の機能を作る．
2. Webページのテンプレート（○○.blade.php）を作って機能を埋め込む．
3. ルート（web.php）で，さっき作ったテンプレートを表示できるようにする．

というステップをひたすら踏んでいくだけです．
多分．

まあまだ入門二日目なので，まだ難関は色々あるんだろうけど．

#感想4. Bladeが直感的で便利
前項でWebページのテンプレートを作ると言いましたが，これはBlade（ブレード）と呼ばれるのだそうです．
Bladeを使うと何がいいかというと，普通のHTMLの構文を使いつつ，制御構文（ifやfor文）も使えるということ．

例えば，`$user`という変数の値が`'boyfriend'`だったときに`<p>私だけを見て</p>`を表示するテンプレート`lovemessage.blade.php`を作るとすれば，

```php:lovemessage.blade.php
//...
<body>
    @if($user == 'boyfriend')
        <p>私だけを見て</p>
    @endif
</body>
//...
```

と書けば，彼氏だけに愛のメッセージを伝えることができます．

直感的！！便利！！

ちなみに，`@～`で続く構文のことをディレクティブと呼び，`@while`やら`@switch`やら`@untill`やら，一通りそろってます.

#感想5. コントローラー ≒ Unityのスクリプト
前々項で
「コントローラー（○○Controller.php）で諸々の機能を作る」
と言いました．

でも入門者からしたら
「コントローラーって何？機能？は？」
って感じですよね．

個人的な意見ですが，
__コントローラー≒Unityのスクリプト__
です．（Unityしたことない方ごめんなさい）

Unityでプレイヤーのカメラを制御するスクリプト`PlayerCamera.cs`とか作りますよね？
そんな感じです．

<dl>
<dt>Unity</dt>
<dd>１つの役割（カメラの制御，プレイヤーの制御，敵の生成など）に対して１つのスクリプト</dd>
<dt>Laravel</dt>
<dd>１つの役割（トップページ，ログインページ，ブログページなど）に対して1つのコントローラー（多分）</dd>
</dl>

というイメージです．

<dl>
<dt>Unity</dt>
<dd>スクリプトにグローバル変数（`public int enemySpeed;`とか）をつくる → 敵キャラのスピードいじる</dd>
<dt>Laravel</dt>
<dd>コントローラーのpublicな関数がテンプレートに変数を渡す → ページに表示される数字いじる</dd>
</dl>

という...イメージです...。（あれ，なんか微妙？）
とりあえず例を見てください．（お願いします）

次の例は，`game/enemy.blade.php`（gameディレクトリにあるenemyという名前のテンプレート）に，10から100までの乱数を持った変数`$speed`を渡す関数`randomSpeed()`を持つコントローラー`EnemyspeedController`です．

```php:EnemyspeedController.php
<?php
//略
class EnemyspeedController extends Controller{

    public function randomSpeed(){
        return view('game.enemy',[
                'speed' => random_int(10,100)
        ]);
    }

    //略
}
```
...。

__なんかUnityっぽくないですか？（ゴリ押し）__

#感想6. テンプレート → Bladeじゃなくてもいい
なんだ．Bladeじゃなくてもいいのね．

テンプレートをテンプレートたらしめる定義は，そのphpファイルが`resources/views'ディレクトリにあることなんでしょうね．多分．

#感想7. 文字列の結合，そうやってするんだ．
これはPHPに関する感想かもしれませんが...。

世に存在する多くのプログラミング言語で文字列を結合するときは，「＋」で加算すると思うのですが，PHPでは「.」で結合するようです．

下が例です．

```javascript:javascript
str = 'Hello,';
console.log(str+' World!');
//'Hello, World!'が出力される

str += ' World!';
console.log(str);
//'Hello, World!'が出力される
```

```php:php
$str = 'Hello,';
echo($str.' World!');
//'Hello, World!'が出力される

$str .= ' World!';
echo($str);
//'Hello, World!'が出力される
```


#終わり
とりあえずここまでです．
また感想があれば追加します．
さらば！！