このリポジトリはPHP Webアプリフレームワークである、LaravelのLTSバージョンである5.5の公式英文ドキュメントを日本語へ翻訳しています。
This project is maintained by okinaka
Valet(ベレット:従者)はMacミニマニストのためのLaravel開発環境です。Vagrantも不要、/etc/hosts
ファイルも不要です。更に、ローカルトンネルを使って、サイトを公開し、シェアすることもできます。ええ、私達はこういうのも好きなんですよね。
Laravel Valetはマシン起動時にバックグランドでNginxがいつも実行されるように、Macを設定します。そのため、DnsMasqを使用し、Valetは*.dev
ドメインへの全リクエストを、ローカルマシンへインストールしたサイトへ向けるようにプロキシ動作します。
言い換えれば、大体7MBのRAMを使う、とても早いLaravelの開発環境です。ValetはVagrantやHomesteadを完全に置き換えるものではありませんが、柔軟な基礎、特にスピード重視であるか、RAMが限られているマシンで動作させるのには、素晴らしい代替になります。
Valetは以下をサポートしていますが、これらに限定されません。
独自のカスタムドライバでValetを拡張できます。
ご存知のように、ローカルのLaravel開発環境としてHomesteadも用意しています。HomesteadとValetは利用者の目的とローカルの開発についてのアプローチが異なります。Homesteadは自動的にNginx設定を行うUbuntuの完全な仮想マシンを提供しています。HomesteadはLinux開発環境の完全な仮想化を行いたい、もしくはWindows/Linux上で動作させたい場合、素晴らしい選択肢になります。
ValetはMac上でのみサポートされ、PHPとデータベースサーバを直接ローカルマシンへインストールする必要があります。Homebrewを利用し、brew install php71
とbrew install mysql
のようなコマンドを実行すれば、簡単にインストールできます。Valetは最低限度のリソースを使い、とても早いローカル開発環境を提供します。そのため、PHPとMySQLだけが必要で、完全な仮想開発環境は必要ない場合にぴったりです。
ValetとHomesteadのどちらを選んでも、Laravelの開発環境に向け設定されており、良い選択になるでしょう。どちらを選ぶかは、自分の好みとチームの必要により決まるでしょう。
ValetにはMacオペレーティングシステムとHomebrewが必要です。インストールする前に、ApacheやNginxのようなローカルマシンの80番ポートへバインドするプログラムがないことを確認してください。
brew update
で最新バージョンのHomebrewをインストール、もしくはアップデートしてください。brew install homebrew/php/php71
でPHP7.1をインストールしてください。composer global require laravel/valet
でValetをインストールしてください。~/.composer/vendor/bin
ディレクトリが実行パスに含まれていることを確認してください。valet install
コマンドを実行してください。これによりValetとDnsMasqがインストール/設定され、システム起動時に起動されるValetのデーモンが登録されます。Valetがインストールできたら、ping foobar.dev
のようなコマンドで、ターミナルから*.dev
ドメインに対してpingを実行してください。Valetが正しくインストールされていれば、このドメインは127.0.0.1
へ対応していることが分かるでしょう。
Valetはマシンが起動されると、毎回デーモンを自動的に起動します。Valetが完全にインストールされていれば、valet start
やvalet install
を再び実行する必要は永久にありません。
デフォルトではValetは.dev
TLDをプロジェクトのドメインとして処理します。他のドメインを使いたい場合、valet domain tld-name
コマンドを使ってください。
たとえば、.dev
の代わりに.app
を使用したければ、valet domain app
と実行します。Valetは*.app
をプロジェクトのために自動的に使い始めます。
データベースを使いたい場合、コマンドラインでbrew install mysql
を実行し、MySQLを試してください。MySQLがインストールできたら、brew services start mysql
コマンドを使い、起動します。127.0.0.1
でデータベースに接続し、ユーザー名はroot
、パスワードは空文字列です。
Valetインストールをアップデートするには、ターミナルでcomposer global update
コマンドを実行します。アップグレードできたら、valet install
コマンドを実行し、必要な設定ファイルの追加アップグレードを行うのは、グッドプラクティスです。
Valet 2.0では、Valetの裏で動作するWebサーバをCaddyからNginxへ移動しました。このバージョン並行するは、以下のコマンドを実行し、既存のCaddyデーモンを停止し、アンインストールしてください。
valet stop
valet uninstall
次に、Valetの最新バージョンへアップグレードします。Valetをどのようにインストールしたかにより、通常GitかComposerを使用して行います。ValetをComposerによりインストールしている場合は、最新のメジャーバージョンにアップデートするために、以下のコマンドを実行してください。
composer global require laravel/valet
真新しいValetのソースコードがダウンロードできたら、install
コマンドを実行します。
valet install
valet restart
アップグレードできたら、park
とlink
をやり直してください。
Valetがインストールできたら、サイトを動作させる準備ができました。Laravelサイトを動作させるために役立つ、park
とlink
の2コマンドを用意しています。
mkdir ~/Sites
のように、Mac上に新しいディレクトリを作成ししてください。次にcd ~/Sites
し、valet park
を実行します。このコマンドはカレントワーキングディレクトリをValetがサイトを探す親パスとして登録します。laravel new blog
http://blog.dev
をブラウザで開きます。必要なのはこれだけです。これで”parked”ディレクトリ内で作成されたLaravelプロジェクトは、http://フォルダ名.dev
規約に従い、自動的に動作します。
link
コマンドはpark
のように親ディレクトリを指定するのではなく、各ディレクトリ中で一つのサイトを動作させるのに便利です。
valet link アプリケーション名
を実行します。Valetはカレントワーキングディレクトリから~/.valet/Sites
内へシンボリックリンクを張ります。link
コマンド実行後、ブラウザでhttp://アプリケーション名.dev
にアクセスできます。リンクされた全ディレクトリをリストするには、valet links
コマンドを実行してください。シンボリックリンクを外すときは、valet unlink app-name
を使います。
{tip} 複数の(サブ)ドメインで同じプロジェクトを動かすために、
valet link
を使用できます。サブドメインや他のドメインをプロジェクトに追加するためには、プロジェクトフォルダからvalet link subdomain.app-name
を実行します。
Valetはデフォルトで通常のHTTP通信で接続します。しかし、HTTP/2を使った暗号化されたTLSで通信したい場合は、secure
コマンドを使ってください。たとえば、laravel.del
ドメインでValetによりサイトが動作している場合、以下のコマンドを実行することで安全な通信を行います。
valet secure laravel
サイトを「安全でない」状態へ戻し、通常のHTTP通信を使いたい場合は、unsecure
コマンドです。secure
コマンドと同様に、セキュアな通信を辞めたいホスト名を指定します。
valet unsecure laravel
Valetはローカルサイトを世界と共有するコマンドも用意しています。Valetがインストールしてあれば、他のソフトウェアは必要ありません。
サイトを共有するには、ターミナルでサイトのディレクトリに移動し、valet share
コマンドを実行します。公開用のURLはクリップボードにコピーされますので、ブラウザに直接ペーストしてください。これだけです。
サイトの共有を止めるには、Control + C
を入力し、プロセスをキャンセルしてください。
{note}
valet secure
コマンドを使用してセキュアにしたサイトの共有は、現在valet share
はサポートしていません。
Valetでサポートされていない、他のフレームワークやCMSでPHPアプリケーションを実行するには、独自のValet「ドライバ」を書く必要があります。Valetをインストールすると作成される、~/.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ドライバを書き上げたら、フレームワークValetDriver.php
命名規則をつかい、~/.valet/Drivers
ディレクトリ下に設置してください。たとえば、WordPress用にカスタムValetドライバを書いたら、ファイル名はWordPressValetDriver.php
になります。
カスタムValetドライバで実装する各メソッドのサンプルコードを見ていきましょう。
serves
メソッドserves
メソッドは、そのドライバがやって来たリクエストを処理すべき場合に、true
を返してください。それ以外の場合はfalse
を返してください。そのためには、メソッドの中で、渡された$sitePath
の内容が、動作させようとするプロジェクトタイプを含んでいるかを判定します。
では擬似サンプルとして、WordPressValetDriver
を書いてみましょう。servesメソッドは以下のようになります。
/**
* このドライバでリクエストを処理するか決める
*
* @param string $sitePath
* @param string $siteName
* @param string $uri
* @return bool
*/
public function serves($sitePath, $siteName, $uri)
{
return is_dir($sitePath.'/wp-admin');
}
isStaticFile
メソッドisStaticFile
はリクエストが画像やスタイルシートのような「静的」なファイルであるかを判定します。ファイルが静的なものであれば、そのファイルが存在するディスク上のフルパスを返します。リクエストが静的ファイルでない場合は、false
を返します。
/**
* リクエストが静的なファイルであるかを判定する
*
* @param string $sitePath
* @param string $siteName
* @param string $uri
* @return string|false
*/
public function isStaticFile($sitePath, $siteName, $uri)
{
if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) {
return $staticFilePath;
}
return false;
}
{note}
isStaticFile
メソッドは、リクエストのURIが/
ではなく、serves
メソッドでtrue
が返された場合のみ呼びだされます。
frontControllerPath
メソッドfrontControllerPath
メソッドは、アプリケーションの「フロントコントローラ」への絶対パスを返します。通常は”index.php`ファイルか、似たようなファイルでしょう。
/**
* アプリケーションのフロントコントローラへの絶対パスの取得
*
* @param string $sitePath
* @param string $siteName
* @param string $uri
* @return string
*/
public function frontControllerPath($sitePath, $siteName, $uri)
{
return $sitePath.'/public/index.php';
}
一つのアプリケーションに対して、Valetのカスタムドライバを定義する場合は、アプリケーションのルートディレクトリにLocalValetDriver.php
を作成してください。カスタムドライバは、ベースのValetDriver
クラスか、LaravelValetDriver
のような、既存のアプリケーション専用のドライバを拡張します。
class LocalValetDriver extends LaravelValetDriver
{
/**
* リクエストに対し、このドライバを動作させるかを決める
*
* @param string $sitePath
* @param string $siteName
* @param string $uri
* @return bool
*/
public function serves($sitePath, $siteName, $uri)
{
return true;
}
/**
* アプリケーションのフロントコントローラに対する完全な解決済みパスを取得する
*
* @param string $sitePath
* @param string $siteName
* @param string $uri
* @return string
*/
public function frontControllerPath($sitePath, $siteName, $uri)
{
return $sitePath.'/public_html/index.php';
}
}
コマンド | 説明 |
---|---|
valet forget |
“park”された(サイト検索の親ディレクトリとして登録されたJ)ディレクトリでこのコマンドを実行し、サイト検索対象のディレクトリリストから外します。 |
valet paths |
“park”されたすべてのパスを表示します。 |
valet restart |
Valetデーモンをリスタートします。 |
valet start |
Valetデーモンをスタートします。 |
valet stop |
Valetデーモンを停止します。 |
valet uninstall |
Valetデーモンを完全にアンインストールします。 |