【Windows10】Laragon で Laravel8 (Jetstream + Inertia + Vue) を動かす


Windows環境でLaravelを動かすには色々と方法がある。

- Homesteadを使って仮想環境を立てる（公式推奨？）
- Dockerを使う
- XAMPPでPHPを動かす
- etc ...

今のトレンドだとDockerで環境ごと保存するのが一番？
でも個人的に準備などが面倒臭くて手が出しにくい…
（立ち上げるのが面倒だったり、リソースを食い散らかしたり...）

Nodeみたいにローカルで開発できないかなぁ...
XAMPP使うかぁ？という時に **[Laragon](https://laragon.org/)** というものを見つけた。

- 様々な言語に対応（PHP, Node.js, Python, Java, Go, Ruby）
- 内部でDBを立ち上げて管理してくれる（mysql, PostgreSQL, mongoDBなど）
- SSLに対応（証明書は無い？）
- 環境変更はボタン一つ
  - 新しい構成を追加することも可能
- ポータブルな設計なので移動が簡単
  - 要らなくなったらフォルダ削除でOK
  - 追加も配置するだけ
  - データもプログラムも
- 滅茶苦茶早くて軽い
  - 本当に秒で起動する
  - フルインスコで130MBのディスク使用量
  - 実行時のメモリ使用量も4MB未満らしい
- 設定で`hosts`を自動的に書き換えてくれる
  - `***.test`のリンクを作成（デフォルト）
- [ngrok](https://ngrok.com/)を用いたローカルデータの一時的な公開が可能
  - 40 connections / minute

と使わない理由が無い内容だったので、折角なので`Laravel8`の開発環境で採用してみた。
（個人的にhosts書き換えがGOD）

以下のソフトウェアの使用が強制されるのが注意点？
アップデートで使用するソフトウェアを切り替えれるようになると神になると思う。

- editor として [Notepad\+\+](https://notepad-plus-plus.org/)
- terminal として [Cmder](https://cmder.net/)
- DB管理ソフトとして [HeidiSQL](https://www.heidisql.com/)
  - [phpMyAdmin](https://www.phpmyadmin.net/) も使える

**公式サイト**
[Laravel \- ウェブ職人のためのPHPフレームワーク](http://laravel.jp/)
[Laragon \- portable, isolated, fast & powerful universal development environment for PHP, Node\.js, Python, Java, Go, Ruby\.](https://laragon.org/)

[Introduction \| Laravel Jetstream](https://jetstream.laravel.com/1.x/introduction.html)
[Inertia\.js \- The Modern Monolith](https://inertiajs.com/)

## Laragon のインストール
[Download \| Laragon](https://laragon.org/download/)

上記リンクから`Laragon`をインストールする。
LiteはNode系が無いバージョンだが、後で簡単に追加できるのでお好みで。
（今回はLaravelでVueを使用したいのでProを採用（Liteだとコンパイルできない...））

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105139/06f7bf5a-a85d-fe2e-9566-f5aacd0e1720.png)

- 起動
- 「▶全て開始」をクリック
- 「🌏ウェブ」をクリックしてLaragonのページが開けたら成功
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105139/f0577eff-b172-4f01-92af-90dcde9ee637.png)



## Laravel8 のインストール

- 「右クリック」>「クイックアプリ作成」>「構成」をクリック
- 勝手にNotepad++が起動する（いつの間に入ったんだろ...）
  - `Laravel8=composer create-project "laravel/laravel=8.*" %s --prefer-dist` を追記
  - ver 8に固定させるため一応...
- 「右クリック」>「クイックアプリ作成」>「Laravel8」をクリック
- 「右クリック」>「www」> 「<作成したプロジェクト名>」を選択
- Laravelのページが開けたら成功

php artisan serve は必要ない。（そのためのLaragon）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105139/b01ba235-732c-4e13-d16c-6899c993526c.png)


以下のエラーはPHPのversionが足りてないので最新のを取ってくる。

```
[InvalidArgumentException]
Could not find package laravel/laravel with version 8.* in a version installable using your PHP version 7.2.19.
```

- Laravel8の必要環境は`PHP >= 7.3`
  - https://readouble.com/laravel/8.x/en/installation.html
- Laragonのupdateはzipを持ってくるだけでOK
- 以下のリンクからPHPのzipを落とす
  - https://windows.php.net/download
  - 初期に入っていたのはx64のThread Safety版だった
  - zipを解凍して「%laragon%/bin/php」に置く
  - 「右クリック」>「PHP」>「バージョン[xxx]」>「<導入したversion>」を選択
  - リアルタイムに環境が更新されるはず



## Laravel Jetstream(Inertia) の導入

DBやjavascriptとの連携を確認したいので認証のテンプレまで入れてみる。
従来の認証周りは8ではJetstreamが担うらしい。
[Introduction \| Laravel Jetstream](https://jetstream.laravel.com/1.x/introduction.html)

Jetstream では2つのフロントエンドスタックがある。

- [Livewire](https://laravel-livewire.com/docs/2.x/quickstart) + [Blade Templates](https://readouble.com/laravel/8.x/en/blade.html) (従来のBladeを拡張する)
- [Inertia.js](https://inertiajs.com/) + [Vue\.js](https://jp.vuejs.org/index.html) (SPA, VueのPropsにControllerからデータを渡せる)

今回はVueを使いたいのでInertiaを選択。

- 「◼ターミナル」をクリック
- 勝手にCmderが開く

```console
cd <プロジェクトdir>

// インストール
composer require laravel/jetstream
php artisan jetstream:install inertia

// DB構築
php artisan migrate

// nodeセットアップ
npm install
npm run dev
```


- Laravelのページの右上に login / register が表示されていれば完成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105139/d7edf1ee-99b3-296b-9bbe-b3689dd2d41c.png)


以下のエラーはデータベースが存在しないので作成しよう。

```
Illuminate\Database\QueryException
SQLSTATE[HY000] [1049] Unknown database 'laravel'
```

- Laragonの初期設定ではプロジェクト名のデータベースが作成される
- root / no password



## 所見

適当に垢作ってログインするとテンプレートのダッシュボードが表示される。
標準で二段階認証やセッション管理、API tokenなどが用意されているのは流石。
新たに[Team](https://jetstream.laravel.com/1.x/features/teams.html)というroleみたいな仕組みがあるらしいが調査中。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/105139/ede53037-be80-0a80-afda-cb258c7545e4.png)

このように手軽に遊んだりテストしたりにはLaragonは最適かもしれない。
仮想環境と別の手段として覚えておいても良いかも。
Laravelいいよ！Laragonいいよ！
（Laragonの由来ってもしかしてLaravel…？）