イントロダクション
ローカル開発環境を含め、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.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か、VMWare、Parallels、Hyper-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のプロバイダとして、virtualbox
、vmware_fusion
、vmware_workstation
、parallels
、hyperv
のどれを使用するかを指定します。使用するプロバイダの値を指定してください。
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がインストールできたら、Vagrantfile
とHomestead.yaml
ファイルをプロジェクトルートへ生成するためにmake
コマンドを使ってください。make
コマンドはHomestead.yaml
ファイルのsites
とfolders
ディレクティブを自動的に設定します。
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 up
やhomestead 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 up
やhomestead 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_backup
、postgres_backup
ディレクトリへエクスポートします。これらのディレクトリは、Homesteadをクローンしたフォルダ中、もしくはプロジェクトごとのインストールを利用している場合は、プロジェクトルートの中で見つけられます。
データベーススナップショット
Homesteadでは、MySQLやMariaDBの状態をスナップショットし、Logical MySQL Managerを使いブランチ操作可能です。たとえば、複数のギガバイトデータベースに関わるサイトをイメージしてください。データベースをインポートし、スナップショットを取ります。何か操作し、ローカルにテスト状況を構築した後に、元の状態へ素早くリストアできるのです。
内部では、LVMのコピーオンライト(COW)サポートによる、簡単なスナップショット機能をLMMは使用しています。実践上これが意味するのは、テーブルのある一行を更新すると、その変更はディスクに書き込まれるだけであり、リストア時に大変な時間とディスクスペースを省略できるということです。
lmm
はLVMを操作するため、root
で実行する必要があります。実行可能なコマンドを確認するには、Vagrant
Box内でsudo lmm
を実行してください。コマンドのワークフローは次のようになるでしょう。
- デフォルトの
master
lmmブランチへデータベースをインポートする。 - 無変更状態のデータベーススナップショットを
sudo lmm branch prod-YYYY-MM-DD
で保存する。 - データベースを変更する。
sudo lmm merge prod-YYYY-MM-DD
を実行し、すべての変更を元に戻す。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"
指定できるサイトタイプはapache
、apigility
、expressive
、laravel
(デフォルト)、proxy
、silverstripe
、statamic
、symfony2
、symfony4
、zf
です。
サイトパラメータ
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://homestead: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://homestead:9600
バケットをセットアップするには、Homestead設定ファイルにbuckets
ディレクティブを追加してください。
buckets:
- name: your-bucket
policy: public
- name: your-private-bucket
policy: none
サポートしているpolicy
の値は、none
、download
、upload
、public
です。
ポート
以下のポートが、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(デフォルト)"です。
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
Homestead仮想マシンの中で、以下のコマンドを実行することにより、デフォルトCLIバージョンを変更することも可能です。
php56
php70
php71
php72
php73
Webサービス
HomesteadはNginxをデフォルトのWebサーバとして利用しています。しかし、サイトタイプとしてapache
が指定されると、Apacheをインストールします。両方のWebサーバを一度にインストールすることもできますが、同時に両方を実行することはできません。flip
シェルコマンドがWebサーバを切り替えるために用意されています。flip
コマンドはどちらのWebサーバが実行中かを自動的に判断し、シャットダウンし、もう一方のWebサーバを起動します。このコマンドを実行するには、HomesteadへSSH接続し、コマンドをターミナルで実行してください。
flip
Homesteadは、デフォルトで1025
ポートをリッスンする、Postfixメールトランスファーエージェントを用意しています。そのため、localhost
の1025
ポートに対して、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.#/fpm/conf.d/20-xdebug.ini
を変更してください。
; Homestead.ymlで別の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": "^9"
が含まれていることを確認し、依存コンポーネントをアップデートしてください。
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