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 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
ドメインの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 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
コマンドを使用できます。たとえば、サイトが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-php
isolated
コマンドを実行して、分離されたすべてのサイトとその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_HERE
valet 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 --secure
unproxy
コマンドを使用してプロキシを削除できます。
valet unproxy elasticsearch
proxies
コマンドを使用して、プロキシされているすべてのサイト構成を一覧表示できます。
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
エントリを有効にします。