Laravel 9.x Laravel Valet

イントロダクション

Laravel Valet(バレット:従者)は、macOSミニマリスト向けのLaravel開発環境です。Larave lValetは、マシンの起動時に常にバックグラウンドでNginxを実行するようにMacを設定します。次に、DnsMasqを使用して、Valetは*.testドメイン上のすべてのリクエストをプロキシし、ローカルマシンにインストールしているサイトへ転送します。

言い換えれば、Valetは、約7MBのRAMを使用する非常に高速なLaravel開発環境です。Valetは、SailHomesteadの完全な代替ではありませんが、極端に速度を好むとかRAMの量が限られているマシンで作業しているなど、柔軟な開発環境の基本が必要な場合は優れた代替手段になるでしょう。

Valetは以下をサポートしていますが、これらに限定されません。

独自のカスタムドライバでValetを拡張できます。

インストール

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

開始するには、最初にupdateコマンドを使用してHomebrewが最新であることを確認する必要があります。

brew update

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

brew install php

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

composer global require laravel/valet

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

valet install

Valetをインストールしたら、pingfoobar.testなどのコマンドを使用してターミナルの*.testドメインにpingを実行してみてください。Valetが正しくインストールされている場合、このドメインが127.0.0.1でレスポンスしているのがわかります。

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

PHPバージョン

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

valet use php@7.2

valet use php

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

php@7.2

このファイルを作成したら、valet useコマンドを実行してください。コマンドはファイルを読み、サイトで優先するPHPバージョンを決めます。

Warning!! 複数のPHPバージョンをインストールしている場合でも、Valetは一度に一つのPHPバージョンのみを提供します。

データベース

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

インストレーションのリセット

Valetインストレーションが正しく動作せずに問題が起きた時は、composer global require laravel/valetの後に、valet installを実行してください。これによりインストール済みのValetがリセットされ、さまざまな問題が解決されます。稀にValetを「ハードリセット」する必要がある場合もあり、その場合はvalet installの前にvalet uninstall --forceを実行してください。

Valetのアップグレード

ターミナルでcomposer global require laravel/valetコマンドを実行すると、Valetのインストールを更新できます。アップグレード後、valet installコマンドを実行して、Valetが必要に応じて設定ファイルへ追加のアップグレードを行うことを推奨します。

サイト動作

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

parkコマンド

parkコマンドは、アプリケーションを含むマシン上のディレクトリを登録します。ディレクトリがValetで「パーク」されると、そのディレクトリ内のすべてのディレクトリにWebブラウザのhttp://<directory-name>.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を設定したいことがあるかもしれません。これを実現するには、デフォルトサイトとして機能するサイトへのパスを含む ~/.config/valet/config.json設定ファイルへdefaultオプションを追加します。

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

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

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

cd ~/Sites/example-site

valet isolate php@8.0

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

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

便利なように、valet phpcomposerwhich-phpコマンドはプロキシされ、サイトのPHPバージョンに応じて適切な PHP CLIやツールが呼び出されます。

valet php
valet composer
valet which-php

個別のサイトとPHPバージョンの全一覧を表示するには、isolatedコマンドを実行してください。

valet isolated

サイトのPHPをValetのグローバルインストールしたPHPバージョンに戻すには、サイトのルートディレクトリで、unisolateコマンドを実行します。

valet unisolate

サイト共有

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

Ngrokを使用した公開

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

cd ~/Sites/laravel

valet share

サイトの共有を停止するには、Control+Cキーを押してください。Ngrokを使ってサイトを共有するには、Ngrok アカウントの作成認証トークンの設定が必要です。

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

Exposeによりサイトを共有する

Exposeがインストールされている場合は、ターミナルのサイトのディレクトリに移動して「expose」コマンドを実行することで、サイトを共有できます。サポートされている追加のコマンドラインパラメーターについては、Exposeのドキュメントを参照してください。サイトを共有した後、Exposeは他のデバイスまたはチームメンバー間で使用できる共有可能なURLを表示します。

cd ~/Sites/laravel

expose

サイトの共有を停止するには、Control+Cを押してください。

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

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

ローカルネットワーク上の他のデバイスが自分のマシンのIPアドレス(例:192.168.1.1.10/application.test)を介して自分のマシン上のValetサイトにアクセスできるようにしたい場合は、そのサイトの適切なNginx設定ファイルを手作業で編集してlistenディレクティブの制限を取り除く必要があります。ポート80と443のlistenディレクティブのプレフィックス127.0.0.0.1:を削除する必要があります。

プロジェクトでvalet secureを実行していない場合は、/usr/local/etc/nginx/valet/valet.confファイルを編集し、HTTPSではないサイトへのネットワークアクセスを開けます。あるサイトに対しvalet secureを実行することで、HTTPSにてプロジェクトサイトを動かしている場合は、~/.config/valet/Nginx/app-name.testファイルを編集する必要があります。

Nginx設定を更新したら、設定の変更を反映するためにvalet restartコマンドを実行してください。

サイト限定環境変数

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

<?php

return [
    // laravel.testサイトの$_SERVER['key']を"value"へ設定
    'laravel' => [
        'key' => 'value',
    ],

    // すべてのサイトで$_SERVER['key']を"value"へ設定
    '*' => [
        '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「ドライバ」を作成して、ValetがネイティブにサポートしていないフレームワークやCMSで実行するPHPアプリケーションを提供できます。Valetをインストールすると、SampleValetDriver.phpファイルを含む〜/.config/valet/Driversディレクトリが作成されます。このファイルには、カスタムドライバの作成方法を示すサンプルドライバ実装が含まれています。ドライバを作成するには、servesisStaticFile、および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用のカスタムバレットドライバを作成している場合、ファイル名は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;
}

Warning!! 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などの既存のアプリケーション固有のドライバを拡張する場合があります。

use Valet\Drivers\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コマンド

コマンド 説明
valet list 全Valetコマンドの一覧を表示します。
valet forget "park"された(サイト検索の親ディレクトリとして登録されたJ)ディレクトリでこのコマンドを実行し、サイト検索対象のディレクトリリストから外します。
valet log Valetサービスにより書き込まれたログリストを表示します。
valet paths "park"されたすべてのパスを表示します。
valet restart Valetデーモンをリスタートします。
valet start Valetデーモンをスタートします。
valet stop Valetデーモンを停止します。
valet trust Valetコマンド実行でパスワード入力をしなくて済むように、BrewとValetへsudoersファイルを追加します。
valet uninstall Valetをアンインストールします。手作業で削除する場合のインストラクションを表示します。--forceパラメータを指定した場合は、Valetすべてを強制的に削除します。

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

Valet環境の問題のトラブルシューティングを行う際に、次のディレクトリとファイルの情報が役立つでしょう。

~/.config/valet

Valetのすべての設定が含まれます。定期的にこのディレクトリをバックアップすることを推奨します。

~/.config/valet/dnsmasq.d/

このディレクトリは、DNSMasq設定を保存しています。

~/.config/valet/Drivers/

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

~/.config/valet/Extensions/

このディレクトリは、カスタムのValet拡張機能/コマンドを保存します。

~/.config/valet/Nginx/

このディレクトリは、ValetのNginxサイト設定をすべて保存しています。ディレクトリ内のファイルは、installsecureコマンドを実行すると再構築されます。

~/.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 エントリを有効にします。

ドキュメント章別ページ

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる