Laravelの開発を行うにあたり、PHPの実行環境やMySQLの実行環境をPCに整えて開発する必要がありました。 MAMPやXAMPPを利用してなるべく手軽にインストールする方法はありましたが、今回はVagrantやVirtualboxを利用した仮想マシンでLaravelを動作させていきます。

LaravelのHomestead設定

3年以上前に更新されました。情報が古い可能性があります。
更新日 : 2020年02月05日

Laravelの開発を行うにあたり、PHPの実行環境やMySQLの実行環境をPCに整えて開発する必要がありました。

MAMPやXAMPPを利用してなるべく手軽にインストールする方法はありましたが、今回はVagrantVirtualboxを利用した仮想マシンでLaravelを動作させていきます。

Homesteadとは

Laravel用の仮想マシンとしてHomesteadというものが提供されています。

このHomesteadではVagrantを利用して仮想マシンを構築します。HomesteadのboxをインストールしVirtualbox上で動作させるもので、この仮想マシンを起動すると、Laravelに必要なツール(PHP・MySQL・Webサーバーetc…)がすでにインストールされ、設定された状態で動作します。

Homesteadの仮想マシンを起動すると、PCのブラウザでアクセスするだけでLaravelが動作していることをすぐに確認できます。

HomesteadはLaravelのドキュメント(2020年1月時点でバージョン6.12.0)にも使い方をすでに記載してあり、今回はそのドキュメントに沿って仮想マシンを構築していきます。

Homesteadのインストールと設定

今回のHomesteadのインストールと設定はComposerを利用して作成していきます。

Composerを利用したHomesteadのインストールを行うことにより、Laravelのプロジェクト別に仮想マシンを立ち上げることができ、他の開発者にも同一の環境を提供しやすくなります。

事前にComposerをインストールしておきましょう。macOS版はこちらWindows版はこちら

Homesteadのインストール

Composerを利用してHomesteadをプロジェクトに導入していきます。ドキュメントではプロジェクトごとにインストールの部分です。

まずはmacOSではターミナル・Windowsではコマンドプロンプトを利用して、Laravelのプロジェクト内部まで移動します。(composer.jsonファイルが存在するディレクトリまで移動)

$cd Laravelのプロジェクトパス

composer.jsonが存在するディレクトリまで移動できたら、composerコマンドを利用してHomesteadをインストールできます。

$composer require laravel/homestead --dev

これでHomesteadに必要なファイル群がインストールされます。--devというオプションをつけることにより、開発時のみこのHomesteadを利用する設定でインストールできます。

この時点ではVagrantでHomestead仮想マシンを起動するために必要なVagrantfileが存在しません。さらにHomesteadでは専用の設定ファイルとしてHomestead.yamlファイルが必要です。(Vagrantfile内でHomestead.yamlファイルに記載された設定値を利用する形)

このVagrantfileHomestead.yamlファイルを生成するために以下のコマンドを実行します。

macOSの場合は

$php vendor/bin/homestead make

Windowsの場合は

$vendor\bin\homestead make

を実行してください。実行するとHomestead Installed!とインストールされたというメッセージが出力されます。これでVagrantfileHomestead.yaml、その他Homesteadを利用するのに必要なファイルが作成されます。

Homesteadの設定(サーバー接続のための鍵生成)

Homestead.yamlファイルにはHomesteadの設定が記述されています。上記の作業どおりにHomestead.yamlファイルを生成した場合には、この設定ファイルを編集する必要はほとんどありませんが、サーバーに接続するための鍵ファイルの生成を行わなければ仮想マシンが起動できないため、鍵生成を行っていきます。

鍵生成を行わずに仮想マシンを起動しようとすると、以下のように鍵がないので作成できないというメッセージが出力されます。

$vagrant up
Check your Homestead.yaml (or Homestead.json) file, the path to your private key does not exist.

macOSの場合

macOSを利用している場合には鍵生成用のコマンドが用意されています。次のコマンドを実行して鍵生成を行います。ssh-keygen -t rsa -f ~/.ssh/id_rsa

$ssh-keygen -t rsa -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/user-home/.ssh/id_rsa.
Your public key has been saved in /Users/user-home/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:********************************************
The key's randomart image is:
+---[RSA 2048]----+
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
+----[SHA256]-----+

途中にEnter passphrase (empty for no passphrase):となり、パスワードの設定を求められますが、今回はパスワードはなしで作成していくため、2回Enterを押してそのまま進めましょう

作成できると四角い枠の中に謎の文字が出現されるはずです。これでHomestead.yamlに必要なid_rsaファイルとid_rsa.pubファイルが作成できました。

Windowsの場合

Windowsの場合にはmacOS版で利用できたssh-keygenコマンドがインストールされていないため、別途インストールする必要があります。

Git for Windowsというソフトウエアをインストールすることでこのコマンドが使えるようになるので、Git for Windowsのインストールをまずは行いましょう。

Git for Windowsを上記のリンクの方法でインストールすると、コマンドプロンプトでssh-keygenコマンドが利用できます。

以下のコマンドを順番に行い、鍵生成を行います。

# 必要なディレクトリの作成
$mkdir %HOMEDRIVE%%HOMEPATH%\.ssh

# 鍵生成
$ssh-keygen -t rsa -f %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in \Users\user-home\.ssh\id_rsa.
Your public key has been saved in \Users\user-home\.ssh\id_rsa.pub.
The key fingerprint is:
SHA256:********************************************
The key's randomart image is:
+---[RSA 2048]----+
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
+----[SHA256]-----+

これでHomestead.yamlファイルに必要なファイル類が揃ったことになります。

Homesteadの起動

ここまで設定ができれば、あとは仮想マシンを起動するだけです。

Vagrantの入門どおりに起動コマンドをVagrantfileがある場所(Laravelがインストールされているディレクトリ内)で以下のコマンドを実行しましょう。

$vagrant up
Bringing machine 'laravel-test' up with 'virtualbox' provider...
==> laravel-test: Checking if box 'laravel/homestead' version '8.1.0' is up to date...
==> laravel-test: Clearing any previously set forwarded ports...
==> laravel-test: Clearing any previously set network interfaces...
==> laravel-test: Preparing network interfaces based on configuration...
    laravel-test: Adapter 1: nat
    laravel-test: Adapter 2: hostonly
==> laravel-test: Forwarding ports...
    laravel-test: 80 (guest) => 8000 (host) (adapter 1)
    laravel-test: 443 (guest) => 44300 (host) (adapter 1)
    laravel-test: 3306 (guest) => 33060 (host) (adapter 1)
    laravel-test: 4040 (guest) => 4040 (host) (adapter 1)
    laravel-test: 5432 (guest) => 54320 (host) (adapter 1)
    laravel-test: 8025 (guest) => 8025 (host) (adapter 1)
    laravel-test: 9600 (guest) => 9600 (host) (adapter 1)
    laravel-test: 27017 (guest) => 27017 (host) (adapter 1)
    laravel-test: 22 (guest) => 2222 (host) (adapter 1)
==> laravel-test: Running 'pre-boot' VM customizations...
==> laravel-test: Booting VM...
==> laravel-test: Waiting for machine to boot. This may take a few minutes...
    laravel-test: SSH address: 127.0.0.1:2222
    laravel-test: SSH username: vagrant
    laravel-test: SSH auth method: private key
    laravel-test: Warning: Connection reset. Retrying...
    laravel-test: Warning: Remote connection disconnect. Retrying...
==> laravel-test: Machine booted and ready!
==> laravel-test: Checking for guest additions in VM...
==> laravel-test: Setting hostname...
==> laravel-test: Configuring and enabling network interfaces...
==> laravel-test: Mounting shared folders...
    laravel-test: /vagrant => project-dir/laravel-test
    laravel-test: /home/vagrant/code => project-dir/laravel-test
==> laravel-test: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> laravel-test: flag to force provisioning. Provisioners marked to run always will still run.

仮想マシンがきちんと起動できているか確認するために以下のコマンドで確認できます。

$vagrant status
Current machine states:

laravel-test              running (virtualbox)

The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.

runningと表示されていれば起動済みです。

ブラウザでアクセスして動作確認

起動ができていれば、ブラウザでアクセスが可能な状態になっています。

vagrant up実行時に一応表示はされますが、仮想マシンからPCへポートのリダイレクトが設定されています。Homesteadではデフォルトでポート8000番を利用できるようになっているので、http://localhost:8000でアクセスするとLaravelのページが表示されます

ブラウザ確認
ブラウザ確認

このようにトップページが表示されれば成功です!

あとはLaravelのルーティングどおりに動作します。開発するべきコードをPCで作業して変更していくと、仮想マシンにも自動的に反映されます。(正確にはコードを仮想マシンと共有している状態)

他の開発者にも同一の環境が提供でき、複数人での開発を簡単に行うことができます。