Laravel プロジェクトの始め方

最近 Laravel を使った開発プロジェクトを2つほど経験したので、備忘録として、簡単に記録を残しておこうと思う。

Laravel プロジェクトの作成

以下の環境は PHP8 系のサーバーで Laravel 9 を動かす場合の説明です。

Laravel Sail の環境生成

まず、最初に Laravel プロジェクトを作成する際には、larave.build というサイトを使うと楽だ。環境の構築に必要なものを一式そろえてくれる。環境設定をカスタマイズするためにも、一度シェルのファイルに落としてから、PHPのバージョンなどパラメータを変更できる。

Sail での環境生成 ※Composer の実行を含む

curl -s "https://laravel.build/projectname?with=mysql" > inst.sh
bash inst.sh

コンテナを起動して、Laravel プロジェクトのデフォルト状態で接続できるかを確認する。

./vendor/bin/sail up -d

Sail 用に生成したプロジェクトを Git の管理下に置く

上記が正常に動作することを確認したら、開発プロジェクトの Git リポジトリと統合することが必要なので、プロジェクト内の .git フォルダを上記で生成したフォルダに放り込んで、Git管理を出来るようにする。

上記のシェルを使うことで Sail の実行環境を一発で作成できるので、その上で Git 管理ができるようにするには、この方法が最も楽だ。

PHP コマンドを実行する場合は Sail のシェルに入る

PHP の Composer や Artisan コマンドを実行する際、PHP が使えないといけないので、Sail(Docker)の中に入る必要がある。Sail の中に入るためのコマンドは次の通り。

./vendor/bin/sail shell

その上で、Artisan コマンドを使ってデータベースの操作などを行う。開発中よく利用するコマンドとして、マイグレーションとシーダーの再実行コマンドは以下の通り。

php artisan migrate:fresh --seed

Vite は OS によって node モジュールが異なる

次に Vite に関してだが、Vite は Mac と Windows で利用する Esbuild の node モジュールが異なるため、package.json を環境によって変える必要が出てくる。そのため、ignore で対応するのか、他に良い方法があるのかはわからないけど、環境によって Esbuild のモジュールが変わらないような工夫をする必要があった。

次のデプロイの箇所にビルド用の設定について書いたが、開発中は以下のコマンドで Vite サーバーを立ち上げて利用できる。

npm run dev

デプロイ

開発中から本番へデプロイする際に、ビルドの仕方がわからなかったのですが、ググって調べていると正解が見つかりました。

ビルド用の設定

ビルド用の設定は vite.config.js に記載がある。ここに生成が必要な CSS や JavaScript のファイルを列挙してあげないと、Vite はファイルを生成してくれない。デフォルトで生成されているCSSやJSのファイルは不要な場合は削除しても問題ない。以下のように列挙する。

vite.config.js

エックスサーバーに Laravel 環境を構築する場合

エックスサーバーで Laravel を利用する場合には、 PHP バージョンの変更、Composer 2 のインストール、Node.js のインストールなど、やることは多くあります。参考になるサイトがいくつかあるので以下に掲載します。ググるとたくさんでてくるので、自分が理解しやすいサイトを利用してください。

XServerにSSH接続してLaravelプロジェクト(ないしデプロイ)を作成する手順
https://maasaablog.com/development/laravel/2142/

XSERVERにLaravelをインストールする方法を解説する
https://miya-system-works.com/blog/detail/server-xserver-laravel/

Public フォルダをどうやって隠すか

Public フォルダはドキュメントルートよりも上位のフォルダに設置することにより、外部のアクセスによりファイルが見られるリスクを無くすことができます。その上で、ドキュメントルート直下にシンボリックリンクを貼って、.htaccess でシンボリックリンクのフォルダに対してアクセスを集めるリライトを記述すればOK。