メインコンテンツまでスキップ

Laravel Valet

導入

注記

macOS や Windows で Laravel アプリケーションをより簡単に開発する方法をお探しですか?Laravel Herdをチェックしてください。Herd には、Valet、PHP、Composer を含む、Laravel 開発を始めるために必要なすべてが揃っています。

Laravel Valet は、macOS のミニマリスト向けの開発環境です。Laravel Valet は、Mac を設定して、マシンが起動するたびに常に Nginx をバックグラウンドで実行するようにします。そして、DnsMasq を使用して、Valet は *.test ドメインへのすべてのリクエストをローカルマシンにインストールされたサイトにポイントするようにプロキシします。

言い換えると、Valet はおおよそ 7 MB の RAM を使用する高速な Laravel 開発環境です。Valet は SailHomestead の完全な代替ではありませんが、柔軟な基本機能を提供し、極端な速度を好む場合や RAM が限られているマシンで作業している場合には素晴らしい代替手段となります。

Valet のデフォルトサポートには、以下が含まれますがこれに限定されません:

ただし、カスタムドライバを使用してValetを拡張することができます。

インストール

警告

Valetを使用するにはmacOSとHomebrewが必要です。インストールする前に、ApacheやNginxなどの他のプログラムがローカルマシンのポート80にバインドされていないことを確認してください。

まず、updateコマンドを使用してHomebrewが最新であることを確認する必要があります:

brew update

次に、Homebrewを使用してPHPをインストールする必要があります:

brew install php

PHPをインストールした後、Composerパッケージマネージャをインストールする準備が整います。さらに、$HOME/.composer/vendor/binディレクトリがシステムの「PATH」にあることを確認する必要があります。Composerをインストールした後、Laravel ValetをグローバルComposerパッケージとしてインストールできます:

composer global require laravel/valet

最後に、Valetのinstallコマンドを実行できます。これにより、ValetとDnsMasqが構成およびインストールされます。さらに、システムの起動時にValetが依存するデーモンが起動するように構成されます:

valet install

Valetがインストールされたら、ターミナルでping foobar.testなどの*.testドメインを試してみてください。Valetが正しくインストールされている場合、このドメインが127.0.0.1で応答しているはずです。

Valetは、マシンが起動するたびに必要なサービスを自動的に開始します。

PHP バージョン

注記

グローバルPHPバージョンを変更する代わりに、isolate コマンドを使用してValetにサイトごとのPHPバージョンを指示できます。

Valetを使用してvalet use php@versionコマンドを使用してPHPバージョンを切り替えることができます。指定したPHPバージョンがHomebrewにインストールされていない場合、Valetがインストールします:

valet use php@8.2

valet use php

また、プロジェクトのルートに.valetrcファイルを作成することもできます。.valetrcファイルには、サイトで使用するべきPHPバージョンを記述する必要があります:

php=php@8.2

一度このファイルが作成されると、valet use コマンドを実行するだけで、ファイルを読み取ってサイトの好みのPHPバージョンを決定します。

警告

Valet は、複数のPHPバージョンがインストールされていても、一度に1つのPHPバージョンしか提供しません。

データベース

アプリケーションがデータベースを必要とする場合は、DBngin をチェックしてみてください。DBngin は、MySQL、PostgreSQL、およびRedisを含む無料のオールインワンデータベース管理ツールを提供しています。DBngin をインストールした後、root ユーザー名とパスワードには空の文字列を使用して、127.0.0.1 にあるデータベースに接続できます。

インストールのリセット

Valet のインストールが正常に実行されない場合は、composer global require laravel/valet コマンドを実行してから valet install を実行すると、インストールがリセットされ、さまざまな問題が解決される可能性があります。稀に、「強制的なリセット」が必要な場合は、valet uninstall --force を実行してから valet install を実行する必要があります。

Valet のアップグレード

ターミナルで composer global require laravel/valet コマンドを実行することで、Valet のインストールをアップデートできます。アップグレード後は、必要に応じて Valet が構成ファイルを追加でアップグレードできるように、valet install コマンドを実行するのが良い習慣です。

Valet 4 へのアップグレード

Valet 3 から Valet 4 にアップグレードする場合は、Valet のインストールを適切にアップグレードするために、以下の手順を実行してください:

  • サイトのPHPバージョンをカスタマイズするために .valetphprc ファイルを追加している場合は、各 .valetphprc ファイルを .valetrc にリネームします。その後、.valetrc ファイルの既存の内容の前に php= を追加します。
  • カスタムドライバを更新して、新しいドライバシステムの名前空間、拡張子、タイプヒント、および戻り値のタイプヒントに一致するようにします。例として Valet の SampleValetDriver を参照できます。
  • サイトを提供するために PHP 7.1 から 7.4 を使用している場合は、Valet がいくつかのスクリプトを実行する際に、このバージョンを使用するため、Homebrew を使用して PHP のバージョンを 8.0 以上にインストールしていることを確認してください。

サイトの提供

Valetをインストールしたら、Laravelアプリケーションを提供する準備が整いました。Valetには、アプリケーションを提供するのに役立つ2つのコマンド、parklink が用意されています。

park コマンド

park コマンドは、アプリケーションが含まれるマシン上のディレクトリを登録します。ディレクトリがValetに「駐車」されると、そのディレクトリ内のすべてのディレクトリは、Webブラウザで http://<directory-name>.test でアクセスできるようになります:

cd ~/Sites

valet park

以上です。これで、「駐車」されたディレクトリ内に作成したアプリケーションは、自動的に http://<directory-name>.test の規則に従って提供されます。したがって、駐車されたディレクトリに「laravel」という名前のディレクトリが含まれている場合、そのディレクトリ内のアプリケーションは http://laravel.test でアクセスできます。さらに、Valetはワイルドカードサブドメインを使用してサイトにアクセスできるようにします(http://foo.laravel.test)。

link コマンドも使用して、Laravelアプリケーションを提供できます。このコマンドは、ディレクトリ内の単一のサイトを提供したい場合に便利です:

cd ~/Sites/laravel

valet link

link コマンドを使用してValetにリンクされたアプリケーションは、そのディレクトリ名を使用してアクセスできます。したがって、上記の例でリンクされたサイトは http://laravel.test でアクセスできます。さらに、Valetはワイルドカードサブドメインを使用してサイトにアクセスできるようにします(http://foo.laravel.test)。

アプリケーションを異なるホスト名で提供したい場合は、link コマンドにホスト名を渡すことができます。たとえば、次のコマンドを実行して、アプリケーションを http://application.test で利用できるようにすることができます:

cd ~/Sites/laravel

valet link application

もちろん、link コマンドを使用してサブドメインでアプリケーションを提供することもできます:

valet link api.application

links コマンドを実行して、リンクされたディレクトリのリストを表示することができます:

valet links

unlinkコマンドを使用して、サイトのシンボリックリンクを破壊できます:

cd ~/Sites/laravel

valet unlink

TLSを使用したサイトのセキュリティ強化

デフォルトでは、ValetはHTTP経由でサイトを提供します。ただし、HTTP/2を使用した暗号化されたTLSでサイトを提供したい場合は、secureコマンドを使用できます。たとえば、Valetによってlaravel.testドメインでサイトが提供されている場合、次のコマンドを実行してセキュリティを強化できます:

valet secure laravel

サイトを「非セキュア」にして、トラフィックをプレーンなHTTP経由で提供するように戻すには、unsecureコマンドを使用します。secureコマンドと同様に、このコマンドは非セキュアにしたいホスト名を受け入れます:

valet unsecure laravel

デフォルトサイトの提供

時々、未知のtestドメインを訪れたときに404ではなく「デフォルト」サイトを提供するようにValetを構成したい場合があります。これを実現するには、~/.config/valet/config.json構成ファイルにdefaultオプションを追加し、デフォルトサイトとして機能するサイトのパスを指定します:

    "default": "/Users/Sally/Sites/example-site",

サイトごとのPHPバージョン

デフォルトでは、ValetはグローバルPHPインストールを使用してサイトを提供します。ただし、さまざまなサイトで複数のPHPバージョンをサポートする必要がある場合は、isolateコマンドを使用して特定のサイトが使用するPHPバージョンを指定できます。isolateコマンドは、現在の作業ディレクトリにあるサイトで指定したPHPバージョンを使用するようValetを構成します:

cd ~/Sites/example-site

valet isolate php@8.0

サイト名がそれを含むディレクトリの名前と一致しない場合は、--siteオプションを使用してサイト名を指定できます:

valet isolate php@8.0 --site="site-name"

便宜上、サイトの構成されたPHPバージョンに基づいて適切なPHP CLIまたはツールにプロキシコールを行うために、valet phpcomposer、およびwhich-phpコマンドを使用できます:

valet php
valet composer
valet which-php

あなたの孤立したサイトとそれらのPHPバージョンのリストを表示するには、isolatedコマンドを実行してください:

valet isolated

サイトをValetのグローバルにインストールされたPHPバージョンに戻すには、サイトのルートディレクトリからunisolateコマンドを呼び出すことができます:

valet unisolate

サイトの共有

Valetには、ローカルサイトを世界と共有するためのコマンドが含まれており、モバイルデバイスでサイトをテストしたり、チームメンバーやクライアントと共有する簡単な方法を提供します。

デフォルトでは、ValetはngrokまたはExposeを使用してサイトを共有できます。サイトを共有する前に、share-toolコマンドを使用してValetの構成を更新し、ngrokまたはexposeを指定する必要があります:

valet share-tool ngrok

ツールを選択し、Homebrew(ngrokの場合)またはComposer(Exposeの場合)でインストールしていない場合、Valetは自動的にインストールするように促します。もちろん、両方のツールを共有する前に、ngrokまたはExposeアカウントに認証する必要があります。

サイトを共有するには、ターミナルでサイトのディレクトリに移動し、Valetのshareコマンドを実行します。一般公開可能なURLがクリップボードに配置され、直接ブラウザに貼り付けるか、チームと共有する準備ができています:

cd ~/Sites/laravel

valet share

サイトの共有を停止するには、Control + Cを押すことができます。

警告

カスタムDNSサーバー(1.1.1.1など)を使用している場合、ngrok共有が正しく機能しない場合があります。この場合は、Macのシステム設定を開き、ネットワーク設定に移動し、詳細設定を開き、DNSタブに移動して127.0.0.1を最初のDNSサーバーとして追加してください。

Ngrokを使用したサイトの共有

ngrokを使用してサイトを共有するには、ngrokアカウントを作成し、認証トークンを設定する必要があります。認証トークンを取得したら、そのトークンでValetの構成を更新できます。

valet set-ngrok-token YOUR_TOKEN_HERE
注記

追加の ngrok パラメータを share コマンドに渡すことができます。例: valet share --region=eu。詳細については、ngrok ドキュメント を参照してください。

Expose を使用したサイトの共有

Expose を使用してサイトを共有するには、Expose アカウントを作成 し、認証トークンを使用して Expose に認証 する必要があります。

追加のコマンドラインパラメータに関する情報は、Expose ドキュメント を参照してください。

ローカルネットワークでのサイト共有

Valet は、開発マシンがインターネットからのセキュリティリスクにさらされないように、デフォルトで内部の 127.0.0.1 インターフェースへの着信トラフィックを制限しています。

ローカルネットワーク上の他のデバイスが、マシンの IP アドレス経由で Valet サイトにアクセスできるようにするには(例: 192.168.1.10/application.test)、該当サイトの Nginx 構成ファイルを手動で編集して、listen ディレクティブの 127.0.0.1: 接頭辞を削除する必要があります。ポート 80 および 443 の listen ディレクティブから 127.0.0.1: 接頭辞を削除してください。

プロジェクトに valet secure を実行していない場合、/usr/local/etc/nginx/valet/valet.conf ファイルを編集して、すべての非 HTTPS サイトのネットワークアクセスを開放できます。ただし、プロジェクトサイトを HTTPS 経由で提供している場合(サイトに valet secure を実行している場合)、~/.config/valet/Nginx/app-name.test ファイルを編集する必要があります。

Nginx 構成を更新したら、valet restart コマンドを実行して構成変更を適用してください。

サイト固有の環境変数

他のフレームワークを使用するアプリケーションの一部は、サーバー環境変数に依存する場合がありますが、これらの変数をプロジェクト内で設定する方法を提供していないことがあります。Valet を使用すると、プロジェクトのルートに .valet-env.php ファイルを追加することで、サイト固有の環境変数を設定できます。このファイルは、グローバル $_SERVER 配列に追加されるサイト / 環境変数のペアの配列を返す必要があります。

    <?php

return [
// Set $_SERVER['key'] to "value" for the laravel.test site...
'laravel' => [
'key' => 'value',
],

// Set $_SERVER['key'] to "value" for all sites...
'*' => [
'key' => 'value',
],
];

サービスのプロキシ

時々、Valetドメインをローカルマシン上の別のサービスにプロキシしたい場合があります。たとえば、Valetを実行する必要があるときにDockerで別のサイトも実行する必要があるかもしれません。ただし、ValetとDockerは同時にポート80にバインドすることができません。

これを解決するために、proxyコマンドを使用してプロキシを生成することができます。たとえば、http://elasticsearch.testからhttp://127.0.0.1:9200へのすべてのトラフィックをプロキシすることができます:

# Proxy over HTTP...
valet proxy elasticsearch http://127.0.0.1:9200

# Proxy over TLS + HTTP/2...
valet proxy elasticsearch http://127.0.0.1:9200 --secure

unproxyコマンドを使用してプロキシを削除することもできます:

valet unproxy elasticsearch

proxiesコマンドを使用して、プロキシされているすべてのサイト構成をリストアップすることができます:

valet proxies

カスタムValetドライバ

ValetがネイティブサポートしていないフレームワークやCMSで実行されているPHPアプリケーションを提供するために、独自のValet "driver"を作成することができます。Valetをインストールすると、~/.config/valet/Driversディレクトリが作成され、SampleValetDriver.phpファイルが含まれています。このファイルには、カスタムドライバを作成する方法を示すサンプルドライバの実装が含まれています。ドライバを作成するには、servesisStaticFilefrontControllerPathの3つのメソッドを実装するだけで十分です。

すべてのメソッドは、引数として$sitePath$siteName$uriの値を受け取ります。$sitePathは、マシン上で提供されているサイトの完全修飾パスであり、/Users/Lisa/Sites/my-projectなどです。$siteNameは、ドメインの"ホスト" / "サイト名"部分であり、my-projectなどです。$uriは、受信リクエストURI(/foo/bar)です。

カスタムValetドライバを完成させたら、FrameworkValetDriver.phpの命名規則を使用して~/.config/valet/Driversディレクトリに配置します。たとえば、WordPressのカスタムValetドライバを作成している場合、ファイル名はWordPressValetDriver.phpである必要があります。

カスタムValetドライバが実装すべき各メソッドのサンプル実装を見てみましょう。

servesメソッド

serveメソッドは、リクエストを処理する必要がある場合にtrueを返すべきです。それ以外の場合はfalseを返すべきです。そのため、このメソッド内で、与えられた$sitePathがサーブしようとしているタイプのプロジェクトを含んでいるかどうかを判断する必要があります。

例えば、WordPressValetDriverを書いているとしましょう。servesメソッドは次のようになるかもしれません:

    /**
* Determine if the driver serves the request.
*/
public function serves(string $sitePath, string $siteName, string $uri): bool
{
return is_dir($sitePath.'/wp-admin');
}

isStaticFileメソッド

isStaticFileは、リクエストが画像やスタイルシートなどの「静的」ファイルかどうかを判断すべきです。ファイルが静的である場合、メソッドはディスク上の静的ファイルへの完全修飾パスを返すべきです。リクエストが静的ファイルでない場合はfalseを返すべきです:

    /**
* Determine if the incoming request is for a static file.
*
* @return string|false
*/
public function isStaticFile(string $sitePath, string $siteName, string $uri)
{
if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) {
return $staticFilePath;
}

return false;
}

警告

isStaticFileメソッドは、servesメソッドがリクエストに対してtrueを返し、リクエストURIが/でない場合にのみ呼び出されます。

frontControllerPathメソッド

frontControllerPathメソッドは、アプリケーションの「フロントコントローラー」への完全修飾パスを返すべきです。通常は「index.php」ファイルなどです:

    /**
* Get the fully resolved path to the application's front controller.
*/
public function frontControllerPath(string $sitePath, string $siteName, string $uri): string
{
return $sitePath.'/public/index.php';
}

ローカルドライバー

単一のアプリケーション用にカスタムValetドライバーを定義したい場合は、アプリケーションのルートディレクトリにLocalValetDriver.phpファイルを作成してください。カスタムドライバーは、基本のValetDriverクラスを拡張するか、LaravelValetDriverなどの既存のアプリケーション固有のドライバーを拡張することができます:

    use Valet\Drivers\LaravelValetDriver;

class LocalValetDriver extends LaravelValetDriver
{
/**
* Determine if the driver serves the request.
*/
public function serves(string $sitePath, string $siteName, string $uri): bool
{
return true;
}

/**
* Get the fully resolved path to the application's front controller.
*/
public function frontControllerPath(string $sitePath, string $siteName, string $uri): string
{
return $sitePath.'/public_html/index.php';
}
}

その他のValetコマンド

コマンド説明
valet listすべてのValetコマンドのリストを表示します。
valet diagnoseValetのデバッグを支援する診断情報を出力します。
valet directory-listingディレクトリリストの動作を決定します。デフォルトは「オフ」で、ディレクトリに対して404ページを表示します。
valet forget「駐車中」のディレクトリからこのコマンドを実行して、それを駐車中のディレクトリリストから削除します。
valet logValetのサービスによって書き込まれたログのリストを表示します。
valet pathsすべての「駐車中」パスを表示します。
valet restartValetデーモンを再起動します。
valet startValetデーモンを起動します。
valet stopValetデーモンを停止します。
valet trustBrewとValetのsudoersファイルを追加して、パスワードの入力を求めずにValetコマンドを実行できるようにします。
valet uninstallValetをアンインストールします:手動でアンインストールするための手順を表示します。Valetのリソースを徹底的に削除するには--forceオプションを渡します。

Valetのディレクトリとファイル

Valet環境で問題を解決する際に役立つディレクトリとファイル情報を以下に示します:

~/.config/valet

Valetのすべての設定が含まれています。このディレクトリのバックアップを保持することをお勧めします。

~/.config/valet/dnsmasq.d/

このディレクトリにはDNSMasqの設定が含まれています。

~/.config/valet/Drivers/

このディレクトリにはValetのドライバが含まれています。ドライバは特定のフレームワーク/CMSがどのように提供されるかを決定します。

~/.config/valet/Nginx/

このディレクトリにはValetのNginxサイトのすべての設定が含まれています。これらのファイルはinstallおよびsecureコマンドを実行すると再構築されます。

~/.config/valet/Sites/

このディレクトリにはリンクされたプロジェクトのすべてのシンボリックリンクが含まれています。

~/.config/valet/config.json

このファイルはValetのマスター設定ファイルです。

~/.config/valet/valet.sock

このファイルはValetのNginxインストールで使用されるPHP-FPMソケットです。PHPが正常に実行されている場合のみ存在します。

~/.config/valet/Log/fpm-php.www.log

このファイルはPHPエラーのユーザーログです。

~/.config/valet/Log/nginx-error.log

このファイルはNginxエラーのユーザーログです。

/usr/local/var/log/php-fpm.log

このファイルはPHP-FPMエラーのシステムログです。

/usr/local/var/log/nginx

このディレクトリにはNginxのアクセスログとエラーログが含まれています。

/usr/local/etc/php/X.X/conf.d

このディレクトリにはさまざまなPHP設定の*.iniファイルが含まれています。

/usr/local/etc/php/X.X/php-fpm.d/valet-fpm.conf

このファイルはPHP-FPMプールの設定ファイルです。

~/.composer/vendor/laravel/valet/cli/stubs/secure.valet.conf

このファイルはサイトのSSL証明書を構築するために使用されるデフォルトのNginx設定です。

ディスクアクセス

macOS 10.14以降、一部のファイルやディレクトリへのアクセスがデフォルトで制限されています。これらの制限には、Desktop、Documents、Downloadsディレクトリが含まれます。さらに、ネットワークボリュームやリムーバブルボリュームへのアクセスも制限されています。そのため、Valetはサイトフォルダがこれらの保護された場所の外にあることをお勧めします。

ただし、これらの場所のいずれかからサイトを提供する場合は、Nginxに「フルディスクアクセス」を与える必要があります。そうしないと、Nginxからサーバーエラーやその他の予測不可能な動作が発生する可能性があります、特に静的アセットを提供する際に。通常、macOSはこれらの場所へのNginxのフルアクセスを自動的に許可するように促します。または、System Preferences > Security & Privacy > Privacy から手動で行うこともできます。次に、メインウィンドウペイン内の nginx エントリを有効にしてください。