Laravel Valet
はじめに
macOSまたはWindowsでLaravelアプリケーションを開発するためのさらに簡単な方法をお探しですか?Laravel Herd をご覧ください。Herdには、Valet、PHP、Composerなど、Laravel開発を始めるために必要なものがすべて含まれています。
Laravel Valet は、macOSミニマリスト向けの開発環境です。Laravel Valetは、マシンの起動時に常にバックグラウンドでNginxを実行するようにMacを設定します。その後、DnsMasqを使用して、*.testドメイン上のすべてのリクエストをローカルマシンにインストールされたサイトにポイントするようにプロキシします。
つまり、Valetは、約7MBのRAMを使用する非常に高速なLaravel開発環境です。ValetはSailまたはHomesteadの完全な代替品ではありませんが、柔軟な基本機能を望む場合、極端な速度を好む場合、またはRAM容量の少ないマシンで作業する場合に優れた代替手段を提供します。
Valetは、標準で以下を含むものの、これらに限定されないサポートを提供しています。
ただし、独自のカスタムドライバーでValetを拡張できます。
インストール
ValetにはmacOSとHomebrewが必要です。インストールする前に、ApacheやNginxなどの他のプログラムがローカルマシンのポート80にバインドしていないことを確認してください。
開始するには、最初にupdateコマンドを使用してHomebrewが最新であることを確認する必要があります。
brew update次に、Homebrewを使用してPHPをインストールする必要があります。
brew install phpPHPをインストールした後、Composerパッケージマネージャーをインストールする準備が整います。さらに、$HOME/.composer/vendor/binディレクトリがシステムの「PATH」にあることを確認する必要があります。Composerがインストールされた後、Laravel ValetをグローバルComposerパッケージとしてインストールできます。
composer global require laravel/valet最後に、Valetのinstallコマンドを実行できます。これにより、ValetとDnsMasqが設定およびインストールされます。さらに、Valetが依存するデーモンは、システムの起動時に起動するように設定されます。
valet installValetがインストールされたら、ping foobar.testなどのコマンドを使用して、ターミナルで任意の*.testドメインのpingを試してください。Valetが正しくインストールされている場合、このドメインが127.0.0.1で応答していることがわかります。
Valetは、マシンが起動するたびに必要なサービスを自動的に開始します。
PHPバージョン
グローバルなPHPバージョンを変更する代わりに、isolate コマンドを使用して、サイトごとにPHPバージョンを使用するようにValetに指示できます。
Valetでは、valet use php@versionコマンドを使用してPHPバージョンを切り替えることができます。指定したPHPバージョンがまだインストールされていない場合、ValetはHomebrewを介してそのバージョンをインストールします。
 valet use phpプロジェクトのルートに.valetrcファイルを作成することもできます。.valetrcファイルには、サイトが使用するPHPバージョンを含める必要があります。
php=php@8.2このファイルが作成された後、valet useコマンドを実行するだけで、コマンドはファイルを読み取ってサイトの推奨されるPHPバージョンを決定します。
Valetは、複数のPHPバージョンがインストールされている場合でも、一度に1つのPHPバージョンしか提供しません。
データベース
アプリケーションにデータベースが必要な場合は、DBnginをご覧ください。これは、MySQL、PostgreSQL、Redisを含む無料のオールインワンのデータベース管理ツールです。DBnginがインストールされた後、rootユーザー名とパスワードに空の文字列を使用して、127.0.0.1でデータベースに接続できます。
インストールのリセット
Valetのインストールが正常に実行されない場合は、composer global require laravel/valetコマンドを実行してからvalet installを実行すると、インストールがリセットされ、さまざまな問題を解決できます。まれに、valet uninstall --forceを実行してからvalet installを実行することで、Valetを「ハードリセット」する必要がある場合があります。
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は一部のスクリプトの実行にこのバージョンを使用するため、プライマリにリンクされているバージョンでなくても、8.0以上のPHPバージョンをHomebrewを使用してインストールし続けてください。
サイトの提供
Valetがインストールされたら、Laravelアプリケーションの提供を開始する準備が整います。Valetは、アプリケーションを提供するための2つのコマンドを提供します。parkとlinkです。
"park"コマンド
parkコマンドは、アプリケーションを含むディレクトリをマシンに登録します。Valetでディレクトリを「駐車」すると、そのディレクトリ内のすべてのディレクトリに、ウェブブラウザからhttp://<ディレクトリ名>.testでアクセスできるようになります。
cd ~/Sites valet park以上です。これで、「駐車」したディレクトリ内に作成するアプリケーションはすべて、http://<ディレクトリ名>.testの規則を使用して自動的に提供されます。「駐車」したディレクトリに「laravel」という名前のディレクトリが含まれている場合、そのディレクトリ内のアプリケーションにはhttp://laravel.testでアクセスできます。さらに、Valetではワイルドカードサブドメイン(http://foo.laravel.test)を使用してサイトにアクセスすることも自動的に許可されます。
linkコマンド
linkコマンドを使用してLaravelアプリケーションを提供することもできます。このコマンドは、ディレクトリ全体ではなく、ディレクトリ内の単一のサイトを提供する場合に役立ちます。
cd ~/Sites/laravel valet linklinkコマンドを使用してアプリケーションをValetにリンクすると、ディレクトリ名を使用してアプリケーションにアクセスできます。したがって、上記の例でリンクされたサイトには、http://laravel.testでアクセスできます。さらに、Valetではワイルドカードサブドメイン(http://foo.laravel.test)を使用してサイトにアクセスすることも自動的に許可されます。
別のホスト名でアプリケーションを提供する場合は、ホスト名をlinkコマンドに渡すことができます。たとえば、次のコマンドを実行して、アプリケーションをhttp://application.testで利用できるようにすることができます。
cd ~/Sites/laravel valet link applicationもちろん、linkコマンドを使用してサブドメインでアプリケーションを提供することもできます。
valet link api.applicationlinksコマンドを実行して、リンクされているすべてのディレクトリのリストを表示できます。
valet linksunlinkコマンドを使用して、サイトのシンボリックリンクを削除できます。
cd ~/Sites/laravel valet unlinkTLSによるサイトの保護
デフォルトでは、ValetはHTTP経由でサイトを提供します。ただし、HTTP/2を使用して暗号化されたTLS経由でサイトを提供する場合は、secureコマンドを使用できます。たとえば、サイトがlaravel.testドメインでValetによって提供されている場合は、次のコマンドを実行してセキュリティ保護する必要があります。
valet secure laravelサイトのセキュリティ保護を解除し、プレーンHTTP経由でのトラフィック提供に戻すには、unsecureコマンドを使用します。secureコマンドと同様に、このコマンドはセキュリティ保護を解除するホスト名を受け入れます。
valet unsecure laravelデフォルトサイトの提供
不明なtestドメインにアクセスしたときに、404ではなく「デフォルト」サイトを提供するようにValetを構成する場合があります。これを実現するには、デフォルトサイトとして機能するサイトへのパスを含むdefaultオプションを~/.config/valet/config.json設定ファイルに追加します。
"default": "/Users/Sally/Sites/example-site",サイトごとのPHPバージョン
デフォルトでは、ValetはグローバルなPHPインストールを使用してサイトを提供します。ただし、さまざまなサイトで複数のPHPバージョンをサポートする必要がある場合は、isolateコマンドを使用して、特定のサイトが使用するPHPバージョンを指定できます。isolateコマンドは、現在の作業ディレクトリにあるサイトに対して指定されたPHPバージョンを使用するようにValetを構成します。
cd ~/Sites/example-site サイト名が、サイトを含むディレクトリ名と一致しない場合は、--siteオプションを使用してサイト名を指定できます。
便宜上、valet php、composer、which-phpコマンドを使用して、サイトの構成されたPHPバージョンに基づいて、適切なPHP CLIまたはツールへの呼び出しをプロキシできます。
valet phpvalet composervalet which-phpisolatedコマンドを実行して、分離されたすべてのサイトとそのPHPバージョンのリストを表示できます。
valet isolatedサイトをValetのグローバルにインストールされたPHPバージョンに戻すには、サイトのルートディレクトリからunisolateコマンドを呼び出すことができます。
valet unisolateサイトの共有
Valetには、ローカルサイトを世界と共有するためのコマンドが含まれており、モバイルデバイスでサイトをテストしたり、チームメンバーやクライアントと共有したりするための簡単な方法を提供します。
Valetは、すぐにngrokまたはExposeを使用してサイトの共有をサポートしています。サイトを共有する前に、share-toolコマンドを使用して、ngrokまたはexposeを指定してValet構成を更新する必要があります。
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」タブに移動し、最初のDNSサーバーとして127.0.0.1を追加します。
Ngrokを使用したサイトの共有
ngrokを使用してサイトを共有するには、ngrokアカウントを作成し、認証トークンを設定する必要があります。認証トークンを取得したら、そのトークンを使用してValet構成を更新できます。
valet set-ngrok-token YOUR_TOKEN_HEREvalet share --region=euなど、追加のngrokパラメータをshareコマンドに渡すことができます。詳細については、ngrokのドキュメントを参照してください。
Exposeを使用したサイトの共有
Exposeを使用してサイトを共有するには、Exposeアカウントを作成し、認証トークンを使用してExposeを認証する必要があります。
サポートされている追加のコマンドラインパラメータについては、Exposeのドキュメントを参照してください。
ローカルネットワークでのサイトの共有
Valetは、デフォルトで着信トラフィックを内部の127.0.0.1インターフェースに制限するため、開発マシンがインターネットからのセキュリティリスクにさらされることはありません。
ローカルネットワーク上の他のデバイスがマシンのIPアドレス(例:192.168.1.10/application.test)を介してマシンのValetサイトにアクセスできるようにする場合は、そのサイトの適切なNginx設定ファイルを編集して、listenディレクティブの制限を削除する必要があります。ポート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ドメインをプロキシする場合があります。たとえば、Dockerで別のサイトを実行しながらValetを実行する必要がある場合があります。ただし、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 --secureunproxyコマンドを使用してプロキシを削除できます。
valet unproxy elasticsearchproxiesコマンドを使用して、プロキシされているすべてのサイト構成を一覧表示できます。
valet proxiesカスタムValetドライバー
ValetにはネイティブにサポートされていないフレームワークまたはCMSで実行されているPHPアプリケーションを提供するための独自のValet「ドライバー」を作成できます。Valetをインストールすると、~/.config/valet/Driversディレクトリが作成され、SampleValetDriver.phpファイルが含まれます。このファイルには、カスタムドライバーの書き込み方法を示すサンプルドライバーの実装が含まれています。ドライバーを作成するには、serves、isStaticFile、frontControllerPathの3つのメソッドを実装するだけです。
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メソッド
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のアンインストール:手動アンインストールの手順を表示します。すべての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以降、一部のファイルとディレクトリへのアクセスはデフォルトで制限されています。これらの制限には、デスクトップ、ドキュメント、ダウンロードディレクトリが含まれます。さらに、ネットワークボリュームとリムーバブルボリュームへのアクセスも制限されています。そのため、Valetでは、サイトフォルダをこれらの保護された場所の外に配置することをお勧めします。
ただし、これらの場所のいずれかからサイトを提供する場合は、Nginxに「フルディスクアクセス」権限を与える必要があります。 そうしないと、特に静的アセットを提供する場合、Nginxからサーバーエラーやその他の予期しない動作が発生する可能性があります。通常、macOSは自動的にNginxにこれらの場所へのフルアクセスを許可するようプロンプトを表示します。または、システム環境設定 > セキュリティとプライバシー > プライバシーから手動で行うことができます。「フルディスクアクセス」を選択し、メインウィンドウペインで任意のnginxエントリを有効にします。