Contents
Homestead とは
Homestead とは Laravel に必要な、Laravel・Composer・Nginx・MySQLなどが最初から含まれている仮想マシンのことです。
厳密には、Homestead は「Vagrant」という Hyper-V や Virtualbox などの仮想化ソフトウェアに、あらかじめ設定した構成に基づいて仮想マシンを簡単に自動展開できるツールの構成ファイルのようなものです。つまり Homestead は Vagrant がないと動きません。
Homestead を使うと Laravel が即時実行可能な環境がコマンド1つで仮想マシンとして立ち上がるわけなので、非常に便利です。仮想マシンなので作り放題壊し放題です。
Laravel に Homestead は必須じゃない
Homestead はあくまで Laravel の環境構築が一通り終了している仮想マシンを展開するためのツールなので、ローカル環境に Laravel を構築する場合必須ではありません。
特にこだわりが無い場合は Homestead を使用しない方が簡単に環境構築が出来るので、そちらの方法を選択してもいいかと思います。
Laravel をローカル環境に構築する手順は以下の記事にまとめました。
Homestead の導入手順
Homestead を利用するには前提として以下のソフトウェアのインストールが必須ですのでインストールしてください。
- Hyper-V、Parallels、VirtualBox、VMware のいずれか
- git
Homestead は仮想マシンを作成するツールなので、Hyper-V、Parallels、VirtualBox、VMware のいずれかを事前にインストールしておく必要があります。git は Homestead のダウンロードに使用します。
Homestead の導入手順は以下となります。
- ここから Vagrant のダウンロードとインストール
- cmdから「vagrant box add laravel/homestead」の実行(VirtualBoxを選択)
- cmdから「git clone https://github.com/laravel/homestead.git ~/homestead」の実行
- cmdから「cd %homepath%\~\Homestead」及び「git checkout release」の実行
- cmdから「init.bat」の実行
※3番が実行できない場合は「C:\Program Files\Git\bin」にパスが通っているか確認してください。
Homestead 起動前の処理
共有フォルダの作成
Homestead で作成した仮想マシンのファイルに簡単にアクセスするために、Homestead ではプロジェクトディレクトリがローカル側のフォルダに共有されるように設定されています。
ただし、そのローカル側の共有に使うフォルダまでは用意してくれないので、フォルダを作成しておく必要があります。
どのフォルダを共有フォルダに使用するかは「%homepath%\~\Homestead\Homestead.yaml」に記載されています。
デフォルトは「folders: map: ~/code」となっているのでホームディレクトリに「code」という名前のフォルダを作成してください。
vagrant up 時に自動で作成してくれるわけではないので注意してください!
vagrant up 前に共有フォルダをローカル側に作成していない場合、展開後に共有フォルダが無い状態になります。
vagrant up 後に「new laravel code」を実行後にローカル側に「code」フォルダ作成後、vagrant reload で再起動すると、共有フォルダは有効になりますが、ローカル側の空状態が同期されてプロジェクトフォルダが空になるので要注意!
公開ディレクトリのパスを変更
「%homepath%\~\Homestead\Homestead.yaml」の「Sites: to:」を「/home/vagrant/code/プロジェクト名/public」にあらかじめ変更しておいてください。
「Sites: to:」の設定は Homestead 展開後の nginx のドキュメントルートに使われるので事前に変更しておくことをお勧めします。
プロジェクト名を変更したい、事前に yaml ファイルを修正するのを忘れたなどの理由で、展開後に nginx のドキュメントルートを直接修正したい場合は「/etc/nginx/sites-enabled/homestead.test」を修正した後「sudo systemctl reload nginx」を実行してください。
ちなみに Homestead の nginx の設定は「/etc/nginx/nginx.conf」の中で「include /etc/nginx/sites-enabled/*」をしていて「sites-enabled/homestead.test」にドキュメントルートとしてyamlのディレクトリが記載されています。
デフォルトの「Sites: to:」は「/home/vagrant/code/public」になっています。つまり vagrant ユーザのホームディレクトリで「laravel new code」を実行しないとパス通りになりません。
しかし、事前にローカル側に共有フォルダを「code」という名前で作成している場合、vagrant up 直後の仮想マシンには既に「/home/vagrant/code」が存在しています。
この”既にcodeディレクトリが存在する”状況での「laravel new code」は失敗します。つまり「/home/vagrant/code/public」とすることは困難です。
なので、実際にはcodeディレクトリの直下で「laravel new プロジェクト名」を実行する必要があります。その為にあらかじめ「%homepath%\~\Homestead\Homestead.yaml」の「Sites: to:」を変更しておきます。
Homestead へのアクセス
Homestead 仮想マシンの作成
「%homepath%\~\Homestead\」に移動し「vagrant up」を実行して下さい。
Check your Homestead.yaml (or Homestead.json) file, the path to your private key does not exist.
上記エラーで vagrant up が失敗する場合は、「ssh-keygen」コマンドを実行し公開鍵と秘密鍵のペアを作成してください。コマンドの途中で保存するパスや鍵自身のパスワードを尋ねられますが、何も入力せずエンターで問題ありません。
Hyper-V が悪さをしている可能性が高いです。以下の記事に詳細を載せていますので参考にしながら対応してください。
Homestead に SSH で接続する
Homestead はデフォルトでIPアドレス 192.168.10.10 が割り当てられています。ホスト OS の仮想 NIC にも 192.168.10.1 が自動で割り当てられるので、特に設定をしなくても仮想マシンに SSH 可能です。
デフォルトユーザ/パスワードは「vagrant / vagrant」です。ベースが Ubuntu なので root は無効化されています。
Laravel プロジェクトの作成
「cd ~/code」で移動し、「laravel new プロジェクト名」でプロジェクトを作成します。laravel new コマンドはカレントディレクトリにプロジェクトを作成するので事前に”~/code”に移動しています。
ホスト OS の共有フォルダを確認
ホスト OS の共有フォルダにプロジェクトフォルダが同期されていることを確認してください。
ブラウザから 192.168.10.10 にアクセス
おめでとうございます!Homestead の Laravel サイトに無事アクセスすることが出来ました。
最後に:Homestead の起動方法とシャットダウン方法
Homestead の起動とシャットダウンは「%homepath%\~\Homestead\」に移動して以下のコマンドを実行します。
vagrant up #起動。作成と同じ。
vagrant halt #停止。