コンテンツへスキップ

Laravel Homestead

はじめに

Laravelは、ローカル開発環境を含め、PHP開発全体の体験を快適にすることに尽力しています。Laravel Homesteadは公式の事前にパッケージ化されたVagrantボックスであり、ローカルマシンにPHP、ウェブサーバー、その他のサーバーソフトウェアをインストールすることなく、優れた開発環境を提供します。

Vagrantは、仮想マシンの管理とプロビジョニングをシンプルかつエレガントに行う方法を提供します。Vagrantボックスは完全に使い捨てです。何か問題が発生した場合、数分でボックスを破棄して再作成できます!

Homesteadは、Windows、macOS、Linuxのいずれのシステムでも動作し、Nginx、PHP、MySQL、PostgreSQL、Redis、Memcached、Node、そして素晴らしいLaravelアプリケーションを開発するために必要なその他のソフトウェアが含まれています。

exclamation

Windowsを使用している場合は、ハードウェア仮想化(VT-x)を有効にする必要がある場合があります。通常はBIOSで有効にできます。UEFIシステムでHyper-Vを使用している場合は、VT-xにアクセスするためにHyper-Vを無効にする必要がある場合もあります。

含まれるソフトウェア

  • Ubuntu 22.04
  • Git
  • PHP 8.3
  • PHP 8.2
  • PHP 8.1
  • PHP 8.0
  • PHP 7.4
  • PHP 7.3
  • PHP 7.2
  • PHP 7.1
  • PHP 7.0
  • PHP 5.6
  • Nginx
  • MySQL 8.0
  • lmm
  • Sqlite3
  • PostgreSQL 15
  • Composer
  • Docker
  • Node(Yarn、Bower、Grunt、Gulp付き)
  • Redis
  • Memcached
  • Beanstalkd
  • Mailpit
  • avahi
  • ngrok
  • Xdebug
  • XHProf / Tideways / XHGui
  • wp-cli

オプションソフトウェア

  • Apache
  • Blackfire
  • Cassandra
  • Chronograf
  • CouchDB
  • Crystal & Lucky Framework
  • Elasticsearch
  • EventStoreDB
  • Flyway
  • Gearman
  • Go
  • Grafana
  • InfluxDB
  • Logstash
  • MariaDB
  • Meilisearch
  • MinIO
  • MongoDB
  • Neo4j
  • Oh My Zsh
  • OpenResty
  • PM2
  • Python
  • R
  • RabbitMQ
  • Rust
  • RVM (Ruby Version Manager)
  • Solr
  • TimescaleDB
  • Trader (PHP拡張)
  • Webdriver & Laravel Duskユーティリティ

インストールとセットアップ

最初のステップ

Homestead環境を起動する前に、Vagrantと、以下のサポートされているプロバイダーのいずれかをインストールする必要があります。

これらのソフトウェアパッケージはすべて、一般的なオペレーティングシステム向けに使いやすいビジュアルインストーラーを提供しています。

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

Homesteadのインストール

Homesteadは、ホストマシンにHomesteadリポジトリをクローンすることでインストールできます。「ホーム」ディレクトリ内に`Homestead`フォルダにリポジトリをクローンすることを検討してください。Homestead仮想マシンは、すべてのLaravelアプリケーションのホストとして機能します。このドキュメント全体で、このディレクトリを「Homesteadディレクトリ」と呼びます。

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

Laravel Homesteadリポジトリをクローンした後、`release`ブランチをチェックアウトする必要があります。このブランチには常に、Homesteadの最新の安定版リリースが含まれています。

cd ~/Homestead
 
git checkout release

次に、Homesteadディレクトリから`bash init.sh`コマンドを実行して、`Homestead.yaml`設定ファイルを作成します。`Homestead.yaml`ファイルは、Homesteadインストールのすべての設定を構成する場所です。このファイルはHomesteadディレクトリに配置されます。

# macOS / Linux...
bash init.sh
 
# Windows...
init.bat

Homesteadの設定

プロバイダーの設定

`Homestead.yaml`ファイルの`provider`キーは、使用するVagrantプロバイダー(`virtualbox`または`parallels`)を示します。

provider: virtualbox
exclamation

Apple Siliconを使用している場合は、Parallelsプロバイダーが必要です。

共有フォルダの設定

`Homestead.yaml`ファイルの`folders`プロパティには、Homestead環境と共有するすべてのフォルダがリストされています。これらのフォルダ内のファイルが変更されると、ローカルマシンとHomestead仮想環境間で同期されます。必要に応じて、複数の共有フォルダを構成できます。

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

Windowsユーザーは`~/`パス構文を使用せず、`C:\Users\user\Code\project1`など、プロジェクトへのフルパスを使用する必要があります。

単一の大きなディレクトリをマッピングするのではなく、常に個々のアプリケーションを独自のフォルダマッピングにマッピングする必要があります。フォルダをマッピングすると、仮想マシンはフォルダ内のすべてのファイルのすべてのディスクIOを追跡する必要があります。フォルダ内に多数のファイルがある場合、パフォーマンスが低下する可能性があります。

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

Homesteadを使用する際、`.`(現在のディレクトリ)をマウントしないでください。これにより、Vagrantは現在のフォルダを`/vagrant`にマッピングせず、オプション機能が機能しなくなり、プロビジョニング中に予期しない結果が発生します。

NFSを有効にするには、フォルダマッピングに`type`オプションを追加できます。

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

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に慣れていませんか?問題ありません。`Homestead.yaml`ファイルの`sites`プロパティを使用すると、Homestead環境のフォルダに「ドメイン」を簡単にマッピングできます。サンプルサイト構成は`Homestead.yaml`ファイルに含まれています。必要に応じて、Homestead環境に複数のサイトを追加できます。Homesteadは、作業中のすべてのLaravelアプリケーションに便利な仮想化された環境として機能します。

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

プロビジョニング後にHomestead仮想マシンの`sites`プロパティを変更した場合は、ターミナルで`vagrant reload --provision`コマンドを実行して、仮想マシンのNginx構成を更新する必要があります。

exclamation

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 仮想マシンにリダイレクトします。macOS と Linux では、このファイルは ` /etc/hosts` にあります。Windows では、`C:\Windows\System32\drivers\etc\hosts` にあります。このファイルに追加する行は次のようになります。

192.168.56.56 homestead.test

リストされているIPアドレスが、`Homestead.yaml` ファイルに設定されているものと一致していることを確認してください。ドメインを `hosts` ファイルに追加し、Vagrant ボックスを起動したら、Webブラウザからサイトにアクセスできるようになります。

http://homestead.test

サービスの設定

Homestead はデフォルトでいくつかのサービスを起動しますが、プロビジョニング中に有効または無効にするサービスをカスタマイズできます。たとえば、`Homestead.yaml` ファイル内の `services` オプションを変更することで、PostgreSQL を有効にし、MySQL を無効にすることができます。

services:
- enabled:
- "postgresql"
- disabled:
- "mysql"

`enabled` と `disabled` ディレクティブでの順序に基づいて、指定されたサービスが開始または停止されます。

Vagrantボックスの起動

`Homestead.yaml` を編集したら、Homestead ディレクトリから `vagrant up` コマンドを実行します。Vagrant は仮想マシンを起動し、共有フォルダと Nginx サイトを自動的に構成します。

マシンを破棄するには、`vagrant destroy` コマンドを使用できます。

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

Homestead をグローバルにインストールして、すべてのプロジェクトで同じ Homestead 仮想マシンを共有する代わりに、管理する各プロジェクトに Homestead インスタンスを構成できます。プロジェクトごとに Homestead をインストールすると、`Vagrantfile` をプロジェクトに同梱して、プロジェクトに取り組む他のユーザーがプロジェクトのリポジトリをクローンした直後に `vagrant up` を実行できるようにすることができるので便利です。

Composer パッケージマネージャーを使用して、プロジェクトに Homestead をインストールできます。

composer require laravel/homestead --dev

Homestead がインストールされたら、Homestead の `make` コマンドを呼び出して、プロジェクトの `Vagrantfile` と `Homestead.yaml` ファイルを生成します。これらのファイルはプロジェクトのルートに配置されます。`make` コマンドは、`Homestead.yaml` ファイルの `sites` と `folders` ディレクティブを自動的に構成します。

# macOS / Linux...
php vendor/bin/homestead make
 
# Windows...
vendor\\bin\\homestead make

次に、ターミナルで `vagrant up` コマンドを実行し、ブラウザで `http://homestead.test` でプロジェクトにアクセスします。自動ホスト名解決を使用していない場合は、`homestead.test` または選択したドメインの `/etc/hosts` ファイルエントリを追加する必要があることに注意してください。

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

`Homestead.yaml` ファイル内の `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
- dragonflydb: true
- elasticsearch:
version: 7.9.0
- eventstore: true
version: 21.2.0
- flyway: true
- gearman: true
- golang: true
- grafana: true
- influxdb: true
- logstash: true
- mariadb: true
- meilisearch: true
- minio: true
- mongodb: true
- neo4j: true
- ohmyzsh: true
- openresty: true
- pm2: true
- python: true
- r-base: true
- rabbitmq: true
- rustc: true
- rvm: true
- solr: true
- timescaledb: true
- trader: true
- webdriver: true

Elasticsearch

サポートされているElasticsearchのバージョンを指定できます。これは正確なバージョン番号(メジャー.マイナー.パッチ)である必要があります。デフォルトのインストールでは、「homestead」という名前のクラスタが作成されます。Elasticsearch には、オペレーティングシステムのメモリの半分以上を与えてはならないため、Homestead 仮想マシンには、Elasticsearch の割り当て量の少なくとも 2 倍のメモリがあることを確認してください。

lightbulb

構成をカスタマイズする方法については、Elasticsearch のドキュメントを参照してください。

MariaDB

MariaDB を有効にすると、MySQL が削除され、MariaDB がインストールされます。MariaDB は通常、MySQL のドロップイン置換として機能するため、アプリケーションのデータベース構成では引き続き `mysql` データベースドライバを使用する必要があります。

MongoDB

デフォルトの MongoDB インストールでは、データベースのユーザー名が `homestead` に、対応するパスワードが `secret` に設定されます。

Neo4j

デフォルトの Neo4j インストールでは、データベースのユーザー名が `homestead` に、対応するパスワードが `secret` に設定されます。Neo4j ブラウザにアクセスするには、Web ブラウザで `http://homestead.test:7474` にアクセスします。ポート `7687` (Bolt)、`7474` (HTTP)、および `7473` (HTTPS) は、Neo4j クライアントからのリクエストに対応する準備ができています。

エイリアス

Homestead ディレクトリ内の `aliases` ファイルを変更することで、Homestead 仮想マシンに Bash エイリアスを追加できます。

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

`aliases` ファイルを更新したら、`vagrant reload --provision` コマンドを使用して Homestead 仮想マシンを再プロビジョニングする必要があります。これにより、新しいエイリアスがマシンで使用できるようになります。

Homesteadの更新

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

vagrant destroy

次に、Homestead のソースコードを更新する必要があります。リポジトリをクローンした場合は、リポジトリを最初にクローンした場所で次のコマンドを実行できます。

git fetch
 
git pull origin release

これらのコマンドは、GitHub リポジトリから最新の Homestead コードを取得し、最新のタグを取得してから、最新のタグ付きリリースをチェックアウトします。最新の安定版リリースバージョンは、Homestead の GitHub リリースページ で確認できます。

プロジェクトの `composer.json` ファイルを介して Homestead をインストールした場合は、`composer.json` ファイルに ` "laravel/homestead": "^12"` が含まれており、依存関係が更新されていることを確認する必要があります。

composer update

次に、`vagrant box update` コマンドを使用して Vagrant ボックスを更新する必要があります。

vagrant box update

Vagrant ボックスを更新したら、Homestead の追加の構成ファイルを更新するために、Homestead ディレクトリから `bash init.sh` コマンドを実行する必要があります。既存の `Homestead.yaml`、`after.sh`、および `aliases` ファイルを上書きするかどうかを尋ねられます。

# macOS / Linux...
bash init.sh
 
# Windows...
init.bat

最後に、最新の Vagrant インストールを使用するために、Homestead 仮想マシンを再生成する必要があります。

vagrant up

毎日の使用

SSHによる接続

Homestead ディレクトリから `vagrant ssh` ターミナルコマンドを実行することにより、仮想マシンに SSH で接続できます。

追加サイトの追加

Homestead 環境のプロビジョニングと実行が完了したら、他の Laravel プロジェクトに追加の Nginx サイトを追加する必要がある場合があります。単一の Homestead 環境で、必要な数の Laravel プロジェクトを実行できます。追加のサイトを追加するには、`Homestead.yaml` ファイルにサイトを追加します。

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

サイトを追加する前に、プロジェクトのディレクトリにフォルダマッピングが構成されていることを確認する必要があります。

Vagrant が「hosts」ファイルを自動的に管理していない場合は、新しいサイトをそのファイルにも追加する必要がある場合があります。macOS と Linux では、このファイルは ` /etc/hosts` にあります。Windows では、`C:\Windows\System32\drivers\etc\hosts` にあります。

192.168.56.56 homestead.test
192.168.56.56 another.test

サイトが追加されたら、Homestead ディレクトリから `vagrant reload --provision` ターミナルコマンドを実行します。

サイトの種類

Homestead は、Laravel に基づいていないプロジェクトを簡単に実行できるいくつかの「種類」のサイトをサポートしています。たとえば、`statamic` サイトタイプを使用して、Statamic アプリケーションを Homestead に簡単に追加できます。

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

使用可能なサイトの種類は、`apache`、`apache-proxy`、`apigility`、`expressive`、`laravel`(デフォルト)、`proxy`(nginx 用)、`silverstripe`、`statamic`、`symfony2`、`symfony4`、および `zf` です。

サイトパラメータ

`params` サイトディレクティブを使用して、追加の Nginx `fastcgi_param` 値をサイトに追加できます。

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` ユーザーの環境も更新されます。

ポート

デフォルトでは、次のポートが Homestead 環境に転送されます。

  • **HTTP:** 8000 → 80 に転送
  • **HTTPS:** 44300 → 443 に転送

追加のポートの転送

`Homestead.yaml` ファイル内に `ports` 構成エントリを定義することで、追加のポートを Vagrant ボックスに転送できます。`Homestead.yaml` ファイルを更新したら、`vagrant reload --provision` コマンドを実行してマシンを再プロビジョニングしてください。

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

ホストマシンから Vagrant ボックスにマッピングする必要がある追加の Homestead サービスポートのリストを以下に示します。

  • **SSH:** 2222 → 22 に
  • **ngrok UI:** 4040 → 4040 に
  • **MySQL:** 33060 → 3306 に
  • **PostgreSQL:** 54320 → 5432 に
  • **MongoDB:** 27017 → 27017 に
  • **Mailpit:** 8025 → 8025 に
  • **Minio:** 9600 → 9600 に

PHPバージョン

Homestead は、同じ仮想マシンで複数のバージョンの PHP を実行できます。`Homestead.yaml` ファイル内で、特定のサイトに使用する PHP のバージョンを指定できます。使用可能な PHP のバージョンは、「5.6」、「7.0」、「7.1」、「7.2」、「7.3」、「7.4」、「8.0」、「8.1」、「8.2」、「8.3」(デフォルト)です。

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

Homestead 仮想マシン内では、CLI を介してサポートされている 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
php8.0 artisan list
php8.1 artisan list
php8.2 artisan list
php8.3 artisan list

Homestead 仮想マシン内から次のコマンドを実行して、CLI で使用される PHP のデフォルトバージョンを変更できます。

php56
php70
php71
php72
php73
php74
php80
php81
php82
php83

データベースへの接続

`homestead` データベースは、MySQL と PostgreSQL の両方で最初から構成されています。ホストマシンのデータベースクライアントから MySQL または PostgreSQL データベースに接続するには、ポート `33060` (MySQL) または `54320` (PostgreSQL) で `127.0.0.1` に接続する必要があります。両方のデータベースのユーザー名とパスワードは `homestead` / `secret` です。

exclamation

ホストマシンからデータベースに接続する際には、これらの非標準ポートのみを使用してください。Laravel は仮想マシン *内* で実行されるため、Laravel アプリケーションの `database` 設定ファイルでは、デフォルトの 3306 と 5432 ポートを使用します。

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

Homestead は、Homestead 仮想マシンが破棄されたときに、データベースを自動的にバックアップできます。この機能を使用するには、Vagrant 2.1.0 以降を使用する必要があります。または、古いバージョンの Vagrant を使用している場合は、`vagrant-triggers` プラグインをインストールする必要があります。データベースの自動バックアップを有効にするには、次の行を `Homestead.yaml` ファイルに追加します。

backup: true

構成後、`vagrant destroy` コマンドが実行されると、Homestead はデータベースを `.backup/mysql_backup` と `.backup/postgres_backup` ディレクトリにエクスポートします。これらのディレクトリは、Homestead をインストールしたフォルダ、または プロジェクトごとのインストール 方法を使用している場合はプロジェクトのルートにあります。

Cronスケジュールの設定

Laravel は、1 分ごとに実行される単一の `schedule:run` Artisan コマンドをスケジュールすることによって、cron ジョブをスケジュールする便利な方法を提供します。`schedule:run` コマンドは、`routes/console.php` ファイルで定義されたジョブスケジュールを調べて、実行する予定のタスクを決定します。

Homestead サイトで `schedule:run` コマンドを実行する場合は、サイトを定義するときに `schedule` オプションを `true` に設定できます。

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

サイトの cron ジョブは、Homestead 仮想マシンの `/etc/cron.d` ディレクトリに定義されます。

Mailpitの設定

Mailpit を使用すると、送信メールをインターセプトして、メールを実際に受信者に送信せずに調べることができます。開始するには、アプリケーションの `.env` ファイルを更新して、次のメール設定を使用します。

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

Mailpit が構成されたら、`http://localhost:8025` で Mailpit ダッシュボードにアクセスできます。

Minioの設定

Minio は、Amazon S3互換APIを持つオープンソースのオブジェクトストレージサーバーです。Minioをインストールするには、機能セクションで以下の設定オプションを`Homestead.yaml`ファイルに追加してください。

minio: true

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

Minioを使用するには、` .env`ファイルに以下のオプションを設定してください。

AWS_USE_PATH_STYLE_ENDPOINT=true
AWS_ENDPOINT=http://localhost:9600
AWS_ACCESS_KEY_ID=homestead
AWS_SECRET_ACCESS_KEY=secretkey
AWS_DEFAULT_REGION=us-east-1

Minio対応の"S3"バケットをプロビジョニングするには、`Homestead.yaml`ファイルに`buckets`ディレクティブを追加します。バケットを定義したら、ターミナルで`vagrant reload --provision`コマンドを実行してください。

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

サポートされている`policy`の値には、`none`、`download`、`upload`、`public`があります。

Laravel Dusk

Homestead内でLaravel Duskテストを実行するには、Homesteadの設定で`webdriver`機能を有効にする必要があります。

features:
- webdriver: true

`webdriver`機能を有効にしたら、ターミナルで`vagrant reload --provision`コマンドを実行してください。

環境の共有

現在作業中の内容を同僚やクライアントと共有したい場合もあります。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

HTTPではなくHTTPSでコンテンツを共有する必要がある場合は、`share`コマンドの代わりに`sshare`コマンドを使用すると有効になります。

exclamation

覚えておいてください。Vagrantは本質的に安全ではなく、`share`コマンドを実行すると仮想マシンをインターネットに公開することになります。

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

Xdebugを使用したウェブリクエストのデバッグ

Homesteadには、Xdebugを使用したステップデバッグのサポートが含まれています。例えば、ブラウザでページにアクセスすると、PHPがIDEに接続され、実行中のコードの検査と修正が可能になります。

デフォルトでは、Xdebugは既に実行されており、接続を受け入れる準備ができています。CLIでXdebugを有効にする必要がある場合は、Homestead仮想マシン内で`sudo phpenmod xdebug`コマンドを実行します。次に、IDEの説明に従ってデバッグを有効にします。最後に、拡張機能またはブックマークレットを使用して、ブラウザでXdebugをトリガーするように設定します。

exclamation

Xdebugにより、PHPの実行速度が大幅に低下します。Xdebugを無効にするには、Homestead仮想マシン内で`sudo phpdismod xdebug`を実行し、FPMサービスを再起動します。

Xdebugの自動起動

Webサーバーにリクエストを行う機能テストをデバッグする場合は、デバッグをトリガーするためのカスタムヘッダーまたはCookieを渡すためにテストを変更するよりも、デバッグを自動的に開始する方が簡単です。Xdebugを自動的に開始するには、Homestead仮想マシン内の`/etc/php/7.x/fpm/conf.d/20-xdebug.ini`ファイルを修正し、以下の設定を追加します。

; If Homestead.yaml contains a different subnet for the IP address, this address may be different...
xdebug.client_host = 192.168.10.1
xdebug.mode = debug
xdebug.start_with_request = yes

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

PHP CLIアプリケーションをデバッグするには、Homestead仮想マシン内の`xphp`シェルエイリアスを使用します。

xphp /path/to/script

Blackfireを使用したアプリケーションのプロファイリング

Blackfire は、WebリクエストとCLIアプリケーションをプロファイリングするためのサービスです。コールグラフとタイムラインにプロファイルデータを表示するインタラクティブなユーザーインターフェースを提供します。エンドユーザーへのオーバーヘッドなしで、開発、ステージング、本番環境での使用を目的として構築されています。さらに、Blackfireはコードと`php.ini`設定の性能、品質、セキュリティチェックを提供します。

Blackfire Player は、Blackfireと連携してプロファイリングシナリオをスクリプト化できるオープンソースのWebクローリング、Webテスト、Webスクレイピングアプリケーションです。

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

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

Blackfireサーバーの資格情報とクライアントの資格情報は、Blackfireアカウントが必要です。Blackfireは、CLIツールやブラウザ拡張機能など、アプリケーションをプロファイルするためのさまざまなオプションを提供しています。詳細はBlackfireのドキュメントを参照してください

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

`Homestead.yaml`ファイルの`networks`プロパティは、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)"

ネットワークが使用しているデバイスを更新するには、ネットワークの設定に`dev`オプションを追加できます。デフォルトの`dev`値は`eth0`です。

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

Homesteadの拡張

Homesteadディレクトリのルートにある`after.sh`スクリプトを使用して、Homesteadを拡張できます。このファイルには、仮想マシンの適切な構成とカスタマイズに必要なシェルコマンドを追加できます。

Homesteadをカスタマイズする際、Ubuntuはパッケージの元の構成を維持するか、新しい構成ファイルで上書きするかを尋ねてくる場合があります。これを回避するには、パッケージをインストールする際に以下のコマンドを使用し、Homesteadによって以前に記述された構成を上書きしないようにしてください。

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

ユーザーカスタマイズ

チームでHomesteadを使用する場合は、個々の開発スタイルに最適なようにHomesteadを調整したい場合があります。これを実現するために、Homesteadディレクトリのルート(`Homestead.yaml`ファイルを含むディレクトリと同じディレクトリ)に`user-customizations.sh`ファイルを作成できます。このファイル内で、任意のカスタマイズを行うことができます。ただし、`user-customizations.sh`はバージョン管理しないでください。

プロバイダー固有の設定

VirtualBox

natdnshostresolver

デフォルトでは、Homesteadは`natdnshostresolver`設定を`on`に設定します。これにより、HomesteadはホストオペレーティングシステムのDNS設定を使用できます。この動作をオーバーライドする場合は、以下の設定オプションを`Homestead.yaml`ファイルに追加します。

provider: virtualbox
natdnshostresolver: 'off'