イントロダクション
ローカル開発環境を含め、PHP開発全体を愉快なものにしようとLaravelは努力しています。Vagrantは、仮想マシーンの管理と事前設定を行う、簡単でエレガントな手段を提供しています。
Laravel Homestead(入植農地、「ホームステード」)はパッケージを事前に済ませた、Laravel公式の"box"で、PHPやHHVM、Webサーバー、その他のサーバーソフトウェアをローカルマシンにインストールする必要なく、素晴らしい開発環境を準備できます。オペレーティングシステムでごちゃごちゃになる心配はもうありません! Vagrant boxは完全に使い捨てできます。何かの調子が悪くなれば壊して、数分のうちにそのboxを再生成できます!
Homesteadは、Windows、Mac、Linuxシステムで実行でき、Nginx Webサーバー、PHP7.0、MySQL、Postgres、Redis、Memcached、Nodeやその他、素晴らしいLaravelアプリケーションを開発するために必要な、クールなツールを全部含んでいます。
注意: Windowsを使用している場合は、ハードウェア仮想化(VT-x)を有効にする必要があります。通常、BIOSにより有効にできます。UEFI system上のHyper-Vを使用している場合は、VT-xへアクセスするため、さらにHyper-Vを無効にする必要があります。
含まれるソフトウェア
- Ubuntu 16.04
- Git
- PHP 7.0
- HHVM
- Nginx
- MySQL
- MariaDB
- Sqlite3
- Postgres
- Composer
- Node (PM2とBower、Grunt、Gulpを含む)
- Redis
- Memcached
- Beanstalkd
インストールと設定
最初の段階
Homestead環境を起動する前に、VirtualBox 5.xとVagrantをインストールする必要があります。両ソフトウェア共に簡単に使用できるビジュアルインストーラーが、人気のあるオペレーティングシステム全部に用意されています。
VMwareプロバイダを使用するには、VMware Fusion/WorkstationとVMware Vagrantプラグインを購入する必要があります。無料ではありませんが、VMwareが提供する共有フォルダーは最初からよりスピーディーです。
Homestead Vagrant Boxのインストール
VirtualBox/VMwareとVagrantをインストールし終えたら、laravel/homestead
boxをVagrantへ追加するため次のコマンドを端末で実行する必要があります。boxをダウンロードし終えるまで、接続速度にもよりますが数分かかるでしょう。
vagrant box add laravel/homestead
このコマンドが失敗する場合、Vagrantを更新する必要があります。
Homesteadのインストール
リポジトリーをクローンするだけでHomesteadをインストールできます。自分の「ホーム」ディレクトリの中のHomestead
フォルダーへリポジトリーをクローンするのことは、自分のLaravel(とPHP)の全プロジェクトをホストしておくHomestead
Boxを用意するのだと考えてください。
cd ~
git clone https://github.com/laravel/homestead.git Homestead
Homesteadリポジトリをクーロンできたら、Homestead.yaml
設定ファイルを生成するため、bash init.sh
コマンドをHomesteadディレクトリで実行します。Homestead.yaml
ファイルは~/.homestead
隠しディレクトリの中に、生成されます。
bash init.sh
Homestead設定
プロバイダの設定
~/.homestead/Homestead.yaml
ファイル中のprovider
キーは、Vagrantのプロバイダとして、virtualbox
、vmware_fusion
、vmware_workstation
のどれを使用するかを指定します。使用するプロバイダの値を指定してください。
provider: virtualbox
共有ホルダーの設定
Homestead.yaml
ファイルのfolders
プロパティーには、Homestead環境と共有したい全フォルダーがリストされています。これらのフォルダーの中のファイルが変更されると、ローカルマシーンとHomestead環境との間で同期されます。必要なだけ共有フォルダーを設定してください!
folders:
- map: ~/Code
to: /home/vagrant/Code
NFSを有効にするには、同期するフォルダーにフラッグを指定するだけです。
folders:
- map: ~/Code
to: /home/vagrant/Code
type: "nfs"
Nginxサイトの設定
Nginxには詳しくない? 問題ありません。sites
プロパティーでHomestead環境上のフォルダーと「ドメイン」を簡単にマップできます。サイト設定のサンプルは、Homestead.yaml
ファイルに含まれています。これも必要に応じ、Homestead環境へサイトを好きなだけ追加してください。便利に使えるように、Homesteadは皆さんが作業する全てのLaravelプロジェクトの仮想環境を提供します。
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
hhvm
オプションをtrue
に設定すれば、簡単にHomesteadサイトでHHVMが使えるようになります。
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
hhvm: true
sites
プロパティをHomestead
boxのプロビジョニング後に変更した場合、仮想マシンのNginx設定を更新するため、vagrant reload --provision
を再実行する必要があります。
hostsファイル
Nginxサイトの"domains"に追加したサイトをあなたのコンピューターのhosts
ファイルにも追加してください。hosts
ファイルはローカルドメインへのリクエストをHomestead環境へ転送してくれます。MacとLinuxでは、/etc/hosts
にこのファイルがあります。Windows環境では、C:\Windows\System32\drivers\etc\hosts
です。次の行のように追加してください。
192.168.10.10 homestead.app
設定するIPアドレスには~/.homestead/Homestead.yaml
ファイルの中の値を確実に指定してください。ドメインをhosts
ファイルへ追加したら、Webブラウザーでサイトにアクセスできます。
http://homestead.app
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.app
のプロジェクトへアクセスしてください。/etc/hosts
ファイルにhomestead.app
か選んだドメインのエントリーを追加する必要はあることを覚えておきましょう。
MariaDBのインストール
MySQLの代わりにMariaDBを使用したい場合は、mariadb
オプションをHomestead.yaml
ファイルへ追加してください。このオプションはMySQLを削除し、MariaDBをインストールします。MariaDBはMySQLとそのまま置き換えられる代用ソフトウェアですので、mysql
データベースドライバをそのままアプリケーションで使用できます。
box: laravel/homestead
ip: "192.168.20.20"
memory: 2048
cpus: 4
provider: virtualbox
mariadb: true
使用方法
Homesteadへグローバルにアクセスする
場合により、Homestead仮想マシンをファイルシステムのどこからでもvagrant up
したい時もあるでしょう。Bashプロファイルへ簡単なBash関数を追加すれば実現できます。以下の関数はシステムのどこからでも、どんなVagrantコマンドでも実行できるようにし、自動的にHomesteadをインストールしてあるディレクトリで実行します。
function homestead() {
( cd ~/Homestead && vagrant $* )
}
エイリアス中の~/Homestead
パスを実際にHomesteadをインストール場所を示すように調整してください。関数がインストールできたら、システムのどこからでもhomestead up
やhomestead ssh
のように実行できます。
SSH接続
Homesteadディレクトリでvagrant ssh
端末コマンドを実行すれば、仮想マシンにSSHで接続できます。
しかし、Homesteadマシンには頻繁にSSHでアクセスする必要があると思いますから、ホストマシンから素早くHomestead boxへSSH接続できるように、上記の「関数」を追加することを検討してください。
データベースへの接続
homestead
のデータベースは、最初からMySQLとPostgresのために設定されています。より便利に使えるように、初めからフレームワークはこれらのデータベースを使用するように、Laravelの.env
ファイルで設定してあります。
ホストマシンからMySQLかPostgresデータベースへ、NavicatかSequel
Proを経由して接続するには、127.0.0.1
の33060
(MySQL)番ポートか、54320
(Postgres)番ポートへ接続してください。ユーザ名とパスワードは、両方共にhomestead
/secret
です。
注意: ホストマシーンからデータベースへ接続するには、標準的ではないポートだけを使用してください。Laravelのデータベース設定ファイル中では、デフォルトの3306と5432ポートを使用することができます。Laravelは仮想マシーンの内部で動作しているからです。
サイトの追加
Homestead環境をプロビジョニングし、実働した後に、LaravelアプリケーションをNginxサイトへ追加したいこともあるでしょう。希望するだけのLaravelアプリケーションを一つのHomestead環境上で実行することができます。新しいサイトを追加するには、~/.homestead/Homestead.yaml
ファイルへ追加し、次にvagrant provision
ターミナルコマンドをHomesteadディレクトリで実行します。
Cronスケジュール設定
schedule:run
Artisanコマンドだけを毎分実行することにより、Cronジョブのスケジュールを簡単に行う方法をLaravelは提供しています。schedule:run
コマンドはApp\Console\Kernel
クラスの定義を調べ、どのジョブを実行すべきかを決定します。
Homesteadサイトでschedule:run
コマンドを実行したい場合は、サイトを定義するときにschedule
オプションをtrue
に設定してください。
sites:
- map: homestead.app
to: /home/vagrant/Code/Laravel/public
schedule: true
こうしたサイト用のCronジョブは、仮想マシーンの/etc/cron.d
フォルダーの中に定義されます。
ポート
以下のポートが、Homestead環境へポートフォワードされています。
- SSH: 2222 - SSH: 2222 → Forwards To 22rarr; フォワード先 22
- HTTP: 8000 - HTTP: 8000 → Forwards To 80rarr; フォワード先 80
- HTTPS: 44300 - HTTPS: 44300 → Forwards To 443rarr; フォワード先 443
- MySQL: 33060 - MySQL: 33060 → Forwards To 3306rarr; フォワード先 3306
- Postgres: 54320 - Postgres: 54320 → Forwards To 5432rarr; フォワード先 5432
追加のフォワードポート
ご希望でしたら追加のポートをVagrant Boxへフォワードすることもできます。プロトコルを指定することもできます。
ports:
- send: 93000
to: 9300
- send: 7777
to: 777
protocol: udp
ネットワークインターフェイス
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)"