Mac環境でLaravelの開発環境を構築する方法には複数選択肢がありますが、今回はLaravel Valetを利用してLaravel環境の構築を行います。インストール直後/工場出荷直後のmacOS CatalinaにLaravel ValetをインストールしてLaravel6.X環境を構築します。

Laravel ValetはWindowsでは利用することができません。

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

  • Homebrew(macOSのパッケージマネージャー)
  • PHPのバージョン7.3
  • Comopser(PHPのパッケージ管理ツール)
Valetというのはホテルやレストランの駐車のサービスで入り口でキーを渡すと乗ってきた車を代わりに駐車してくれます。そのためValetのコマンドにはparkというコマンドが入っています。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バージョンの確認

Mac OSにインストール済みのPHPのバージョンを確認します。LaravelもドキュメントにはPHPの7.3のインストールを行う記述がありますが、macOS CatalinaではPHP 7.3.9のバージョンがインストールされているのでそのまま進めます。


% php -version
PHP 7.3.9 (cli) (built: Sep 10 2019 17:45:01) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.9, Copyright (c) 1998-2018 Zend Technologies

Composerのインストール

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

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


% composer -V
zsh: command not found: composer

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

composerのトップページ
composerのトップページ

赤線で囲んだスクリプトをコピーして、ターミナルを起動して貼り付け実行してください。インストールが行われます。

実行スクリプト
実行スクリプト

インストール完了後に実行ディレクトリに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 version 1.9.1 2019-11-01 17:20:17
composer.pharファイルの/usr/loca/binへの移動は必須ではありません。目的はどのディレクトリからも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

mac OS catalinaからデフォルトのシェルがbashからzshに変更になっています。ユーザのホームディレクトリ(ここでは/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 installコマンドを実行します。


% 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をインストールを行うと初期設定で自動でtestが設定されるためです。Valetのコマンドを使用するとドメインの名前も変更することが可能です。手順については後ほど説明を行います。

Laravelのインストール

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


% mkdir ~/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

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

httpsではないので注意してください。
Laravel初期画面
Laravel初期画面

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

Laravel Valetの管理

Valetの起動・停止・再起動

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


% valet stop
Password:
Stopping php...
Stopping nginx...
Valet services have been stopped

停止するとブラウザからLaravelへのアクセスはできなくなります。

起動はvalet startで行います。


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

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

設定ファイルの保存場所

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",
    "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].

インストール直後、foobar.testにpingすると応答がありましたがappへの変更を行うとfoobar.testからの返答はありません。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コマンドを実行します。


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

httpでのアクセスの場合はChromeを使用している場合は保護されていない通信と表示されていますが、httpsでのアクセスでは暗号化が行われている鍵のマークが表示されることがわかります。

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

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


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

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プロジェクトを作成し、アクセスできることを確認します。


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

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

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

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

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


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

作成後、valet linkコマンドを実行します。


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

ブラウザでlaravel6.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                        |
+----------+-----+----------------------+-----------------------------+
| laravel6 |     | http://laravel6.test | /Users/mac/Desktop/laravel6 |

ログに関するコマンド

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                                        |
+---------+----------------------------------------------+
| mailhog | /usr/local/var/log/mailhog.log               |
| nginx   | /Users/mac/.config/valet/Log/nginx-error.log |
| php-fpm | /usr/local/var/log/php-fpm.log               |
| redis   | /usr/local/var/log/redis.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)