この記事は?
表題の通りですが、最近Laravel触っていないので、急に触るときに「あれこれどうやってセットアップしてたっけ?」が増えてきたので、まとめておきます。
環境
- OS
- macOS Monterey 12.6.2
- PHP
- 8.0.x
- Laravel
- 9.46.0
- IDE
- PhpStorm 2022.3.1
さくらのサーバがかたくなにPHP8.1に対応してくれないので、今回は8.0をターゲットに書きます。
各種セットアップ
PHPのインストール
自分はanyenv経由でphpenvを入れ、homebrewでインストールしたPHPの各種バージョンをphpenvのディレクトリにシンボリックリンクして使っています。簡単にやり方をまとめます。
anyenv, phpenvのインストール
まとまっているサイトが沢山あるので省略。
このQiita記事にも書かれていますが、ビルドをすると大量のエラーが出るので、いつの頃からかビルド(phpenv install x.x.x)するのを止めてしまいました。
PHPのインストール
以下のようにしてhomebrewでPHPの各バージョンをインストールします。
brew install php@7.4
brew install php@8.0
brew install php@8.1
brew install php
phpenvへの設定の反映
phpenvの設定が終わっていると、~/.anyenv/envs/phpenv/versions
というディレクトリが出来ているはずです。出来ていない場合は設定をしてからphpenv versions
を実行してみてください。
それでは設定を反映させます。バージョン番号はその時のHomebrewでインストールされる最新の物に読み替えてください。
cd ~/.anyenv/envs/phpenv/versions/
ln -s /usr/local/Cellar/php@7.4/7.4.32
ln -s /usr/local/Cellar/php@8.0/8.0.26
ln -s /usr/local/Cellar/php@8.1/8.1.13
ln -s /usr/local/Cellar/php/8.2.0
phpenv global 8.0.26
この状態でphpenv versions
を実行すると以下のような表示になるはずです。
phpenv versions
system
7.4.32
* 8.0.26 (set by /Users/foobar/.anyenv/envs/phpenv/version)
8.1.13
8.2.0
同じくphp -v
の結果。
php -v
PHP 8.0.26 (cli) (built: Nov 28 2022 11:39:58) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.26, Copyright (c) Zend Technologies
with Zend OPcache v8.0.26, Copyright (c), by Zend Technologies
これでビルドエラーに悩まされずにphpenvが利用出来ます。composerも自動で入れてくれるので便利です。
ただ一点欠点がありまして、brew upgrade
をしてPHPのバージョンがアップデートされると、phpenv/versions配下のシンボリックリンクが切れてしまいます。そう言うときは、切れたシンボリックリンクを削除して、改めてシンボリックリンクを張りphpenv global
やphpenv local
を実行してください。
composer create-project
では実際にLaravelのプロジェクトを作成します。先ほどインストールしたPHPは実はこのプロジェクト作成+α程度にしか利用していません。残りはLaravel Sail内のPHPに任せてしまいます。
composer create-project laravel/laravel foo_bar_test
初回git周りのあれこれ
表題の通りです。git周りのあれこれを済ませていまいます。
git init
git add .
git commit -a -m 'First commit.'
.gitignoreの末尾に https://www.toptal.com/developers/gitignore/api/intellij+all,visualstudiocode,vim,emacs,macos,windows,laravel で得られる結果を追加して、git commit
しておきます。
ディレクトリなどの重複でアラートが出ますので、適宜コメントアウトしてください。
Laravel Sailの設定
dockerを使って開発を進めるので、Laravel Sailを利用する事にします。現在はLaravel Sailは標準でインストール済みですので、有効化して設定を変更します。ここで有効にするサービスを選びます。サービス名も指定出来るようですが、数字でカンマ区切りが便利かと思います。
php artisan sail:install
Which services would you like to install? [mysql]:
[0] mysql
[1] pgsql
[2] mariadb
[3] redis
[4] memcached
[5] meilisearch
[6] minio
[7] mailhog
[8] selenium
> 0,7,8
Sail scaffolding installed successfully.
(中略)
Sail build successful.
この状態だと、デフォルトでPHP8.1が利用されるので、今回はPHP8.0にする方法をまとめます。docker-compose.yml
の8.1
を8.0
に書き換えて、docker imageをビルドし直すだけです。
- context: ./vendor/laravel/sail/runtimes/8.1
+ context: ./vendor/laravel/sail/runtimes/8.0
- image: sail-8.1/app
+ image: sail-8.0/app
./vender/bin/sail build
ついでに~/.zshrc
か~/.zprofile
にalias設定をしておきます。
alias sail='[ -f sail ] && bash sail || bash vendor/bin/sail'
これで./vendor/bin/sail
と入力しなくてもsail
だけでコマンドが使えるようになりました。
以下のコマンドで起動しておきます。終了はCtrl+C
です。
sail up
地域・ローカライズ周りの設定
config/app.php
の変更
タイムゾーンとロケールを変更します。
- 'timezone' => 'UTC',
+ 'timezone' => 'Asia/Tokyo',
- 'locale' => 'en',
+ 'locale' => 'ja',
- 'faker_locale' => 'en_US',
+ 'faker_locale' => 'ja_JP',
Laravel-Lang周りの設定
多言語対応のため、Laravel-Lang/langを利用します。設定にはLaravel-Lang/publisherを用います。このとき、sail経由で行う事でLaravel Sail内のPHPのバージョンに合ったパッケージがインストールされます。
sail composer require laravel-lang/publisher laravel-lang/lang --dev
パッケージをインストールしたので、artisan経由で日本語関係のファイルをインストールします。
sail artisan lang:add ja
Laravel UIのインストールと設定
Laravel Breezeなど色々な認証系パッケージがありますが、今回は昔ながらのLaravel UIを使います。
sail composer require laravel/ui
sail artisan ui bootstrap --auth
routes/web.php
にAuth::routes()
とRoute::get('/home', [略]);
が追加されます。意外と知られていないようなのですが、Auth::routes()
は引数に配列で設定を指定する事が出来ます。ルートの追加を設定でオンオフする事が可能です。以下の設定がデフォルトとなっています。必要無いページはfalseにしておきましょう。
Auth::routes([
'login' => true, // ログインページの有無
'logout' => true, // ログアウト動作の有無
'register' => true, // 登録ページの有無
'reset' => true, // パスワードリセットページの有無
'confirm' => true, // パスワードの再確認ページの有無
'verify' => true, // メールアドレスの確認ページの有無
])
続けてアセット類のビルドです。
sail npm install
sail npm run build
最後にDBマイグレーションをしておきます。
sail artisan migrate
まとめ
自分の備忘録的な投稿でした。今度はもうちょっと実のある投稿をしたい物です。