最近人気のPHPフレームワークLaravelですが、始めるとハマります。
流石にモダンを歌っているので、モダンです。
世の中の流れを踏まえて、モダンである事を直ぐに取り込んでいます。
なので、学ぶと自分もモダンになります。
Modern:現代的
ただ、モダンすぎて孤立すれば、異端になるので気を付けましょう。
開発環境
PHPなので、サーバーが必要になります。
なので、WindowsのWSLを使いLinux環境を作り、その中にDocker環境を構築し、
コンテナにLaravelをインストールします。

上図のようなシステム構成となり、データの流れとなります。
ややこしくなる理由ですが、WindowsからUbuntuにアクセスしないとDocker上のコンテナに
アクセスできません。同じPC上で2つのOSが動作しているのでややこしいのです。
上記のアプリケーションサーバーとして作ったPHPコンテナにLaravelをインストールします。
簡単にLaravel付きイメージでコンテナを作ればよいのですが(LaravelSail)、PHPコンテナにインストールする方を行います。
Windows(ホストマシン)に
・VSCode
・DockerDesktop
・Chrome
・PowerShell
がインストールされ、仮想マシンが駆動している状態までの環境が整ったとして、
Laravelをインストールします。
Laravelのインストール
上記の環境が整えば、アプリケーションサーバーにLaravelをインストールするだけです。

まず、PowerShellを使い、仮想マシンのUbuntuにアクセスします。

PowerShellの上部にあるプルアップによりUbuntuを選択すると、プロンプトが$(Ubuntu)に変わります。上のシステム図ではBの経路です。

次に、Docker Desktopでコンテナの名前を確認します。
もっとも、docker-compose.ymlでcontainer_nameで指定していれば、その名前が確認できます。

コンテナの名前がわかれば、下記のコマンドで、コンテナに入ります。
docker container exec -it app_serv bash
と言っても、Dockerの仮想化ですので、コンテナ内に仮想OSや仮想ハードが存在してるように、
Dockerエンジンがみせているだけですが・・・
上記のコマンドを実行すると、

コンテナに入れます。
あとは、この状態で、Laravelをインストールすればコンテナにlaravelがインストールされます。
(project名の部分laravel-projectは任意の名前です。)
composer create-project --prefer-dist laravel/laravel laravel-project "10.*"
すると、プロジェクトフォルダにlaravelが現れます。
その中のstorageフォルダは、Nginx側からログデータの書き込みがあるので、パーミッションを変更します。laravelの展開フォルダに入り、下記のコマンドを実行、
cd laravel-project
chmod -R 777 storage
これ以降のlaravelに対するコマンド操作、
例えば、
# コントローラーの作成
php artisan make:controller <コントローラー名>
# モデルの作成
php artisan make:model <モデル名>
# マイグレーションファイル(テーブルの操作定義)の作成
php artisan make:migration <マイグレーションファイル名> --create=<モデル名>
は、作成したプロジェクトフォルダ内でコマンド操作しないと、受け付けてくれない。
また、Mysqlを使う際に拡張機能が必要になる場合がるが、その場合にmigrationでドライバー
のインストールを即される。
php artisan migration
上記コマンドに対して、could not find driverとエラーが返ってくる事がある。
これに対して、ドライバーであるpdo_mysqlをコマンドでインストールすると、
atp install pdo_mysql
受け付けてくれない!
なぜならDocker Engineを挟まないとMysqlの拡張機能はインストールできない仕様のようで、
docker-php-ext-installコマンドを使う事で対応できる。
docker-php-ext-install pdo_mysql
ここまでで、PowerShellの役目は終了なので、最後にコンテナを出ます。
exit
動作確認
Docker DesktopでContainersを確認し、アプリケーションをSTARTさせると、
各コンテナが起動します。

全て緑になったらPORTをクリックすれば、laravelが立ち上がります。



