イントロダクション

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

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

Homesteadは、Windows、Mac、Linuxシステムで実行でき、Nginx Webサーバー、PHP7.1、MySQL、Postgres、Redis、Memcached、Nodeやその他、素晴らしいLaravelアプリケーションを開発するために必要な、クールなツールを全部含んでいます。

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

含まれるソフトウェア

  • Ubuntu 16.04
  • Git
  • PHP 7.1
  • Nginx
  • MySQL
  • MariaDB
  • Sqlite3
  • Postgres
  • Composer
  • Node (Yarn、PM2、Bower、Grunt、Gulpを含む)
  • Redis
  • Memcached
  • Beanstalkd

インストールと設定

最初の段階

Homestead環境を起動する前に、VirtualBox 5.1VMWare、もしくはParallels、それとVagrantをインストールする必要があります。全ソフトウェア共に簡単に使用できるビジュアルインストーラーが、人気のあるオペレーティングシステム全部に用意されています。

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

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

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隠しディレクトリの中に、生成されます。

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

// Windows...
init.bat

Homestead設定

プロバイダの設定

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

provider: virtualbox

共有ホルダーの設定

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

folders:
    - map: ~/Code
      to: /home/vagrant/Code

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

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

さらに、optionsキー下にリストすれば、Vagrantの同期フォルダでサポートされているオプションを全て指定できます。

folders:
    - map: ~/Code
      to: /home/vagrant/Code
      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.app
      to: /home/vagrant/Code/Laravel/public

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

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 uphomestead sshのように実行できます。

SSH接続

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

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

データベースへの接続

homesteadのデータベースは、最初からMySQLとPostgresのために設定されています。より便利に使えるように、初めからフレームワークはこれらのデータベースを使用するように、Laravelの.envファイルで設定してあります。

MySQLかPostgresデータベースへ、ホストマシンからデータベースクライアントで接続するには、127.0.0.133060(MySQL)番ポートか、54320(Postgres)番ポートへ接続してください。ユーザ名とパスワードは、両方共にhomestead/secretです。

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

サイトの追加

Homestead環境をプロビジョニングし、実働した後に、LaravelアプリケーションをNginxサイトへ追加したいこともあるでしょう。希望するだけのLaravelアプリケーションを一つのHomestead環境上で実行することができます。新しいサイトを追加するには、~/.homestead/Homestead.yamlファイルへ追加し、次にvagrant reload --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 - フォワード先 22
  • HTTP: 8000 - フォワード先 80
  • HTTPS: 44300 - フォワード先 443
  • MySQL: 33060 - フォワード先 3306
  • Postgres: 54320 - フォワード先 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)"

Homesteadの更新

2つの簡単な手順で、Homesteadをアップデートできます。最初にvagrant box updateコマンドを使い、Vagrant boxを更新してください。

vagrant box update

次に、Homesteadのソースコードを更新する必要があります。リポジトリをクローンしている場合は、リポジトリをクローンしたもともとの場所で、git pull origin masterを単に実行するするだけです。

composer.jsonファイルにより、Homesteadをインストールしている場合は、composer.jsonファイルに"laravel/homestead": "^4"が含まれていることを確認し、依存パッケージを更新してください。

composer update

旧バージョン

Homestead.yamlファイルに以下の行を付け加えることで、Homesteadが使用するboxのバージョンを簡単にオーバーライドできます。

version: 0.6.0

一例:

box: laravel/homestead
version: 0.6.0
ip: "192.168.20.20"
memory: 2048
cpus: 4
provider: virtualbox

古いバージョンのHomestead boxを使用する場合は、互換性のあるバージョンのHomesteadソースコードへ合わせる必要があります。下図はサポートされているboxのバージョンを表し、使用すべきHomesteadソースコードのバージョンとPHPバージョンです。

Homesteadバージョン Boxバージョン
PHP 7.0 3.1.0 0.6.0
PHP 7.1 4.0.0 1.0.0