- はじめに
- インストール
- Valet のアップグレード
- サイトの提供
- サイトの共有
- ローカルネットワーク上でのサイトの共有
- サイト固有の環境変数
- サービスのプロキシ
- カスタム Valet ドライバー
- ローカルドライバー
- その他の Valet コマンド
- Valet ディレクトリとファイル
- ~/.config/valet
- ~/.config/valet/dnsmasq.d/
- ~/.config/valet/Drivers/
- ~/.config/valet/Nginx/
- ~/.config/valet/Sites/
- ~/.config/valet/config.json
- ~/.config/valet/valet.sock
- ~/.config/valet/Log/fpm-php.www.log
- ~/.config/valet/Log/nginx-error.log
- /usr/local/var/log/php-fpm.log
- /usr/local/var/log/nginx
- /usr/local/etc/php/X.X/conf.d
- /usr/local/etc/php/X.X/php-fpm.d/valet-fpm.conf
- ~/.composer/vendor/laravel/valet/cli/stubs/secure.valet.conf
- ディスクアクセス
はじめに
macOS または Windows で Laravel アプリケーションをさらに簡単に開発する方法を探していますか? Laravel Herd をチェックしてください。Herd には、Laravel 開発を開始するために必要なすべてが含まれており、Valet、PHP、および Composer が含まれています。
Laravel Valet は、macOS のミニマリスト向けの開発環境です。Laravel Valet は、マシンが起動するときに常に Nginx をバックグラウンドで実行するように Mac を設定します。その後、DnsMasq を使用して、Valet は *.test
ドメイン上のすべてのリクエストをローカルマシンにインストールされたサイトにポイントします。
言い換えれば、Valet は約 7 MB の RAM を使用する超高速の Laravel 開発環境です。Valet は Sail や Homestead の完全な代替品ではありませんが、柔軟な基本を望む場合や、極端な速度を好む場合、または限られた RAM を搭載したマシンで作業している場合には素晴らしい代替手段を提供します。
初期設定では、Valet のサポートには以下が含まれますが、これに限定されません:
- Laravel
- Bedrock
- CakePHP 3
- ConcreteCMS
- Contao
- Craft
- Drupal
- ExpressionEngine
- Jigsaw
- Joomla
- Katana
- Kirby
- Magento
- OctoberCMS
- Sculpin
- Slim
- Statamic
- 静的 HTML
- Symfony
- WordPress
- Zend
ただし、独自の カスタムドライバー で 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 がインストールされたら、ターミナルで *.test
ドメインに ping を送信してみてください。ping foobar.test
のようなコマンドを使用します。Valet が正しくインストールされていれば、このドメインが 127.0.0.1
で応答するのが見えるはずです。
Valet は、マシンが起動するたびに必要なサービスを自動的に開始します。
PHP バージョン
グローバル PHP バージョンを変更する代わりに、isolate
コマンド を介して Valet にサイトごとの PHP バージョンを使用するよう指示できます。
Valet は valet use php@version
コマンドを使用して PHP バージョンを切り替えることができます。指定された PHP バージョンがまだインストールされていない場合、Valet は Homebrew を介してそのバージョンをインストールします:
valet use
valet use php
プロジェクトのルートに .valetrc
ファイルを作成することもできます。.valetrc
ファイルには、サイトが使用する PHP バージョンを含める必要があります:
php=php@8.2
このファイルが作成されたら、valet use
コマンドを実行するだけで、コマンドはファイルを読み取ってサイトの優先 PHP バージョンを決定します。
Valet は、複数の PHP バージョンがインストールされていても、一度に 1 つの PHP バージョンのみを提供します。
データベース
アプリケーションにデータベースが必要な場合は、MySQL、PostgreSQL、および Redis を含む無料のオールインワンデータベース管理ツールである DBngin をチェックしてください。DBngin をインストールした後、127.0.0.1
で root
ユーザー名と空の文字列をパスワードとして使用してデータベースに接続できます。
インストールのリセット
Valet のインストールが正しく動作しない場合は、composer global require laravel/valet
コマンドを実行し、その後 valet install
を実行すると、インストールがリセットされ、さまざまな問題を解決できます。稀に、valet uninstall --force
を実行し、その後 valet install
を実行して Valet を「ハードリセット」する必要がある場合があります。
Valet のアップグレード
ターミナルで composer global require laravel/valet
コマンドを実行することで、Valet のインストールを更新できます。アップグレード後は、valet install
コマンドを実行して、Valet が必要に応じて構成ファイルに追加のアップグレードを行えるようにすることが良い習慣です。
Valet 4 へのアップグレード
Valet 3 から Valet 4 にアップグレードする場合は、Valet のインストールを適切にアップグレードするために以下の手順を実行してください:
- サイトの PHP バージョンをカスタマイズするために
.valetphprc
ファイルを追加した場合は、各.valetphprc
ファイルの名前を.valetrc
に変更します。次に、php=
を.valetrc
ファイルの既存の内容の前に追加します。 - カスタムドライバーを更新して、新しいドライバーシステムの名前空間、拡張子、型ヒント、および戻り型ヒントに一致させます。Valet の SampleValetDriver を例として参照できます。
PHP 7.1 - 7.4 を使用してサイトを提供している場合は、Homebrew を使用して PHP のバージョン 8.0 以上をインストールしていることを確認してください。Valet はこのバージョンを使用します。たとえそれがあなたの主要なリンクされたバージョンでなくても、いくつかのスクリプトを実行するために使用されます。
サイトの提供
Valet がインストールされたら、Laravel アプリケーションの提供を開始する準備が整いました。Valet は、アプリケーションを提供するための 2 つのコマンドを提供します: park
と link
。
park コマンド
park
コマンドは、アプリケーションを含むマシン上のディレクトリを登録します。ディレクトリが Valet で「パーク」されると、そのディレクトリ内のすべてのディレクトリに http://<directory-name>.test
でアクセスできるようになります:
cd ~/Sites
valet park
それがすべてです。今、あなたの「パーク」されたディレクトリ内に作成したアプリケーションは、http://<directory-name>.test
規約を使用して自動的に提供されます。したがって、パークされたディレクトリに「laravel」という名前のディレクトリが含まれている場合、そのディレクトリ内のアプリケーションには http://laravel.test
でアクセスできます。さらに、Valet は自動的にワイルドカードサブドメイン (http://foo.laravel.test
) を使用してサイトにアクセスできるようにします。
link コマンド
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
デフォルトサイトの提供
時々、未知の 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
サイト名がそれを含むディレクトリの名前と一致しない場合は、--site
オプションを使用してサイト名を指定できます:
valet isolate --site="site-name"
便利なことに、valet php
、composer
、および which-php
コマンドを使用して、サイトの構成された PHP バージョンに基づいて適切な PHP CLI またはツールへの呼び出しをプロキシできます:
valet php
valet composer
valet which-php
isolated
コマンドを実行して、すべての孤立したサイトとその PHP バージョンのリストを表示できます:
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 パラメータを共有コマンドに渡すことができます。たとえば valet share --region=eu
などです。詳細については、ngrok ドキュメント を参照してください。
Expose を介したサイトの共有
Expose を使用してサイトを共有するには、Expose アカウントを作成する と 認証トークンを介して Expose に認証する 必要があります。
追加のコマンドラインパラメータに関する情報は、Expose ドキュメント を参照してください。
ローカルネットワーク上でのサイトの共有
Valet は、デフォルトで内部 127.0.0.1
インターフェースへの受信トラフィックを制限しているため、開発マシンがインターネットからのセキュリティリスクにさらされないようにしています。
ローカルネットワーク上の他のデバイスが、マシンの IP アドレス (例: 192.168.1.10/application.test
) を介して Valet サイトにアクセスできるようにするには、そのサイトの適切な Nginx 構成ファイルを手動で編集して listen
ディレクティブの制限を削除する必要があります。ポート 80 および 443 の 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
へのすべてのトラフィックをプロキシできます:
# HTTP 経由のプロキシ...
valet proxy elasticsearch http://127.0.0.1:9200
# 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「ドライバー」を作成できます。Valet をインストールすると、~/.config/valet/Drivers
ディレクトリが作成され、SampleValetDriver.php
ファイルが含まれます。このファイルには、カスタムドライバーの書き方を示すサンプルドライバー実装が含まれています。ドライバーを書くには、serves
、isStaticFile
、frontControllerPath
の 3 つのメソッドを実装するだけで済みます。
すべてのメソッドは、$sitePath
、$siteName
、$uri
の値を引数として受け取ります。$sitePath
は、マシン上で提供されているサイトへの完全修飾パスです。たとえば /Users/Lisa/Sites/my-project
のようになります。$siteName
は、ドメインの「ホスト」/「サイト名」部分 (my-project
) です。$uri
は、受信リクエスト URI (/foo/bar
) です。
カスタム Valet ドライバーが完成したら、~/.config/valet/Drivers
ディレクトリに FrameworkValetDriver.php
命名規則を使用して配置します。たとえば、WordPress 用のカスタム Valet ドライバーを書く場合、ファイル名は WordPressValetDriver.php
である必要があります。
カスタム Valet ドライバーが実装すべき各メソッドのサンプル実装を見てみましょう。
serves メソッド
serves
メソッドは、ドライバーが受信リクエストを処理する必要がある場合 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 diagnose |
Valet のデバッグを支援するための診断を出力します。 |
valet directory-listing |
ディレクトリリストの動作を決定します。デフォルトは「オフ」で、ディレクトリに対して 404 ページをレンダリングします。 |
valet forget |
「パーク」されたディレクトリからこのコマンドを実行して、パークされたディレクトリリストから削除します。 |
valet log |
Valet のサービスによって書き込まれたログのリストを表示します。 |
valet paths |
すべての「パーク」されたパスを表示します。 |
valet restart |
Valet デーモンを再起動します。 |
valet start |
Valet デーモンを開始します。 |
valet stop |
Valet デーモンを停止します。 |
valet trust |
Brew と Valet のための sudoers ファイルを追加して、Valet コマンドをパスワードを求めずに実行できるようにします。 |
valet uninstall |
Valet をアンインストールします:手動アンインストールの手順を表示します。--force オプションを渡すと、Valet のすべてのリソースを強制的に削除します。 |
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 以降、一部のファイルおよびディレクトリへのアクセスはデフォルトで制限されています。これらの制限には、デスクトップ、ドキュメント、およびダウンロードディレクトリが含まれます。さらに、ネットワークボリュームおよびリムーバブルボリュームへのアクセスも制限されています。したがって、Valet はサイトフォルダーがこれらの保護された場所の外にあることを推奨します。
ただし、これらの場所のいずれかからサイトを提供したい場合は、Nginx に「フルディスクアクセス」を付与する必要があります。そうしないと、Nginx からサーバーエラーやその他の予測不可能な動作が発生する可能性があります。特に静的アセットを提供する場合は、特にそうです。通常、macOS は自動的に Nginx にこれらの場所へのフルアクセスを付与するように促します。または、System Preferences
> Security & Privacy
> Privacy
を手動で行い、Full Disk Access
を選択することもできます。次に、メインウィンドウペインで nginx
エントリを有効にします。