Laravel 6.x Laravel Homestead

イントロダクション

ローカル開発環境を含め、PHP開発全体を愉快なものにしようとLaravelは努力しています。Vagrantは、仮想マシンの管理と事前設定を行う、簡単でエレガントな手段を提供しています。

Laravel Homestead(入植農地、「ホームステード」)はパッケージを事前にインストールしたLaravel公式の"box"です。PHPやWebサーバ、その他のサーバソフトウェアをローカルマシンにインストールする必要なく、素晴らしい開発環境を準備できます。オペレーティングシステムでごちゃごちゃになる心配はもうありません! Vagrant boxは完全に使い捨てできます。何かの調子が悪くなれば壊して、数分のうちにそのboxを再生成できます!

HomesteadはWindowsやMac、Linuxシステム上で実行でき、NginxやPHP、MySQL、PostgreSQL、Redis、Memcached、Node、他にも素晴らしいLaravelアプリケーションを開発するために必要となるものすべてを含んでいます。

Note: Windowsを使用している場合は、ハードウェア仮想化(VT-x)を有効にする必要があります。通常、BIOSにより有効にできます。UEFI system上のHyper-Vを使用している場合は、VT-xへアクセスするため、さらにHyper-Vを無効にする必要があります。

含まれるソフトウェア

  • Ubuntu 18.04
  • Git
  • PHP 7.4
  • PHP 7.3
  • PHP 7.2
  • PHP 7.1
  • PHP 7.0
  • PHP 5.6
  • Nginx
  • MySQL
  • lmmによるMySQLとMariaDBデータベーススナップショット
  • Sqlite3
  • PostgreSQL
  • Composer
  • Node (Yarn、Bower、Bower、Grunt、Gulpを含む)
  • Redis
  • Memcached
  • Beanstalkd
  • Mailhog
  • avahi
  • ngrok
  • Xdebug
  • XHProf / Tideways / XHGui
  • wp-cli

オプションのソフトウェア

  • Apache
  • Blackfire
  • Cassandra
  • Chronograf
  • CouchDB
  • Crystal & Lucky Framework
  • Docker
  • Elasticsearch
  • Gearman
  • Go
  • Grafana
  • InfluxDB
  • MariaDB
  • MinIO
  • MongoDB
  • MySQL 8
  • Neo4j
  • Oh My Zsh
  • Open Resty
  • PM2
  • Python
  • RabbitMQ
  • Solr
  • Webdriver & Laravel Dusk Utilities

インストールと設定

最初の段階

Homestead環境を起動する前にVagrantと共に、VirtualBox 6.xか、VMWareParallelsHyper-Vをインストールする必要があります。全ソフトウェア共に簡単に使用できるビジュアルインストーラが、人気のあるオペレーティングシステムすべてに用意されています。

VMwareプロバイダを使用するには、VMware Fusion/WorkstationとVMware Vagrantプラグインを購入する必要があります。無料ではありませんが、VMwareが提供する共有フォルダは最初からよりスピーディーです。

Parallelsプロバイダを使用するには、Parallels Vagrantプラグインをインストールする必要があります。これは無料です。

Vagrantの制限のため、Hyper-Vプロバイダはすべてのネットワーク設定を無視します。

Homestead Vagrant Boxのインストール

VirtualBox/VMwareとVagrantをインストールし終えたら、laravel/homestead boxをVagrantへ追加するため次のコマンドを端末で実行する必要があります。boxをダウンロードし終えるまで、接続速度にもよりますが数分かかるでしょう。

vagrant box add laravel/homestead

このコマンドが失敗する場合、Vagrantを更新する必要があります。

Note: Homesteadは定期的に「アルファ版/ベータ版」Boxをテストのためリリースしています。これはvagrant box addコマンドと干渉してしまいます。vagrant box addの実行で問題が起きたら、vagrant upコマンドを実行し、Vagrantが仮想マシンを開始する時点で正しいBoxをダウンロードしてください。

Homesteadのインストール

ホストマシンへリポジトリをクローンし、Homesteadをインストールできます。自分の「ホーム」ディレクトリの中のHomesteadフォルダへリポジトリをクローンするのことは、自分のLaravel(とPHP)の全プロジェクトをホストしておくHomestead Boxを用意するのだと考えてください。

git clone https://github.com/laravel/homestead.git ~/Homestead

masterブランチは常に安定しているわけではないため、バージョンタグがついたHomesteadをチェックアウトすべきでしょう。最新の安定バージョンは、GitHubのリリースページで見つかります。もしくは、常に最新の安定バージョンを用意しているreleaseブランチをチェックアウトしてください。

cd ~/Homestead

git checkout release

Homesteadリポジトリをクローンしたら、Homestead.yaml設定ファイルを生成するために、bash init.shコマンドをHomesteadディレクトリで実行します。

// Mac / Linux...
bash init.sh

// Windows...
init.bat

Homestead設定

プロバイダの設定

Homestead.yamlファイル中のproviderキーは、Vagrantのプロバイダとして、virtualboxvmware_fusionvmware_workstationparallelshypervのどれを使用するかを指定します。使用するプロバイダの値を指定してください。

provider: virtualbox

共有フォルダの設定

Homestead.yamlファイルのfoldersプロパティには、Homestead環境と共有したい全フォルダがリストされています。これらのフォルダの中のファイルが変更されると、ローカルマシンとHomestead環境との間で同期されます。必要なだけ共有フォルダを設定してください!

folders:
    - map: ~/code/project1
      to: /home/vagrant/project1

Note: Windowsユーザーはパスを~/記法を使わず、代わりにたとえばC:\Users\user\Code\project1のように、プロジェクトのフルパスを使ってください。

~/codeフォルダへ常に個別プロジェクトをマップする代わりに、別々にマップすべきでしょう。仮想マシンへあるフォルダをマップすると、そのフォルダ中のすべてのファイルによるディスクIOをトラックし続けます。これにより、フォルダの中に莫大なファイルが存在する場合に、パフォーマンスの問題が起きます。

folders:
    - map: ~/code/project1
      to: /home/vagrant/project1

    - map: ~/code/project2
      to: /home/vagrant/project2

Note: Homesteadを使用する場合、.(カレントディレクトリ)をマウントしないでください。そうすると、Vagrantはカレントフォルダを/vagrantへマップしない状況が起き、オプションの機能が壊れ、プロビジョン中に予期せぬ結果が起きます。

NFSを有効にするには、同期するフォルダにフラグを指定するだけです。

folders:
    - map: ~/code/project1
      to: /home/vagrant/project1
      type: "nfs"

Note: Windows上でNFSを使用する場合は、vagrant-winnfsdプラグインのインストールを考慮してください。このプラグインは、Homestead下のファイルとディレクトリのユーザー/グループパーミッションを正しく維持します。

さらに、Vagrantの同期フォルダでサポートされている任意のオプションを、optionsキーの下に列挙して渡すことができます。

folders:
    - map: ~/code/project1
      to: /home/vagrant/project1
      type: "rsync"
      options:
          rsync__args: ["--verbose", "--archive", "--delete", "-zz"]
          rsync__exclude: ["node_modules"]

Nginxサイトの設定

Nginxには詳しくない? 問題ありません。sitesプロパティでHomestead環境上のフォルダと「ドメイン」を簡単にマップできます。サイト設定のサンプルは、Homestead.yamlファイルに含まれています。これも必要に応じ、Homestead環境へサイトを好きなだけ追加してください。便利に使えるよう、Homesteadは皆さんが作業するすべてのLaravelプロジェクトの仮想環境を提供します。

sites:
    - map: homestead.test
      to: /home/vagrant/project1/public

sitesプロパティをHomestead boxのプロビジョニング後に変更した場合、仮想マシンのNginx設定を更新するため、vagrant reload --provisionを再実行する必要があります。

Note: Homesteadのスクリプトは可能な限り冪等性を保つように組まれています。しかしながら、プロビジョニング中に問題が起きたら、vagrant destroy && vagrant upによりマシンを壊し、再構築してください。

ホスト名の解決

Homesteadでは自動的にホストを解決できるように、mDNSによりホスト名を公開しています。Homestead.yamlファイルで、hostname: homesteadとセットすれば、このホストはhomestead.localで使用できます。macOS、iOS、LinuxディストリビューションではmDNSがデフォルトでサポートされています。Windowsでは、Bonjour Print Services for Windowsをインストールする必要があります。

自動ホスト名を一番活用できるのは、Homesteadを「プロジェクトごと」にインストールした場合でしょう。もし、一つのHomesteadインスタンスで複数のサイトをホストしている場合は、hostsファイルにWebサイトの「ドメイン」を追加してください。hostsファイルはHomesteadへのリクエストをHomestead環境へ転送してくれます。MacとLinuxでは、/etc/hostsにこのファイルがあります。Windows環境では、C:\Windows\System32\drivers\etc\hostsです。次の行のように追加してください。

192.168.10.10  homestead.test

設定するIPアドレスにはHomestead.yamlファイルの中の値を確実に指定してください。ドメインをhostsファイルへ追加したら、Webブラウザーでサイトにアクセスできます。

http://homestead.test

Vagrant Boxの実行

Homestead.yamlのリンクを編集終えたら、Homesteadディレクトリでvagrant upコマンドを実行してください。Vagrantは仮想マシンを起動し、共有フォルダとNginxサイトを自動的に設定します。

仮想マシンを破壊するには、vagrant destroy --forceコマンドを使用します。

プロジェクトごとにインストール

Homesteadをグローバルにインストールし、全プロジェクトで同じHomestead Boxを共有する代わりに、Homesteadインスタンスを管理下のプロジェクトごとに設定することもできます。プロジェクトごとにHomesteadをインストールする利点は、Vagrantfileをプロジェクトに用意すれば、プロジェクトに参加している他の人達も、vagrant upで仕事にとりかかれることです。

Homesteadをプロジェクトに直接インストールするには、Composerを使います。

composer require laravel/homestead --dev

Homesteadがインストールできたら、VagrantfileHomestead.yamlファイルをプロジェクトルートへ生成するためにmakeコマンドを使ってください。makeコマンドはHomestead.yamlファイルのsitesfoldersディレクティブを自動的に設定します。

Mac / Linux:

php vendor/bin/homestead make

Windows:

vendor\bin\homestead make

次にvagrant upコマンドを端末で実行し、ブラウザでhttp://homestead.testのプロジェクトへアクセスしてください。自動ホスト名解決を使わない場合は、/etc/hostsファイルにhomestead.testか、自分で選んだドメインのエントリーを追加する必要があることを忘れないでください。

オプション機能のインストール

オプションのソフトウェアは、Homestead設定ファイルの"features"設定を用い、インストールします。ほとんどの機能は論理値により有効/無効を指定できます。いくつかの機能では複数のオプションができます。

features:
    - blackfire:
        server_id: "server_id"
        server_token: "server_value"
        client_id: "client_id"
        client_token: "client_value"
    - cassandra: true
    - chronograf: true
    - couchdb: true
    - crystal: true
    - docker: true
    - elasticsearch:
        version: 7
    - gearman: true
    - golang: true
    - grafana: true
    - influxdb: true
    - mariadb: true
    - minio: true
    - mongodb: true
    - mysql8: true
    - neo4j: true
    - ohmyzsh: true
    - openresty: true
    - pm2: true
    - python: true
    - rabbitmq: true
    - solr: true
    - webdriver: true

MariaDB

MariaDBを有効にすると、MySQLを削除してMariaDBをインストールします。MariaDBはMySQLのそのまま置き換え可能な代替機能として動作します。そのため、アプリケーションのデータベース設定では、mysqlデータベースドライバをそのまま使ってください。

MongoDB

デフォルト状態のMongoDBでは、データベースのユーザー名をhomestead、パスワードをsecretに設定します。

Elasticsearch

デフォルトのインストールでは、homesteadという名前のクラスタが作成されます。Elasticsearchにオペレーティングシステムのメモリの半分以上を割り当ててはいけません。つまり、Elasticsearchに割り当てる量の最低でも2倍以上のメモリをHomesteadマシンに割り当てます。

Tip!! 設定のカスタマイズについては、Elasticsearchのドキュメントを確認してください。

Neo4j

デフォルト状態のNeo4jでは、データベースのユーザー名をhomestead、パスワードをsecretとして設定します。Neo4jブラウザにアクセスするには、Webブラウザでhttp://homestead.test:7474にアクセスしてください。Neo4jクライアントのために、7687 (Bolt)、7474 (HTTP)、7473 (HTTPS)ポートが用意されています。

エイリアス

HomesteadでBashのエイリアスを指定するには、Homesteadディレクトリにある aliases ファイルを編集します。

alias c='clear'
alias ..='cd ..'

aliasesファイルを更新した後に、vagrant reload --provisionコマンドを使い、Homesteadを再度プロヴィジョニングする必要があります。これにより新しいエイリアスを使うことができます。

使用方法

Homesteadへグローバルにアクセスする

MacとLinuxシステムでは、Bashプロファイルへ簡単なBash関数を追加すれば実現できます。Windowsでは、PATHに「バッチ」ファイルを追加すれば、行えます。以下のスクリプトはシステムのどこからでも、どんなVagrantコマンドでも実行できるようにし、自動的にHomesteadをインストール済みのディレクトリで実行します。

Mac / Linux

function homestead() {
    ( cd ~/Homestead && vagrant $* )
}

エイリアス中の~/Homesteadパスを実際のHomesteadインストール場所を示すように調整してください。関数がインストールできたら、システムのどこからでもhomestead uphomestead sshのように実行できます。

Windows

以下の内容のhomestead.batバッチファイルを、マシン上に作成してください。

@echo off

set cwd=%cd%
set homesteadVagrant=C:\Homestead

cd /d %homesteadVagrant% && vagrant %*
cd /d %cwd%

set cwd=
set homesteadVagrant=

スクリプト例中のC:\Homesteadパスは、実際にHomesteadをインストールした場所を指すように調整してください。ファイルを作成したら、PATHへファイルの場所を追加します。これでhomestead uphomestead sshのようなコマンドをシステムのどこからでも実行できます。

SSH接続

Homesteadディレクトリでvagrant ssh端末コマンドを実行すれば、仮想マシンにSSHで接続できます。

しかし、Homesteadマシンには頻繁にSSHでアクセスする必要があると思いますから、ホストマシンから素早くHomestead boxへSSH接続できるように、上記の「関数」を追加することを検討してください。

データベースへの接続

homesteadのデータベースは、初めからMySQLとPostgreSQLの両方を設定できます。ホストマシンのデータベースクライアントから、MySQLかPostgreSQLデータベースへ接続するには、127.0.0.1のポート33060(MySQL)か、ポート54320(PostgreSQL)へ接続する必要があります。ユーザー名はhomestead、パスワードはsecretです。

Note: ホストマシンからデータベースへ接続するには、標準的ではないポートだけを使用してください。Laravelのデータベース設定ファイル中では、デフォルトの3306と5432ポートを使用することができます。Laravelは仮想マシンの内部で動作しているからです。

データベースのバックアップ

Homesteadでは、Vagrant boxを壊した時点で、自動的にデータベースをバックアップできます。この機能を利用するには、Vagrant2.1.0以上を使用しなくてはなりません。もしくは、古いバージョンのVagrantを使用している場合は、vagrant-triggersプラグインをインストールしてください。自動データベースバックアップを有効にするには、Homestead.yamlファイルに以下の行を追加してください。

backup: true

一度設定すれば、Homesteadはvagrant destroyコマンドが実行されると、データベースをmysql_backuppostgres_backupディレクトリへエクスポートします。これらのディレクトリは、Homesteadをクローンしたフォルダ中、もしくはプロジェクトごとのインストールを利用している場合は、プロジェクトルートの中で見つけられます。

データベーススナップショット

Homesteadでは、MySQLやMariaDBの状態をスナップショットし、Logical MySQL Managerを使いブランチ操作可能です。たとえば、複数のギガバイトデータベースに関わるサイトをイメージしてください。データベースをインポートし、スナップショットを取ります。何か操作し、ローカルにテスト状況を構築した後に、元の状態へ素早くリストアできるのです。

内部では、LVMのコピーオンライト(COW)サポートによる、簡単なスナップショット機能をLMMは使用しています。実践上これが意味するのは、テーブルのある一行を更新すると、その変更はディスクに書き込まれるだけであり、リストア時に大変な時間とディスクスペースを省略できるということです。

lmmはLVMを操作するため、rootで実行する必要があります。実行可能なコマンドを確認するには、Vagrant Box内でsudo lmmを実行してください。コマンドのワークフローは次のようになるでしょう。

  1. デフォルトのmaster lmmブランチへデータベースをインポートする。
  2. 無変更状態のデータベーススナップショットをsudo lmm branch prod-YYYY-MM-DDで保存する。
  3. データベースを変更する。
  4. sudo lmm merge prod-YYYY-MM-DDを実行し、すべての変更を元に戻す。
  5. sudo lmm delete <branch>で、不必要なブランチを削除する。

サイトの追加

Homestead環境をプロビジョニングし、実働した後に、LaravelアプリケーションをNginxサイトへ追加したいこともあるでしょう。希望するだけのLaravelアプリケーションを一つのHomestead環境上で実行できます。新しいサイトを追加するには、Homestead.yamlファイルへ追加します。

sites:
    - map: homestead.test
      to: /home/vagrant/project1/public
    - map: another.test
      to: /home/vagrant/project2/public

Vagrantが"hosts"ファイルを自動的に管理しない場合は、新しいサイトを追加する必要があります。

192.168.10.10  homestead.test
192.168.10.10  another.test

サイトを追加したら、vagrant reload --provisionコマンドをHomesteadディレクトリで実行します。

サイトタイプ

Laravelベースではないプロジェクトも簡単に実行できるようにするため、Homesteadはさまざまなタイプのサイトをサポートしています。たとえば、symfony2サイトタイプを使えば、HomesteadにSymfonyアプリケーションを簡単に追加できます。

sites:
    - map: symfony2.test
      to: /home/vagrant/my-symfony-project/web
      type: "symfony2"

指定できるサイトタイプはapacheapigilityexpressivelaravel(デフォルト)、proxysilverstripestatamicsymfony2symfony4zfです。

サイトパラメータ

paramsサイトディレクティブを使用し、Nginxのfastcgi_param値を追加できます。例として、値にBARを持つFOOパラメータを追加してみましょう。

sites:
    - map: homestead.test
      to: /home/vagrant/project1/public
      params:
          - key: FOO
            value: BAR

環境変数

グローバルな環境変数は、Homestead.yamlファイルで追加指定できます。

variables:
    - key: APP_ENV
      value: local
    - key: FOO
      value: bar

Homestead.yamlを変更したら、vagrant reload --provisionを実行し、再プロビジョンするのを忘れないでください。これにより全インストール済みPHPバージョンに対するPHP-FPM設定と、vagrantユーザーの環境も更新されます。

Cronスケジュール設定

schedule:run Artisanコマンドだけを毎分実行することにより、Cronジョブのスケジュールを簡単に行う方法をLaravelは提供しています。schedule:runコマンドはApp\Console\Kernelクラスの定義を調べ、どのジョブを実行すべきかを決定します。

Homesteadサイトでschedule:runコマンドを実行したい場合は、サイトを定義するときにscheduleオプションをtrueに設定してください。

sites:
    - map: homestead.test
      to: /home/vagrant/project1/public
      schedule: true

こうしたサイト用のCronジョブは、仮想マシンの/etc/cron.dフォルダの中に定義されます。

Mailhogの設定

Mailhogを使用すると、簡単に送信するメールを捉えることができ、受信者へ実際に届けなくとも内容を調べることができます。これを使用するには、.envファイルのメール設定を以下のように更新します。

MAIL_DRIVER=smtp
MAIL_HOST=localhost
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

Mailhogを設定したら、ダッシュボードへhttp://localhost:8025でアクセスできます。

Minioの設定

MinioはAmazon S3と互換性のあるAPIを持つ、オープンソースなオブジェクトストレージサーバです。Minioをインストールするには、Homestead.yaml機能のセクション中から以下の設定オプションを加えてください。

minio: true

デフォルトのMinioは、9600ポートで使用します。http://localhost:9600/を閲覧すると、Minioのコントロールパネルへアクセスできます。デフォルトアクセスキーはhomestead、デフォルトのシークレットキーはsecretkeyです。Minioへアクセスする場合、常にリージョンus-east-1を使用する必要があります。

Minioを使用するために、config/filesystems.php設定ファイルの中の、S3ディスク設定を調整する必要があります。ディスク設定へ、use_path_style_endpointオプションを追加し、同時にurlキーをendpointへ変更する必要があります。

's3' => [
    'driver' => 's3',
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION'),
    'bucket' => env('AWS_BUCKET'),
    'endpoint' => env('AWS_URL'),
    'use_path_style_endpoint' => true
]

最後に、.envファイルへ以下のオプションを確実に用意してください。

AWS_ACCESS_KEY_ID=homestead
AWS_SECRET_ACCESS_KEY=secretkey
AWS_DEFAULT_REGION=us-east-1
AWS_URL=http://localhost:9600

バケットをセットアップするには、Homestead設定ファイルにbucketsディレクティブを追加してください。

buckets:
    - name: your-bucket
      policy: public
    - name: your-private-bucket
      policy: none

サポートしているpolicyの値は、nonedownloaduploadpublicです。

ポート

以下のポートが、Homestead環境へポートフォワードされています。

  • SSH: 2222 → フォワード先 22
  • ngrok UI: 4040 → フォワード先 4040
  • HTTP: 8000 → フォワード先 80
  • HTTPS: 44300 → フォワード先 443
  • MySQL: 33060 → フォワード先 3306
  • PostgreSQL: 54320 → フォワード先 5432
  • MongoDB: 27017 → フォワード先 27017
  • Mailhog: 8025 → フォワード先 8025
  • Minio: 9600 → フォワード先 9600

追加のフォワードポート

ご希望ならば追加のポートをVagrant Boxへフォワードすることもできます。プロトコルを指定することもできます。

ports:
    - send: 50000
      to: 5000
    - send: 7777
      to: 777
      protocol: udp

環境の共有

共同作業者やクライアントと、現在作業中の内容を共有したい場合もあるでしょう。Vagrantはvagrant shareにより、これをサポートする方法が組み込み済みです。しかし、この方法はHomestead.yamlファイルに複数サイトを設定している場合には動作しません。

この問題を解決するため、Homesteadは独自のshareコマンドを持っています。使用を開始するには、vagrant sshによりHomesteadマシンとSSH接続し、share homestead.testを実行してください。これにより、Homestead.yaml設定ファイルのhomestead.testサイトが共有されます。homestead.testの代わりに他の設定済みサイトを指定できます。

share homestead.test

コマンド実行後、ログと共有サイトへアクセスするURLを含んだ、Ngrokスクリーンが現れます。カスタムリージョン、サブドメイン、その他のNgrok実行オプションをカスタマイズしたい場合は、shareコマンドへ追加してください。

share homestead.test -region=eu -subdomain=laravel

Note: Vagrantは本質的に安全なものではなく、shareコマンドによりインターネット上に自分の仮想マシンを晒すことになることを覚えておいてください。

複数のPHPバージョン

Homestead6から、同一仮想マシン上での複数PHPバージョンをサポートを開始しました。Homestead.yamlファイルで、特定のサイトでどのバージョンのPHPを使用するのかを指定できます。利用できるPHPバージョンは、"5.6"、"7.0"、"7.1"、"7.2"、"7.3"、"7.4(デフォルト)"です。

sites:
    - map: homestead.test
      to: /home/vagrant/project1/public
      php: "7.1"

さらに、コマンドラインではサポート済みPHPバージョンをすべて利用できます。

php5.6 artisan list
php7.0 artisan list
php7.1 artisan list
php7.2 artisan list
php7.3 artisan list
php7.4 artisan list

Homestead仮想マシンの中で、以下のコマンドを実行することにより、デフォルトCLIバージョンを変更することも可能です。

php56
php70
php71
php72
php73
php74

Webサービス

HomesteadはNginxをデフォルトのWebサーバとして利用しています。しかし、サイトタイプとしてapacheが指定されると、Apacheをインストールします。両方のWebサーバを一度にインストールすることもできますが、同時に両方を実行することはできません。flipシェルコマンドがWebサーバを切り替えるために用意されています。flipコマンドはどちらのWebサーバが実行中かを自動的に判断し、シャットダウンし、もう一方のWebサーバを起動します。このコマンドを実行するには、HomesteadへSSH接続し、コマンドをターミナルで実行してください。

flip

Mail

Homesteadは、デフォルトで1025ポートをリッスンする、Postfixメールトランスファーエージェントを用意しています。そのため、localhost1025ポートに対して、smtpメールドライバーを使用するように、アプリケーションへ指示できます。その結果、すべての送信メールはPostfixにより処理され、Mailhogにより補足されます。送信済みメールを確認するには、Webブラウザでhttp://localhost:8025を開いてください。

デバッグとプロファイリング

XdebugによるWebリクエストのデバッグ

HomesteadはXdebugを使用するステップデバッグをサポートしています。たとえば、ブラウザからWebページをロードし、実行中のコードのインスペクションと変更ができるようにPHPをIDEに接続します。

デフォルトでXdebugは実行されており、接続を待っています。CLIでXdebugを有効にする必要があれば、Vagrant boxの中でsudo phpenmod xdebugコマンドを実行してください。次に、IDEのインストラクションにしたがい、デバッギングを有効にします。最後に、ブラウザでXdebugを起動する拡張か、bookmarkletを設定してください。

Note: XdebugはPHPの実行を極端に遅くしてしまいます。Xdebugを無効にするには、Vagrant Boxでsudo phpdismod xdebugを実行し、FPMサービスを再起動します。

CLIアプリケーションのデバッグ

PHP CLIアプリケーションをデバッグするには、Vagrant Box内で、xphpシェルエイリアスを使用してください。

xphp path/to/script

Xdebugの自動スタート

Webサーバへのリクエストを生成する機能テストのデバッグの場合、デバッグを開始するためにカスタムヘッダやクッキーを付与するようにテストを変更するよりは、自動的に起動するほうが簡単です。Xdebugを自動的に起動するよう強制するには、Vagrant Boxの中で以下のように/etc/php/7.x/fpm/conf.d/20-xdebug.iniを変更してください。

; Homestead.yamlで別のIPアドレスのサブセットを指定している場合は、このアドレスを合わせてください
xdebug.remote_host = 192.168.10.1
xdebug.remote_autostart = 1

Blackfireによるアプリケーションプロファイリング

BlackfireはWebリクエストとCLIアプリケーションのプロファイリングと、パフォーマンスアサーションの記述を提供するSaaSサービスです。プロファイルデーターをコールグラフとタイムラインで表示するユーザーインターフェイスを提供しています。エンドユーザーにオーバーヘッドをかけずに、開発/ステージング/実働環境で使用できるように構築されています。コードとphp.iniに対するパフォーマンスと品質、安全性のチェックを提供しています。

Blackfire PlayerはBlackfireでプロファイルシナリオを書くために使用する、オープンソースのWebクローリング/テスト/スクラッピングアプリケーションです。

Blackfireを有効にするためには、Homestead設定ファイルの"features"設定を使います。

features:
    - blackfire:
        server_id: "server_id"
        server_token: "server_value"
        client_id: "client_id"
        client_token: "client_value"

Blackfireサーバ設定項目とクライアント設定項目には、ユーザーアカウントが必要です。BlackfireはCLIツールやブラウザー拡張を含んだ、アプリケーションのプロファイルに使用するさまざまなオプションを用意しています。詳細についてはBlackfireのドキュメントをご覧ください。

XHGuiを使用した、PHPパフォーマンスのプロファイリング

XHGuiはPHPアプリケーションのパフォーマンスを表示してくれるユーザーインターフェイスです。XHGuiを有効にするには、サイト設定にxhgui: 'true'を追加してください。

sites:
    -
        map: your-site.test
        to: /home/vagrant/your-site/public
        type: "apache"
        xhgui: 'true'

サイトがすでに存在する場合は、設定を更新した後にvagrant provisionを必ず実行してください。

Webリクエストをプロファイルするには、リクエストのクエリパラメータにxhgui=onを付加してください。XHGuiは以降のリクエストでこのクエリリクエスト値を付ける必要がないように、リクエストへ自動的にクッキーを追加します。アプリケーションのプロファイル結果を見るには、http://your-site.test/xhguiをブラウザで開いてください。

XHGuiを使用してCLIリクエストのプロファイルを取る場合は、コマンドの前にXHGUI=onを付けてください。

XHGUI=on path/to/script

CLIプロファイル結果は、Webのプロファイル結果と同じ方法で確認できます。

プロファイルはスクリプトの実行を低下させるため、実際のリクエストの2倍ほどの実時間になることへ注意しましょう。そのため、実際の数字ではなく、常に向上パーセンテージで比較してください。また、デバッガで中断している時間も実行時間に含まれることを認識しておきましょう。

パフォーマンスのプロファイルは非常にディスクスペースを喰うため、数日で自動的に削除されます。

ネットワークインターフェイス

Homestead.yamlファイルのnetworkプロパティは、Homestead環境のネットワークインターフェイスを設定します。多くのインターフェイスを必要に応じ設定可能です。

networks:
    - type: "private_network"
      ip: "192.168.10.20"

ブリッジインターフェイスを有効にするには、bridge項目を設定し、ネットワークタイプをpublic_networkへ変更します。

networks:
    - type: "public_network"
      ip: "192.168.10.20"
      bridge: "en1: Wi-Fi (AirPort)"

DHCPを有効にするには、設定からipオプションを取り除いてください。

networks:
    - type: "public_network"
      bridge: "en1: Wi-Fi (AirPort)"

Homesteadの拡張

Homesteadのルートディレクトリにある、after.shスクリプトを使用し、Homesteadを拡張できます。このファイルの中へ、適切な設定や仮想マシンのカスタマイズに必要なシェルコマンドを追加してください。

Homesteadをカスタマイズすると、Ubuntuはパッケージのオリジナル設定をそのままにするか、それとも新しい設定ファイルでオーバーライドするかを尋ねます。これを停止するには、Homesteadにより事前に記述された設定の上書きをパッケージインストール時に無視するように、以下のコマンドを使用してください。

sudo apt-get -y \
    -o Dpkg::Options::="--force-confdef" \
    -o Dpkg::Options::="--force-confold" \
    install your-package

ユーザーによるカスタマイズ

チームの設定でHomesteadを使用している場合でも、自分の個人的な開発スタイルに合うようにHomesteadを調整したくなることでしょう。Homestead.yamlが含まれるHomesteadのルートディレクトリに、user-customizations.shを作成してください。このファイルの中で、好きなようにカスタマイズを行なってください。ただし、このuser-customizations.shはバージョンコントロールに含めてはいけません。

Homesteadの更新

Homesteadの更新を開始する前に、現在の仮想マシンを削除するために、次のコマンドをHomesteadディレクトリで実行してください。

vagrant destroy

次に、Homesteadのソースコードを更新する必要があります。リポジトリをクローンしている場合は、リポジトリをクローンした元のディレクトリで、以下のコマンドを実行してください。

git fetch

git pull origin release

上記のコマンドにより、最新のHomesteadコードがGitHubリポジトリよりpullされ、最新のタグをフェッチし、タグ付けされた最新のリリースをチェックアウトします。安定リリースバージョンの最新版は、GitHubリリースページで見つけてください。

プロジェクトのcomposer.jsonファイルによりHomesteadをインストールしている場合は、composer.jsonファイルに"laravel/homestead": "^10"が含まれていることを確認し、依存コンポーネントをアップデートしてください。

composer update

次に、Vagrantボックスを更新するために、vagrant box updateコマンドを実行してください。

vagrant box update

最後に、最新のVagrantバージョンを使用するために、Homestead Boxを再生成する必要があります。Homesteadディレクトリで以下のコマンドを実行してください。

vagrant up

プロパイダ固有の設定

VirtualBox

natdnshostresolver

デフォルトのHomestead設定は、natdnshostresolver設定をonにしています。これにより、HomesteadはホストのオペレーティングシステムのDNS設定を利用します。この動作をオーバーライドしたい場合は、Homestead.yamlへ以下の行を追加してください。

provider: virtualbox
natdnshostresolver: 'off'

Windowsでのシンボリックリンク

Windowsマシンでシンボリックリンクが正しく動かない場合は、Vagrantfileに以下のコードブロックを追加する必要があります。

config.vm.provider "virtualbox" do |v|
    v.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"]
end

ドキュメント章別ページ

ヘッダー項目移動

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

その他

?

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