Laravel 5.7 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.3をインストールしてください。
  • 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

アップグレード

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

Valet2.0へのアップグレード

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

アップグレードできたら、parklinkをやり直してください。

サイト動作

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がインストールしてあれば、他のソフトウェアは必要ありません。

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

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

カスタム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';
    }
}

その他のValetコマンド

コマンド 説明
valet forget "park"された(サイト検索の親ディレクトリとして登録されたJ)ディレクトリでこのコマンドを実行し、サイト検索対象のディレクトリリストから外します。
valet paths "park"されたすべてのパスを表示します。
valet restart Valetデーモンをリスタートします。
valet start Valetデーモンをスタートします。
valet stop Valetデーモンを停止します。
valet uninstall Valetデーモンを完全にアンインストールします。

ドキュメント章別ページ

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュを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)へ移動

その他

?

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