Macを利用する人の中にはMacを利用していればかっこいいというブランドイメージではなくアプリケーションの構築を効率的に行いたいという目的の人も多いかと思います。Macを利用している場合、LaravelであればLaravel Valetを利用することですぐに開発環境を構築することができます。

さらにMacを起動し開発サーバを起動するために毎回php artisan serveコマンドを実行するのが面倒だという人にValetはおすすめです。 OSを再起動してphp artisan serveコマンド実行しなくても利用することができます。

環境の確認

Mac環境でLaravelの開発環境を構築する方法には複数選択肢がありますが本文書ではLaravel Valetを利用してLaravel環境の構築を行います。

Laravel ValetはWindowsでは利用することができません。元々はLaravel6.xの環境で記述していましたが、Laravel10に対応させています。

Laravel Valetをインストールするためには、以下の3つが事前にインストールされている必要があります。

  • Homebrew(macOSのパッケージマネージャー)
  • PHPのバージョン8.1以上
  • Comopser(PHPのパッケージ管理ツール)
Valetというのはホテルやレストランの駐車のサービスで入り口でキーを渡すと乗ってきた車を代わりに駐車してくれるサービスです。そのためValetのコマンドにはparkというコマンドが入っています。parkというコマンドで駐車場を作成し、その中にプロジェクト(車)を入れるイメージです。アメリカでは一般的なサービスなので名前と機能のイメージが結びつきやすいですが、日本ではValetがどのようなサービスか想像つかないのでなぜParkなのといった疑問が生まれますね。

Homebrewのインストール

macOSのパッケージマネージャーのHomebrewのインストールを行います。

インストールを実行するためのスクリプトがHomebrewのホームページのトップ画面に表示されている赤線で囲んだスクリプトをコピーして、ターミナルを起動して貼り付け実行してください。実行にはMacの管理者のパスワードも必要となります。

Homebrewのトップページ画面
Homebrewのトップページ画面

% /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

インストールを実行すると途中でXcode Command Line Toolsのインストールの確認が表示されるので、そのまま”Enter”キーを押してください。またsudoコマンドを実行するためにログインユーザのパスワードも聞かれるのでパスワードを入力してください。

インストールが完了するとbrew helpコマンドを実行してください。brewコマンドの使用方法が表示されればHomebrewのインストールは完了です。

PHPバージョンの確認

macOSにインストール済みのPHPのバージョンを確認します。Laravelのl公式ドキュメントには現在の最新バージョンのLaravel10では要件にPHP >= 8.1の記述があるので8.1以上であるか確認を行う必要があります。


 % php -version
PHP 8.3.1 (cli) (built: Dec 20 2023 12:44:38) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.1, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.1, Copyright (c), by Zend Technologies
Big SurまでのmacOSではPHPがインストール済みでしたが最新のmacOSではPHPは含まれていないためインストールを行う必要があります。PHPのインストールはHomebrewを利用して行うことができます。

PHPのインストール

php -versionのコマンドを実行してもバージョンが表示されない場合にはphpのインストールが必要となります。phpのインストールはHomebrewを利用して行います。


% brew install php

php -versionコマンドを実行してバージョンの確認を行います。またwhichコマンドでphpのパスを確認しておきます。


 % php -version
PHP 8.3.1 (cli) (built: Dec 20 2023 12:44:38) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.1, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.1, Copyright (c), by Zend Technologies

% which php
/usr/local/bin/php

Composerのインストール

PHPのパッケージ管理を行うComposerのインストールを行います。Laravel Valetをインストールするために利用します。

インストールされていないか確認を行いますがmacOSではデフォルトではcomposerのインストールは行われていません。バージョンが表示される場合は、composerのインストールは必要ありません。


% composer -V
zsh: command not found: composer

インストールを行うにはComposerのサイトでインストールスクリプトを確認する必要があります。Composerのサイトにアクセスすると下記のトップページ画面が表示されます。中ほど右にあるDownloadのリンクをクリックしてください。

Composerのトップページ
Composerのトップページ

ComposerのDownload画面が表示されます。ダウンロードを行うためにはスクリプトを実行してComposerをダウンロードする必要があります線で囲まれたphpコマンドをコピーしてターミナルに貼り付けて実行してください。

composerのダウンロード方法
composerのダウンロード方法

 % php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e21205b207c3ff031906575712edab6f13eb0b361f2085f1f1237b7126d785e826a450292b6cfd1d64d92e6563bbde02') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
Installer verified
All settings correct for using Composer
Downloading...

Composer (version 2.6.6) successfully installed to: /Users/mac/composer.phar
Use it: php composer.phar

ダウンロード完了後にコマンドを実行した実行ディレクトリにcomposer.pharファイルが作成されます。composerコマンドをどのディレクトリからも実行できるように/usr/loca/binディレクトリ以下に保存します。/usr/local/の下にbinディレクトリがない場合は作成を行います。Permission Deniedエラーが出た場合はsudoコマンドで実行してください。


% sudo mkdir /usr/local/bin
Password:

作成後、composer.pharファイルを/usr/local/binに移動してください。


% sudo mv composer.phar /usr/local/bin/composer
ファイルを移動する際にファイル名をcomposer.pharからcomposerに変更しています。

composer -Vコマンドでバージョンの確認を行います。


 % composer -V
Composer version 2.6.6 2023-12-08 18:32:26
composer.pharファイルの/usr/loca/binへの移動は必須ではありません。目的はどのディレクトリからもcomposerを実行できるようにすることです。どのディレクトリからもcomposerコマンドを実行する必要がない場合はcomposer.pharを直接実行しても何も問題はありません。

Laravel Valetのインストール

composerを利用してLaralve Valetのインストールを行います。


% composer global require laravel/valet 
Changed current directory to /Users/mac/.composer

インストール後にvalet installコマンドを実行しますが、PATHが設定されていないため下記のエラーが発生します。


% valet
valet not found

ユーザのホームディレクトリ(ここでは/Users/mac)でPATHを設定するために.zshrcを作成し以下を記述します。


export PATH="/Users/mac/.composer/vendor/bin:$PATH"

/Users/macは各環境に合わせて設定を行ってください。zshシェルでは、~/.comoser/vendor/binの記述ではうまく行かなかったため、/Users/macも含めてパスの設定を記述しています。bashシェルを使用している場合は、bash_profileファイルに下記の記述で設定することができます。


export PATH="~/.composer/vendor/bin:$PATH"

ファイルを作成後、zshでもbashでもsourceコマンドを使って追加したPATHの設定を反映させてください。PATHの設定が反映されるとvaletコマンドへのPATHが通ります。(whichコマンドで確認)


% source .zshrc //zshシェルの場合
$ source .bash_profile //bashシェルの場合
% which valet
/Users/mac/.composer/vendor/bin/valet
% valet -V     
Laravel Valet 4.6.1

valet installコマンドを実行します。valetコマンドを実行した時にpasswordを聞かれた場合はmacOSのパスワードを入力してください。


% valet install
Password:
Stopping nginx...
Installing nginx...
[nginx] is not installed, installing it now via Brew... 🍻
Installing nginx configuration...
Installing nginx directory...
Installing php...
[php] is not installed, installing it now via Brew... 🍻
Updating PHP configuration...
Restarting php...
Installing dnsmasq...
[dnsmasq] is not installed, installing it now via Brew... 🍻
Restarting dnsmasq...
Valet is configured to serve for TLD [.test]
Restarting nginx...

Valet installed successfully!
Homebrewのインストールが行われていない場合はエラーが発生します。ngix, php, dnsmasqなどのパッケージをhomebrewを利用してインストールするためです。

Laravel Valetのインストールが正常に完了しているか確認を行います。*.test(*は任意の文字列)に対してpingを実行します。下記のように127.0.0.1から返答があればLaravel Valetは正常にインストールされています。


% ping foobar.test
PING foobar.test (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.028 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.116 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.092 ms
ドメインtestはLaravel Valetをインストールを行うと初期設定で自動で設定されます。にValetのコマンドを使用するとtestから別のドメイン名へ変更することが可能です。手順については後ほど説明を行います。

Laravelのインストール

Laravelのプロジェクト用のディレクトリをユーザディレクトリの下に作成します。


% mkdir ~/Sites
% cd Sites

Sitesディレクトリの下でvalet parkコマンドを実行します。このコマンドを実行することでValetがSitesディレクトリを登録し、その下に作成するプロジェクトを認識できるようになります。


 % valet park
Password:
This directory has been added to Valet's paths.

composerコマンドを利用して、Laravelプロジェクトblogの作成を行います。


 % composer create-project --prefer-dist laravel/laravel blog
laravelコマンドが実行できる環境であればlaravel new blogを実行してください。

作成完了後blogディレクトリが作成されていることを確認します。


 % ls 
blog

ブラウザでhttp://blog.testにアクセスするとLaravelの初期画面が表示されます。

httpsではないので注意してください。
Laravel10のトップページ
Laravel10のトップページ

Laravel Valetを利用してLaravelの開発環境を構築することができました。

valet parkedコマンドで作成したプロジェクトの情報を確認することができます。


 % valet parked
+------+-----+------------------+-----------------------+---------+
| Site | SSL | URL              | Path                  |         |
+------+-----+------------------+-----------------------+---------+
| blog |     | http://blog.test | /Users/mac/Sites/blog | php@8.3 |
+------+-----+------------------+-----------------------+---------+

Laravel Valetの管理

Valetの起動・停止・再起動

Laravel ValetをインストールするとValetデーモンが自動起動し、OSの再起動を行ってもValetデーモンは自動起動されます。Valetデーモンの起動、停止のコマンドも準備されています。停止はvalet stopコマンドで行います。


% valet stop
Password:
Stopping php...
Stopping nginx...
Valet services have been stopped
Valet core services have been stopped. To also stop dnsmasq, run: valet stop dnsmasq

停止するとブラウザからLaravel(http://blog.test)へのアクセスはできなくなります。

起動はvalet startで行います。


 % valet start
Restarting php...
Restarting nginx...
Valet services have been started

再起動はvalet restartで行うことができます。

設定ファイルの保存場所

Laravel Valetの保存場所はユーザのホームディレクトリの下にある.config/valetの下にあります。


% pwd
/Users/mac/.config/valet
% ls
Certificates	Extensions	Nginx		config.json	valet.sock
Drivers		Log

config.jsonファイルの中身を確認するとドメインtestとvalet parkを実行したSitesディレクトリの情報が記述されています。


{
    "tld": "test",
    "loopback": "127.0.0.1",
    "paths": [
        "/Users/mac/Sites"
    ]
}

設定ファイルの内容が確認できたので次はコマンドを使って設定ファイルの内容がどのように変更されるか確認していきます。

ドメイン名の変更

デフォルトではドメイン名はtestに設定されているのでappに変更を行います。valet tldコマンドを利用します。


% valet tld app
Password:
Restarting dnsmasq...
Valet is configured to serve for TLD [.app]
Restarting php...
Restarting nginx...
Your Valet TLD has been updated to [app].
valet tldを実行すると新たしいバージョンでは”Using a custom TLD is no longer officially supported and may lead to unexpected behavior. Do you wish to proceed?”のメッセージが表示され変更することは公式にはサポートされていません。

インストール直後、foobar.testにpingすると応答がありましたがドメインをappへ変更するとfoobar.testからの返答はありません。その変わり変更したドメインappのfoobar.appへのpingの応答を確認することができます。


 % ping foobar.test
ping: cannot resolve foobar.test: Unknown host
 % ping foobar.app
PING foobar.app (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.033 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.097 ms
ドメイン名の変更はvalet domain appでも実行することができます。

変更後、ブラウザを利用してhttp://blog.appにアクセスしLaravelの初期画面が表示されればドメイン名の変更は正常に完了しています。

HTTPSを使ったアクセス(TLS/SSL設定)

デフォルトではhttpでのアクセスが可能ですが、セキュアなhttpsでのアクセスを可能にするためには、valet secureコマンドを実行します。実行すると”システム証明書信頼設定に変更を加えようとしています。”というメッセージが表示されOSのパスワードを入力する必要があります。パスワードを入力するとサービスの再起動が行われます。


 % valet secure blog
Restarting nginx...
The [blog.test] site has been secured with a fresh TLS certificate.

実行後はhttps://blog.testでアクセスすることが可能となります。

httpsでのアクセス
httpsでのアクセス

.config/valetディレクトリの下にあるCertificatesディレクトリに下に関連するファイルが作成されます。


 % ls 
blog.test.conf	blog.test.crt	blog.test.csr	blog.test.key

secureを設定後にvalet parkedコマンドを実行するとSSLにチェックが入っていることが確認できます。


 % valet parked     
+------+-----+-------------------+-----------------------+---------+
| Site | SSL | URL               | Path                  |         |
+------+-----+-------------------+-----------------------+---------+
| blog |  X  | https://blog.test | /Users/mac/Sites/blog | php@8.3 |
+------+-----+-------------------+-----------------------+---------+

valet securedコマンドでも確認することができます。有効期限が表示されます。


 % valet secured
+-----------+-------------------------+
| Site      | Valid Until             |
+-----------+-------------------------+
| blog.test | 2025-01-13 12:27:18 GMT 

解除する場合は、valet unsecureコマンドを利用します。


% valet unsecure blog
Password:
Restarting nginx...
The [blog.app] site will now serve traffic over HTTP.

SSLのチェックが消えます。


 % valet parked       
+------+-----+------------------+-----------------------+---------+
| Site | SSL | URL              | Path                  |         |
+------+-----+------------------+-----------------------+---------+
| blog |     | http://blog.test | /Users/mac/Sites/blog | php@8.3 |
+------+-----+------------------+-----------------------+---------+

parkで設定したディレクトリについて

valet parkでSitesディレクトリの登録を行いましたが、登録したディレクトリのパスはvalet pathsで確認することができます。


% valet paths
[
    "/Users/mac/Sites"
]

登録したパスを解除することも可能です。登録したディレクトリのパスを解除したい場合はvalet forgetコマンドを実行します。


 % valet forget ~/Sites
The [/Users/mac/Sites] directory has been removed from Valet's paths.
 % valet paths         
No paths have been registered.

パスが解除されるとブラウザでアクセスしてもblogプロジェクトにはアクセスできなくなります。再度valet park ~/Sitesを実行すればアクセス可能となります。

複数のディレクトリを登録する

複数のディレクトリも登録可能です。新たにDevディレクトリを作成し、その中にLaravelプロジェクトpostを作成しアクセスできることを確認します。


% mkdir Dev
% valet park ~/Dev
The [/Users/mac/Dev] directory has been added to Valet's paths.
% valet paths       
[
    "/Users/mac/Dev",
    "/Users/mac/Sites"
]
% cd Dev
% composer create-project --prefer-dist laravel/laravel post

ブラウザからhttp://post.testにアクセスしLaravelの初期画面が表示されれば複数ディレクトリの登録も正常に動作しています。

valet parkedコマンドを実行すると作成したpostが登録されていることが確認できます。


% valet parked
Password:
+------+-----+------------------+-----------------------+---------+
| Site | SSL | URL              | Path                  |         |
+------+-----+------------------+-----------------------+---------+
| post |     | http://post.test | /Users/mac/Dev/post   | php@8.3 |
| blog |     | http://blog.test | /Users/mac/Sites/blog | php@8.3 |
+------+-----+------------------+-----------------------+---------+

特定のプロジェクトのみ設定する

ここまでSitesとDevディレクトリを作成し、それぞれにblogとpostのプロジェクトを作成しました。SitesやDevの下ではなく直接ディレクトリを指定して公開することも可能です。その場合はvalet linkコマンドを利用します。

デスクトップ直下にlaravel10という名前のLaravelプロジェクトを作成します。


% composer create-project --prefer-dist laravel/laravel laravel10

プロジェクトの作成後、valet linkコマンドを実行します。


% cd laravel10
% valet link laravel10
Password:
A [laravel10] symbolic link has been created in [/Users/mac/.config/valet/Sites/laravel10].

ブラウザでlaravel10.testにアクセスするとLaravelの初期画面が表示されればlinkの設定も正常に動作しています。

valet pathsコマンドを実行すると新しいパスが追加されていることがわかります。個別に登録したプロジェクトは/Users/mac/.config/valet/Sitesの下にリンクされることでアクセスが可能になっていることがわかります。


% valet paths
[
    "/Users/mac/.config/valet/Sites",
    "/Users/mac/Dev",
    "/Users/mac/Sites"
]

リンクを解除する際はvalet unlinkコマンドを実行します。

valet linksコマンドを使えばリンクを貼っているプロジェクトディレクトリを確認することができます。


% valet links
+-----------+-----+-----------------------+------------------------------+-------------+
| Site      | SSL | URL                   | Path                         | PHP Version |
+-----------+-----+-----------------------+------------------------------+-------------+
| laravel10 |     | http://laravel10.test | /Users/mac/Desktop/laravel10 | php@8.3     |
+-----------+-----+-----------------------+------------------------------+-------------+

valet parkedには表示されません。


% valet parked
+------+-----+------------------+-----------------------+---------+
| Site | SSL | URL              | Path                  |         |
+------+-----+------------------+-----------------------+---------+
| post |     | http://post.test | /Users/mac/Dev/post   | php@8.3 |
| blog |     | http://blog.test | /Users/mac/Sites/blog | php@8.3 |
+------+-----+------------------+-----------------------+---------+

linkの引数にlaravel10を設定しましたが任意の名前をつけることができます。一度laravel10のリンクを解除してlaravelという名前リンクを貼り直します。


% valet unlink laravel10
The [laravel10] symbolic link has been removed.
mac@macnoMacBook-Pro laravel10 % valet link laravel       
A [laravel] symbolic link has been created in [/Users/mac/.config/valet/Sites/laravel].

設定後はブラウザからlaravel.testでアクセスすることができます。valet linkでも設定した名前を確認することができます。


 % valet links
+---------+-----+---------------------+------------------------------+-------------+
| Site    | SSL | URL                 | Path                         | PHP Version |
+---------+-----+---------------------+------------------------------+-------------+
| laravel |     | http://laravel.test | /Users/mac/Desktop/laravel10 | php@8.3     |
+-----------+-----+-----------------------+------------------------------+-------------+

ログに関するコマンド

valet logコマンドを実行するとログに関する情報を確認することができます。


 % valet log
In order to tail a log, pass the relevant log key (e.g. "nginx")
along with any optional tail parameters (e.g. "-f" for follow).

For example: "valet log nginx -f --lines=3"

Here are the logs you might be interested in.

+---------+----------------------------------------------+
| Keys    | Files                                        |
+---------+----------------------------------------------+
| nginx   | /Users/mac/.config/valet/Log/nginx-error.log |
| php-fpm | /usr/local/var/log/php-fpm.log               |
+---------+----------------------------------------------+

Tip: Set custom logs by adding a "logs" key/file object
to your "/Users/mac/.config/valet/config.json" file.

Valetのアンインストール

Laravel Valetのデーモンをアンインストールしたい場合はuninstallコマンドも用意されています。


% valet uninstall
Stopping nginx...
Valet has been uninstalled.

nginxやdnsmasqインストールしたサービスを一括ですべてアンインストールするものではありません。valet startコマンドを実行するとvaletは使用することができます。

laravel/valetに関するパッケージについてはissue#589にアンインストールに関する記述があります。

Laravel Valetのコマンド一覧

本文書で利用したLaravel Valetのコマンド一覧です。

  • valet start ・・・valetデーモンの起動
  • valet stop ・・・valetデーモンの停止
  • valet restart ・・・valetデーモンの再起動
  • valet uninstall・・・valetデーモンのアンインストール
  • valet park・・・PAThの登録
  • valet forget・・・parkで設定したPATHの解除
  • valet paths・・・PATHの一覧表示
  • valet link・・・Laravelディレクトリのリンクの作成
  • valet log・・・ログに関数する情報の取得
  • valet secure・・・SSL/TSL設定、https接続を可能にする
  • valet unsecure・・・SSL/TSL設定を解除。http接続を可能にする(デフォルト)
  • valet domain [ドメイン名]・・・ドメイン名を変更する(デフォルト.test)
  • valet tld [ドメイン名]・・・ドメイン名を変更する(デフォルト.test)

Mac環境であればLaravel Valetを利用することで柔軟に開発環境を構築することができます。