Laravel 5.2 Laravel Valet

イントロダクション

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

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

言い換えれば、大体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 php70brew install mariadbのようなコマンドを実行すれば、簡単にインストールできます。Valetは最低限度のリソースを使い、とても早いローカル開発環境を提供します。そのため、PHPとMySQLだけが必要で、完全な仮想開発環境は必要ない場合にぴったりです。

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

インストール

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

  • brew updateで最新バージョンのHomebrewをインストール、もしくはアップデートしてください。
  • Homebrewを使い、brew install homebrew/php/php70でPHP7.0をインストールしてください。
  • 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 startvalet installを再び実行する必要は永久にありません。

他のドメインの使用

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

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

データベース

データベースを使いたい場合、コマンドラインでbrew install mariadbを実行し、MariaDBを試してください。127.0.0.1でデータベースに接続し、ユーザ名はroot、パスワードは空文字列です。

リリースノート

Version 1.1.5

Valetの1.1.5リリースでは、内部的に多く改善しました。

アップグレード方法

composer global updateでValetをアップグレードした後に、ターミナルでvalet installコマンドを実行してください。

Version 1.1.0

Valet1.1.0リリースでは、数多く改善が行われました。HTTPリクエストを処理するPHP組み込みサーバはCaddyに置き換えました。Caddyの導入により、多くの機能が向上し、組み込みPHPサーバにブロックされることなく、Valetサイトが他のValetサイトへHTTPリクエスト送れるようになりました。

アップグレード方法

Valetをcomposer global updateでアップデートした後に、新しいCaddyデーモンファイルをシステム上に作成するため、ターミナルでvalet installコマンドを実行してください。

サイト動作

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

parkコマンド

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

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

linkコマンド

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

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

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

TLSによる安全なサイト

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を入力し、プロセスを終了してください。

ログの確認

全サイトの全ログをターミナルに流したい場合は、valet logsコマンドを実行してください。新しいログが発生した時点で、ターミナルに表示されます。これはターミナルで途切れることなく、全ログファイルを一箇所で確認するために良い手段です。

カスタムValetドライバ

Valetでサポートされていない、他のフレームワークやCMSでPHPアプリケーションを実行するには、独自のValet「ドライバ」を書く必要があります。Valetをインストールすると作成される、~/.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命名規則をつかい、~/.valet/Driversディレクトリ下に設置してください。たとえば、WordPress用にカスタムValetドライバを書いたら、ファイル名はWordPressValetDriver.phpになります。

カスタムValetドライバで実装する各メソッドのサンプルコードを見ていきましょう。

servesメソッド

servesメソッドは、そのドライバがやって来たリクエストを処理すべき場合に、trueを返してください。それ以外の場合はfalseを返してください。そのためには、メソッドの中で、渡された$sitePathの内容が、動作させようとするプロジェクトタイプを含んでいるかを判定します。

では擬似サンプルとして、WordPressValetDriverを書いてみましょう。servesメソッドは以下のようになります。

/**
 * このドライバでリクエストを処理するか決める
 *
 * @param  string  $sitePath
 * @param  string  $siteName
 * @param  string  $uri
 * @return void
 */
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;
}

注意: 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コマンド

コマンド 説明
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)へ移動

その他

?

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