Laravel 6.x Laravel Valet

イントロダクション

Valet(ベレット:従者)はMacミニマニストのためのLaravel開発環境です。Vagrantも不要、/etc/hostsファイルも不要です。さらに、ローカルトンネルを使って、サイトを公開し、シェアすることもできます。ええ、私達はこういうのも好きなんですよね。

Laravel Valetはマシン起動時にバックグランドでNginxがいつも実行されるように、Macを設定します。そのため、DnsMasqを使用し、Valetは*.testドメインへの全リクエストを、ローカルマシンのインストール済みサイトへ向けるようにプロキシ動作します。

言い換えれば、大体7MBのRAMを使うとても早いLaravelの開発環境です。ValetはVagrantやHomesteadを完全に置き換えるものではありませんが柔軟な基礎、とくにスピード重視であるか、RAMが限られているマシンで動作させるのに素晴らしい代替になります。

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

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

ValetとHomestead

ご存知のように、ローカルのLaravel開発環境としてHomesteadも用意しています。HomesteadとValetは利用者の目的とローカルの開発についてのアプローチが異なります。Homesteadは自動的にNginx設定を行うUbuntuの完全な仮想マシンを提供しています。HomesteadはLinux開発環境の完全な仮想化を行いたい、もしくはWindows/Linux上で動作させたい場合、素晴らしい選択肢になります。

ValetはMac上でのみサポートされ、PHPとデータベースサーバを直接ローカルマシンへインストールする必要があります。Homebrewを利用し、brew install phpbrew install mysqlのようなコマンドを実行すれば、簡単にインストールできます。Valetは最低限度のリソースを使い、とても早いローカル開発環境を提供します。そのため、PHPとMySQLだけが必要で、完全な仮想開発環境は必要ない場合にぴったりです。

ValetとHomesteadのどちらを選んでも、Laravelの開発環境に向け設定されており、良い選択になるでしょう。どちらを選ぶかは、自分の好みとチームの必要により決まるでしょう。

インストール

ValetにはMacオペレーティングシステムとHomebrewが必要です。インストールする前に、ApacheやNginxのようなローカルマシンの80番ポートへバインドするプログラムがないことを確認してください。

  • brew updateで最新バージョンのHomebrewをインストール、もしくはアップデートしてください。
  • Homebrewを使い、brew install phpでPHP7.4をインストールしてください。
  • Composerをインストールしてください。
  • composer global require laravel/valetでValetをインストールしてください。~/.composer/vendor/binディレクトリが実行パスに含まれていることを確認してください。
  • valet installコマンドを実行してください。これによりValetとDnsMasqがインストール/設定され、システム起動時に起動されるValetのデーモンが登録されます。

Valetがインストールできたら、ping foobar.testのようなコマンドで、ターミナルから*.testドメインに対してpingを実行してください。Valetが正しくインストールされていれば、このドメインは127.0.0.1へ対応していることがわかるでしょう。

Valetはマシンが起動されると、毎回デーモンを自動的に起動します。Valetが完全にインストールされていれば、valet startvalet installを再び実行する必要は永久にありません。

他のドメインの使用

デフォルトでValetは.test TLDをプロジェクトのドメインとして処理します。他のドメインを使いたい場合、valet tld tld-nameコマンドを使ってください。

たとえば、.testの代わりに.appを使用したければ、valet tld appと実行します。Valetは*.appをプロジェクトのために自動的に使い始めます。

データベース

データベースを使いたい場合、コマンドラインでbrew install mysql@5.7を実行し、MySQLを試してください。MySQLがインストールできたら、brew services start mysql@5.7コマンドを使い、起動します。127.0.0.1でデータベースに接続し、ユーザー名はroot、パスワードは空文字列です。

PHPバージョン

Valetではvalet use php@versionコマンドにより、PHPバージョンを変更できます。指定されたPHPバージョンがインストールされていない場合、ValetはBrewによりインストールします。

valet use php@7.2

valet use php

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

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

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

アップグレード

Valetインストールをアップデートするには、ターミナルでcomposer global updateコマンドを実行します。アップグレードできたら、valet installコマンドを実行し、必要な設定ファイルの追加アップグレードを行うのは、グッドプラクティスです。

サイト動作

Valetがインストールできたら、サイトを動作させる準備ができました。Laravelサイトを動作させるために役立つ、parklinkの2コマンドを用意しています。

parkコマンド

  • mkdir ~/Sitesのように、Mac上に新しいディレクトリを作成ししてください。次にcd ~/Sitesし、valet parkを実行します。このコマンドはカレントワーキングディレクトリをValetがサイトを探す親パスとして登録します。
  • 次に、このディレクトリ内で、新しいLaravelサイトを作成します。laravel new blog
  • http://blog.testをブラウザで開きます。

必要なのはこれだけです。 これで"parked"ディレクトリ内に作成されたLaravelプロジェクトは、http://フォルダ名.test規約に従い、自動的に動作します。

linkコマンド

linkコマンドはparkのように親ディレクトリを指定するのではなく、各ディレクトリ中で一つのサイトを動作させるのに便利です。

  • ターミナルでプロジェクトのディレクトリへ移動し、valet link アプリケーション名を実行します。Valetはカレントワーキングディレクトリから~/.config/valet/Sites内へシンボリックリンクを張ります。
  • linkコマンド実行後、ブラウザでhttp://アプリケーション名.testにアクセスできます。

リンクされた全ディレクトリをリストするには、valet linksコマンドを実行してください。シンボリックリンクを外すときは、valet unlink app-nameを使います。

Tip!! 複数の(サブ)ドメインで同じプロジェクトを動かすために、valet linkを使用できます。サブドメインや他のドメインをプロジェクトに追加するためには、プロジェクトフォルダからvalet link subdomain.app-nameを実行します。

TLSを使ったサイト安全化

Valetはデフォルトで通常のHTTP通信で接続します。しかし、HTTP/2を使った暗号化されたTLSで通信したい場合は、secureコマンドを使ってください。たとえば、laravel.testドメインでValetによりサイトが動作している場合、以下のコマンドを実行することで安全な通信を行います。

valet secure laravel

サイトを「安全でない」状態へ戻し、通常のHTTP通信を使いたい場合は、unsecureコマンドです。secureコマンドと同様に、セキュアな通信を辞めたいホスト名を指定します。

valet unsecure laravel

サイトの共有

Valetはローカルサイトをモバイルでテストしたり、チームメンバーや顧客と共有したりするため、世界に公開するコマンドも用意しています。Valetがインストールしてあれば、他のソフトウェアは必要ありません。

Ngrokを使用した公開

サイトを共有するには、ターミナルでサイトのディレクトリに移動し、valet shareコマンドを実行します。公開用のURLはクリップボードにコピーされますので、ブラウザに直接ペーストしてください。これだけでブラウザで閲覧したり、チームでシェアできます。

サイトの共有を中止する場合は、Control + Cでプロセスをキャンセルしてください。

Tip!! 共有コマンドには、valet share --region=euのようなオプションのパラメータを渡せます。詳しい情報は、ngrokのドキュメントをご覧ください。

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

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

たとえば、192.168.1.10/app-name.testのようにIPアドレスにより、あなたのマシン上のValetサイトへローカルネットワーク上の他のデバイスからのアクセスを許す必要があるとしましょう。80ポートと443ポートへ向けての127.0.0.1:プレフィックスを削除することで、listenディレクティブの制限を解除するために、適切なNginx設定ファイルを編集する必要があります、

プロジェクトで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ファイルを追加することで、サイト限定の環境変数を設定できます。

<?php

// foo.testサイトのために、$_SERVER['key']へ"value"をセットする
return [
    'foo' => [
        'key' => 'value',
    ],
];

// 全サイトのために、$_SERVER['key']へ"value"をセットする
return [
    '*' => [
        'key' => 'value',
    ],
];

デフォルトサイトの提供

場合により、未知のテストドメインを訪れた場合は404とする代わりに、デフォルト("default")サイトをValetに提供してもらいたいこともあります。これを実現するには、~/.config/valet/config.json設定ファルでデフォルトサイトにしたいサイトへのパスをdefaultオプションとして追加します。

"default": "/Users/Sally/Sites/foo",

カスタムValetドライバ

Valetでサポートされていない、他のフレームワークやCMSでPHPアプリケーションを実行するには、独自のValet「ドライバ」を書く必要があります。Valetをインストールすると作成される、~/.config/valet/DriversディレクトリにSampleValetDriver.phpファイルが存在しています。このファイルは、カスタムドライバーをどのように書いたら良いかをデモンストレートするサンプルドライバの実装コードです。ドライバを書くために必要なservesisStaticFilefrontControllerPathの3メソッドを実装するだけです。

全3メソッドは$sitePath$siteName$uriを引数で受け取ります。$sitePathは、/Users/Lisa/Sites/my-projectのように、サイトプロジェクトへのフルパスです。$siteNameは"ホスト" / "サイト名"記法のドメイン(my-project)です。$uriはやって来たリクエストのURI(/foo/bar)です。

カスタムValetドライバを書き上げたら、フレームワークValetDriver.php命名規則をつかい、~/.config/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';
    }
}

PHP設定

インストールしたPHPをカスタマイズするための/usr/local/etc/php/7.X/conf.d/ディレクトリへ、PHP設定の.iniファイルを追加できます。設定を追加、もしくは更新したらvalet restart phpを実行してください。

PHPメモリ制限

Valetは、/usr/local/etc/php/7.X/conf.d/php-memory-limits.ini設定ファイルで最大メモリ制限とアップロードファイルの最大サイズをデフォルトとして指定しています。これはCLIとFPMのPHPプロセス両方に影響します。

PHP-FPMのPoolプロセス

ValetのPHP−FPM設定は、/usr/local/etc/php/7.X/php-fpm.d/valet-fpm.conf設定ファイルに含まれています。このファイルでPHPアプリケーションにより使用されるFPMサーバと子プロセスの数を増やすことができます。

その他の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ドライバが含まれます。
~/.config/valet/Extensions/ カスタムValet拡張/コマンドが含まれます。
~/.config/valet/Nginx/ Valetが生成したNginxサイト設定すべてが含まれます。生成済みファイルはinstallsecuretldコマンド実行時に再生成されます。
~/.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 サイト認証を構築するのに使用されるデフォルト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)へ移動

その他

?

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