Laravelの開発環境を構築するためにはさまざまな方法がありますが、今回はLaravel Homesteadを利用した方法を説明しています。Laravel Homesteadは仮想化技術を利用しているため仮想化を実現するためのソフトウェアVitualBoxとそれを支えるVagrantが必要となります。それらのソフトのインストールが必要になりますが、ローカルのPCにPHPやウェブサーバ、DBなどのソフトウェアを個別にインストールし管理していくことと比較すればそれほど難しい設定ではありません。

本文書では、mac OSはCatalina、Laravelのバージョンは6.xをインストールします。

MacではHomestead以外にもLaravel Valetを使ってLaravel環境を構築することができます。Windowsもその他の選択肢としてXAMPPを使った方法もあります。

MacではHomestead, Valetを利用せず直接OS上でLaravel環境を構築することも可能です。しかし、OSに直接パッケージをインストールする場合はそれらの管理が煩雑になります。

VirtualBox

VitualBoxとは

Virtual BoxはOS上に別のOSを稼働させることができる仮想化ソフトウェアです。1台のPC上で複数のOSを同時に利用することができます。今回はLaravel Homesteadを利用して、mac OS上でLinux OSのUbuntuを稼働させ, UbuntuにLaravelをインストールします。

Vitual Boxのインストール

VirtualBoxはVitualBoxのホームページ上からパッケージをダウンロードすることでインストールを行うことができます。

ホームページにアクセスし下記画面中央部にあるVitualBox paltform packageからOS X hostsをクリックします。パッケージのダウンロードが開始されます。

ダウンロードページ
ダウンロードページ

下記のメッセージが表示されますが、OKボタンをクリックしてください。

確認画面
確認画面

インストール画面が表示されるので左上のVirtualBox.pkgをダブルクリックしてください。

インストール画面
インストール画面

確認画面が表示されますが、そのまま続けるボタンをクリックしてインストールを進めてください。

vitualboxインストール画面
vitualboxインストール画面
Oracle VM VituralBox
Oracle VM VituralBox

インストールボタンが表示されるのでインストールボタンをクリックするとインストールが開始されます。

インストールボタンクリック
インストールボタンクリック

パスワードを聞かれるのでパスワードを入力するかTouch IDがある場合は指紋認証を行ってください。

そのままインストールを続けると機能拡張がブロックされるためセキュリティの環境設定を開いて許可する必要があります。

セキュリティ
セキュリティ

セキュリティとプライバシーの画面の左下にある変更するにはカギをクリックしますのアイコンをクリックしてください。

セキュリティとプライバシー画面
セキュリティとプライバシー画面

パスワードを入力するかTouch IDがある場合は使用してください。

パスワード確認画面
パスワード確認画面

App Storeと確認済みの開発元からのアプリケーションの許可ボタンをクリックしてください。先程ブロックされた処理が許可されます。

アプリケーションの許可
アプリケーションの許可

インストールがブロックされたのでインストーラをゴミ箱を入れるかどうか確認画面がでますが、ここでは残すを必ず選択してください。

ゴミ箱に入れるか選択画面
ゴミ箱に入れるか選択画面

インストールの最初の画面に戻りまた最初からインストールを行う必要がありますが、今度はブロックされずに進めます。

vitualboxインストール画面
vitualboxインストール画面

インストールが完了し下記の画面が表示されたらVirtualBoxのインストールは完了です。

インストール完了画面
インストール完了画面

インストールパッケージをゴミ箱に捨てるか確認画面が表示されますが、ここでは捨てるを選択して大丈夫です。

Vagrant

Vagrantとは

Vagrantを利用すると仮想化環境の構築、操作を簡単に行うことができます。

VagrantはOS、ソフトウェア情報をまとめたBoxを利用して仮想マシン上にOS、ソフトウェア環境を構築していきます。Boxを利用することでだれでも同じ環境を構築することができます。Laravel HomesteadのBoxが作成されているので、そのBoxを利用することで短時間でLaravel環境を構築することができます。

Homesteadに含まれるパッケージ
Homesteadに含まれるソフトウェア
ローカルマシン上でLaravelを構築したい場合は上記のソフトウェアを個別にインストールしてバージョン管理を行う必要があります。

Vagrantのインストール

VagrantもVirtualBoxと同様に公式ホームページからパッケージをダウンロードしてインストールを行います。

Vagrantのホームページにアクセス後、画面下部の中央にあるDownloadボタンをクリックしてください。

Vagrantホームページ
Vagrantホームページ

Download画面を下にスクロールしてmacOS 64bitをクリックしてください。パッケージのダウンロードが開始されるので、ダウンロードが完了したらパッケージをダブルクリックしてください。

macOSを選択
macOSを選択

インストール画面が表示されるので、vagrant.pkgをダブルクリックしてください。

インストール画面
インストール画面

vagrant.pkgが悪質なソフトウェアかもしれないということで開くことができないため、セキュリティとプライバシーの設定が必要になります。

メッセージが表示される
メッセージが表示される

メニューバーからシステム環境設定を開いて、セキュリティとプライバシーのアイコンをクリックしてください。ここでは右中央にあります。

システム環境設定を開く
システム環境設定を開く

セキュリティとプライバシー画面が表示されるので、下にある”vagrant.pkgは開発元を確認できないため、使用がブロックされました”の右にあるこのまま開くボタンをクリックしてください。

セキュリティとプライバシー画面
セキュリティとプライバシー画面

下記の画面が表示されるので、開くボタンをクリックしてください。

確認画面
確認画面

インストールの画面が表示されるので続けるをクリックしてください。

インストール開始画面
インストール開始画面

パスワードを聞かれるので、パスワードを使用するかTouch IDを使用してください。

パスワード確認画面
パスワード確認画面

そのままインストールを進め下記の画面が表示されたら、Vagrantのインストールは完了です。

インストール完了画面
インストール完了画面

インストーラーをゴミ箱に入れるか確認画面がでるので、ゴミ箱に入れるのボタンをクリックしてください。

ゴミ箱へすてるかの確認画面
ゴミ箱へすてるかの確認画面

Homestead Vagrant Boxインストール

Vitrual BoxとVagrantをインストールした後は、Laravel用の仮想マシンの作成に必要なlaravel/homesteadのboxをvagrant addコマンドを実行してダウンロードします。

vagrant box addコマンドは環境にもよりますが時間がかかるので時間に余裕がある時に実施してください。実行した環境では30分程度でした。


 % vagrant box add laravel/homestead
==> box: Loading metadata for box 'laravel/homestead'
    box: URL: https://vagrantcloud.com/laravel/homestead
==> box: Adding box 'laravel/homestead' (v8.2.1) for provider: virtualbox
 ・
 ・
==> box: Successfully added box 'laravel/homestead' (v8.2.1) for 'virtualbox'!
vagrant box add コマンドを実施すると時間がかかるため目を話しているとAn error occurred while downloading the remote file. The error message, if any, is reproduced below. Please fix this error and try again.
OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 54 vagrantで実行に失敗。再度実行すると上記のように成功しました。2回目は途中からの再開なので時間はあまりかかりませんでした。

vagrant box listを実行するとダウンロードしたboxのlaravel/homesteadの情報が表示されます。


% vagrant box list 
laravel/homestead (virtualbox, 8.2.1)

Homesteadの初期設定

gitコマンドでhomesteadのリポジトリのクローン(複製)を~/Homesteadディレクトリの中に保存します。Homesteadディレクトリは自動で作成されるので、事前作成は必要ありません。リポジトリの中には、仮想マシンの作成に利用するVagrantfileなどの設定ファイルやinit.shなどのスクリプトファイルが含まれています。


 % git clone https://github.com/laravel/homestead.git ~/Homestead
 % git clone https://github.com/laravel/homestead.git ~/Homestead
Cloning into '/Users/mac/Homestead'...
remote: Enumerating objects: 9, done.
remote: Counting objects: 100% (9/9), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 4175 (delta 1), reused 6 (delta 1), pack-reused 4166
Receiving objects: 100% (4175/4175), 926.05 KiB | 1.07 MiB/s, done.
Resolving deltas: 100% (2563/2563), done.

Homesteadディレクトリに移動し、下記のコマンドを実行します。Homesteadの設定に必要なHomestead.yamlファイルがディレクトリ内に作成されます。このファイルを変更することで各自の環境に合わせてた仮想マシンを作成することができます。


% bash init.sh 
Homestead initialized!

SSH Keyの作成

vagrantに接続するためのsshキーの作成を行います。ssh-keygen -t rsaコマンドでキーの作成を行うことができます。実行後.sshディレクトリの下に秘密鍵と公開鍵のid_rsa, id_rsa.pubファイルが作成されます。


% ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/mac/.ssh/id_rsa): 
Created directory '/Users/mac/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/mac/.ssh/id_rsa.
Your public key has been saved in /Users/mac/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:gor12GnN5e63xzkJs1TF3L1lsLZTyfKdCmsSESrppto mac@macnoMBP
The key's randomart image is:
+---[RSA 2048]----+
|         .   o.o.|
|      . . .   =.*|
|     o . .   oo++|
|    ...   . ..o+o|
|  . .o. S. o  oo.|
| o =o+ +  = o .. |
|. o.= o .o B +   |
|  o.   .  = *    |
| . E   .o..o .   |
+----[SHA256]-----+

Homestead.yamlファイルの説明

Homestead.yamlでは仮想化マシン(OS)のIPアドレス、ドメインの設定やLaravelをインストールを行うディレクトリの設定を行います。Optional Softwareの追加設定もここで行います。

Homestead.yamlのデフォルト設定は下記の通りです。


 ---
ip: "192.168.10.10"
memory: 2048
cpus: 2
provider: virtualbox

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

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

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

databases:
    - homestead

features:
    - mariadb: false
    - ohmyzsh: false
    - webdriver: false

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

ip、merory, cpus:は仮想マシン(OS)に割り当てられるリソースです。

provider:はどの仮想化ソフトウェアを利用するか設定する項目でここではVitualboxを利用するのでvitualboxとなります。VMWARE等も使用可能です。

authorizeとkeys:はsshキー作成で作成したキーのパスが設定されています。~(チルダ)はユーザのホームディレクトリを表し、本環境では/Users/macとなります。

folders:はローカルマシンのディレクトリと仮想マシン上のOSのディレクトリの結びつける設定です。ローカルマシンの/Users/mac/codeにアクセスすれば仮想マシン上の/home/vagrant/codeの中身を確認することができます。

sites:toは公開ディレクトリです。ブラウザでhomestead.testにアクセスすると/home/vagrant/code/public下のindex.htmlやindex.phpファイルの中身が表示されます。

databases:指定した名前のデータベースが仮想マシンのOS上のMySQLに作成されます。(後ほど確認)

features:mariadbをtrueにするとmysqlの代わりにmariadbがインストールされます。追加のソフトウェアがある場合はここに追加します。

Homestead.yamlファイルの更新

今回はhomestead.yamlファイルの中のsitesを以下のように書き換えます。


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

/home/vagrant/codeの下にblogという名前がありますが、この後Laravelプロジェクトをblogという名前で作成する予定です。

codeディレクトリの作成

ローカルマシンのユーザディレクトリにcodeディレクトリを作成します。


 % mkdir code

hostsファイルの追加

Homestead.yamlで設定されているIPアドレスとドメイン名を/etc/hostsファイルに追加します。


##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
192.168.10.10   homestead.test

仮想マシンの起動

仮想マシンを起動するまでの設定が完了したので、vagrant upコマンドで仮想マシンを起動します。


 % vagrant up

起動完了後、statusコマンドで稼働状況を確認します。runningと表示され稼働していることがわかります。


% vagrant status
Current machine states:

homestead                 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`.

Homestead.yamlファイルなど更新した場合は一度vagrant haldコマンドで停止することが可能です。


% vagrant halt
==> homestead: Attempting graceful shutdown of VM...

停止した場合のステータスも確認しておきます。poweroffとなっていることを確認することができます。


% vagrant halt
==> homestead: Attempting graceful shutdown of VM...
mac@macnoMBP Homestead % vagrant status
Current machine states:

homestead                 poweroff (virtualbox)

The VM is powered off. To restart the VM, simply run `vagrant up`

Laravel環境の構築

Laravelのインストール

vagrant upが完了したらsshコマンドでvagrantに接続します。


 % vagrant ssh

接続後、codeディレクトリの下でLaravelのプロジェクトの作成を行います。プロジェクトの名前は、homestead.yamlで設定したblogを使っています。


vagrant@homestead:~$ composer create-project --prefer-dist laravel/laravel blog

インストールが完了したら、ローカルマシン側から/Users/mac/codeにアクセスするとインストールしたLaravelのファイルにアクセスできることを確認してください。

ブラウザでhomestead.testにアクセスするとLaravelの初期画面が表示されれば、ここまでのすべての設定は正常に行われています。

Laravel初期画面
Laravel初期画面

データベースへの接続

mysqlコマンドを利用してMySQLデータベースへの接続を行います。

MySQLへの接続には2つのユーザアカウントで行うことができます。

  • rootユーザ、パスワードはなし
  • homesteadユーザ、パスワードはsecret

$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 35
Server version: 5.7.27-0ubuntu0.18.04.1 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners

show databaseコマンドで作成されているデータベースを確認します。homesteadデータベースが存在することが確認できます。


mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| homestead           |
| #mysql50#lost+found |
| mysql               |
| performance_schema  |
| sys                 |
+---------------------+

データベースと接続ユーザの情報がわかったのでhomesteadの接続設定を.envファイルで行います。.envファイルを開いてデータベース接続のパラメータを下記のように設定します。


DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

usersテーブルの作成についてはLaravelで事前にマイグレーションファイルが用意されているので、php artisan migrateコマンドを実行します。実行後下記のメッセージが表示されたら、homesteadデータベースへのテーブルの作成は完了しています。


$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.08 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.09 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.06 seconds)

コマンドラインでもテーブルの中身の確認を行うことができますがデータベース管理ソフトウェアのTablePlusを使って接続を行います。

インストール方法などについては下記の文書を参考にしてください。

TablePlusを起動して新規の接続でMySQLを選択します。

TablePlusの接続設定
TablePlusの接続設定

データベースへの接続に必要な情報を記述します。設定が完了したらConnectボタンをクリックしてください。

接続設定
接続設定

データベースへの接続が完了すると左側の列で作成されたテーブルを確認することができます。

データベースへの接続
データベースへの接続
接続時の設定のHostに127.0.0.1を設定した場合はポート番号を33060に設定すると接続できます。また、rootユーザでの接続はできません。