Edited at

【Laravel 5.5 or latest】Homestead で mac に Laravel 開発環境を構築


はじめに

前回の記事:Qiita - 【Laravel超入門】開発環境の構築(VirtualBox + Vagrant + Homestead + Composer)

前回の記事は Laravel 5.4 のときに構築した手順です。

少し古い箇所もあるため書き直しました。

今回は下記のバージョンで構築した手順を記載しています。

OS
git
VirtualBox
Vagrant

macOS High Sierra 10.13.6
2.19.1
5.2
2.1.5

Laravel の最新バージョンのダウンロード方法と、LTS の Laravel 5.5 の最新バージョンのダウンロード方法を説明しています。

今回は mac のみの手順となります。Windowsの方は前回の記事を参考にしてください。

前回の記事の第1章から第5章で Laravel、VirtualBox、Vagrant、Homestead、Composerの基本的な説明をしております。

この記事では第6章にあたる開発環境の構築のみ言及しています。

基本的なことについて理解していない方は、前回の記事をご覧ください。


開発環境の構築

Homestead を利用して、開発環境の構築をしていきましょう。


  1. Vagrant と VirtualBox のダウンロードとインストール

  2. Homestead vagrant box のダウンロード

  3. Laravel Homestead のダウンロード

  4. Homestead の設定ファイルの作成

  5. SSH 鍵ファイルの作成

  6. Homestead の設定ファイルの編集

  7. 仮想マシンの起動

  8. 仮想マシン上で Composer を利用して、Laravel ファイルをダウンロードする

  9. Laravel ページの表示


Step 1 Vagrant と VirtualBox のダウンロードとインストール


Vagrant のインストール

Vagrant を DOWNLOAD VAGRANT からダウンロードして、インストールしてください。


VirtualBox のインストール

VirtualBox を Download VirtualBox からダウンロードして、インストールしてください。

「Download VirtualBox 5.2」を選択したあとに、mac の方は「OS X hosts」を選択してください。

ダウンロード後、インストールしてください。

私の環境では、VirtualBox のインストールを試したときに「インストールできませんでした」と表示されました。

新しい mac ではセキュリティ強化のために「許可」する必要があります。

「システム環境設定 > セキュリティとプライバシー」を開いてください。

「ダウンロードしたアプリケーションの実行許可」の「開発元"Oracle America, Inc."のシステムソフトウェアの読み込みがブロックされました。」の右側に「許可」があります。

「許可」を選択してください。

クリックしても反応しない場合があります。

その場合は、セーフモードで起動して、「許可」してください。

セーフモードは起動時に「shift」キーを教えて起動できます。


セーフモードで起動する

セーフモードで起動するには、以下の手順を実行してください。

1.mac を起動または再起動して、すぐに「shift」キーを押し、そのまま押し続けます。Apple ロゴが画面に表示されます。Apple ロゴが表示されない場合の対処法については、こちらの記事を参照してください。

2.ログインウインドウが表示されたら「shift」キーを放します。起動ディスクが FileVault で暗号化されている場合は、ログインが 2 回必要になることがあります。1 回目で起動ディスクのロックが解除され、2 回目で Finder にログインします。

引用:セーフモードを使って Mac の問題を切り分ける - Apple サポート


セーフモードで起動すると「許可」できます。

「許可」したらセーフモードは必要ないので、再起動してください。


Step 2 Homestead vagrant box のダウンロード

ターミナルから下記のコマンドを打って、Homestead vagrant box をダウンロードしてください。

vagrant box add laravel/homestead

Enter your choice とお使いの仮想化ソフトウェアを聞かれます。

今回は virtualbox を利用しますので、Virtualbox の番号を入力してください。

私が試したときは、 3) virtualbox と表記されていたので、 3 と入力しました。

これで、ダウンロードが開始されます。

私の環境では、約 10 分ほどかかりました。


Step 3 Homestead のダウンロード

任意のディレクトリを作成して、そこに Homestead のファイルをダウンロードします。

ディレクトリの作成場所は、ユーザーディレクトリの直下などターミナルからアクセスしやすいディレクトリがよいかと思います。

この記事では、ホームディレクトリ(/Users/ユーザー名)の直下に Homestead のファイルをダウンロードします。


ディレクトリ

/Users/ユーザー名/Homestead/以下ファイル


ダウンロード時に Homestead のフォルダが作成されますので、予め作成しておく必要はありません。

ユーザー名の直下のディレクトリに移動してください。

ユーザー名の直下に移動するには下記のようにコマンドを打ちます。


ターミナル(ユーザー名直下ディレクトリに移動するコマンド)

cd ~/


下記のコマンド打ち Homestead のファイルをダウンロードします。


ターミナル(Homesteadをダウンロードするコマンド)

git clone https://github.com/laravel/homestead.git Homestead


mac を利用している方で、gitコマンドをはじめて使う方は、Xcode をインストールする必要があります。

App Store から Xcode をインストールした後に、再度コマンドを打ってください。


Step 4 Laravel Homestead の設定ファイルの作成

ダウンロードした Homestead のフォルダに移動してください。

今回、ユーザー名直下に Homestead のファイルをダウンロードしたので、下記のディレクトリに移動します。


ディレクトリ

Users\ユーザー名\Homestead


Homestead ディレクトリに移動したら、下記のコマンドを入力してください。


ターミナル(Homesteadを初期化するコマンド)

bash init.sh


Homestead initialized! と表示され、Homestead.yaml が作成されます。


YAML って何?

このYAML(ヤムル・ヤメル)ファイルとは何者なのか簡単に見ていきましょう。

YAML は 「YAML Ain't a Markup Language」 の略で 「YAMLはマークアップ言語ではない」 という意味です。

HTML(HyperText Markup Language)のようなマークアップ言語ではないということですね。

YAMLファイルの拡張は yml または yaml です。

YAML は 主に設定ファイル を記述するのに用いられる言語です。

YAML には 読みやすい、書きやすい、わかりやすい という特徴があります。

例えば、配列を表すには先頭に - を入力するだけです。


YAML

- aaa

- bbb
- ccc

こんな感じで簡単に記述できます。

実際に Homestead.yaml の記述を見ると簡単な記述です。

Homestead.yaml の記述を変更する前に SSH鍵ファイルを作成しましょう。


Step 5 SSH鍵ファイルの作成

SSH とは Secure Shell(セキュアシェル)の略で、暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコルです。

ホストOSとゲストOSとのやり取りは SSH で行います。

SSH でやり取りするのに必要な鍵を作成します。

まずは、既にSSH鍵ファイルが作られていないか確認します。

ホームディレクトリ移動します。


ターミナル(ホームディレクトリに移動するコマンド)

cd ~/


ホームディレクトリに移動した後に、下記コマンドを打ち、SSH鍵ファイルが存在しないか確認します。


ターミナル(SSH鍵ファイルが存在するか確認するコマンド)

ls -la I grep .ssh


id_rsaid_rsa.pub が表示されれば、既にSSH鍵ファイルはあります。

無い方は、作成します。


ターミナル(SSH鍵ファイルを作成するコマンド)

ssh-keygen -t rsa


Enter file in which to save the key と保存するディレクトリを聞かれるので、そのまま enter を押します。

Enter passphrase パスフレーズを求められますので、任意のパスフレーズを入力してください。

再度パスフレーズを求められるので、先程入力したパスフレーズを入力してください。

これでSSH鍵ファイルが作成されます。

確認のために先程のコマンドを入力してみましょう。


ターミナル(SSH鍵ファイルが存在するか確認するコマンド)

ls -la I grep .ssh


id_rsaid_rsa.pub が表示されます。


Step 6 Homestead の設定ファイルの編集

Homestead の設定を記述した Homestead.yaml というファイルがあります。

設定の変更・確認するには Homestead.yaml を利用します。

今回、Homestead.yaml の初期設定のまま利用するため、基本的には編集する必要はありませんが、編集方法を一通り説明します。

このあとの手順でネットワークのエラーが表示された方は、 Homestead.yaml の設定を変更する必要があります。

一通り読んで把握してください。

最初に Homestead のディレクトリに移動してください。


ターミナル(Homesteadディレクトリに移動するコマンド)

cd ~/Homestead


このディレクトリに Homestead.yaml があります。

フォルダを開いて、直接テキストエディタで編集することもできますが、今回はターミナル上から編集します。

Homestead のディレクトリに移動したら vim Homestead.yaml と入力して Homestead.yaml を開きましょう。

vim というのは高機能なテキストエディタのことで、ターミナル上からファイルを編集できます。

下記が Homestead.yaml のデフォルトの記述です。


Homestead.yaml

---

ip: "192.168.10.10"
memory: 2048
cpus: 1
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

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

# blackfire:
# - id: foo
# token: bar
# client-id: foo
# client-token: bar

# zray:
# If you've already freely registered Z-Ray, you can place the token here.
# - email: foo@bar.com
# token: foo
# Don't forget to ensure that you have 'zray: "true"' for your site.
~
~
~
~
~
~
~
~
~


様々な記述がありますが、変更するなら folders の設定かと思います。

mac 側と仮想環境側のフォルダを共有するとこで、mac 側から Laravel のファイルを変更することができます。

その共有フォルダの設定が folders です。

foldersmap は mac 側の共有ディレクトリのことで、デフォルトでは ~/code です。

これはユーザー名直下の code ディレクトリを指しています。

code ディレクトリはありませんので、code フォルダを作成してください。

/Users/ユーザー名/code

今後、code フォルダに Laravel 自体のファイルをここに入ります。


フォルダ名やディレクトリの位置を変更したい方はここのパスを変更するようになります。

foldersto/home/vagrant/code は仮想環境側の共有フォルダのディレクトリです。

今後、仮想環境にアクセスしてこのディレクトリに移動して操作をすることもあるので、ディレクトリの位置だけ覚えておいてください。

ちなみに、vim で開いた状態で i を入力すると INSERT モードになり、編集ができます。

ディレクトリなど変更する場合は、 i を入力してから適宜変更してください。

esc を押すと INSERT モードが解除されます。

:wq を押して enter を押すと上書き保存されます。

今回は、folders について説明しましたが、Homestead.yaml では下記の設定が可能です。

項目
内容

ip
Vagrant に割り当てられるIPアドレス。

memory
仮想サーバに割り当てるメモリの容量。

cpus
CPUの数。

provider
利用する仮想化ソフトウェアの指定。Vagrant では仮想化ソフトウェアのことをプロバイダと呼びます。

authorize
SSH公開鍵のディレクトリ。

keys
SSH秘密鍵のディレクトリ。

folders
共有フォルダの指定です。map がホストOS側のディレクトリで、to がゲストOS側のディレクトリ。

sites
ホスト名 homestead.test でアクセスしたときに to に記載した仮想マシンのディレクトリを参照。

databases
データベース。


Step 7 仮想マシンの起動

今までの手順通りなら、Homestead のディレクトリにいると思いますが、別のディレクトリにいる方は、Homestead のディレクトリに移動してください。

今回の場合なら、下記のように記述すると Homestead ディレクトリに移動します。


ターミナル(Homesteadディレクトリに移動)

cd ~/Homestead


Homested ディレクトリに移動した後に下記のようにコマンドを入力します。


ターミナル

vagrant up


仮想マシンが起動します。

vagrant up に成功した方は、VirtualBox を見ると homestead-7 と表示され、起動しているのを確認できます。

vb.jpg

私の場合は vagrant up をしたときに下記のエラーが表示されました。

同様のエラーが表示された方は、参考に対処してください。

エラーが表示されなかった方は、次のステップへ進んでください。


【エラー】ネットワークの設定エラー

私の環境では、vagrant up を行ったときに、下記のネットワークのエラーが表示されました。


エラー

The specified host network collides with a non-hostonly network!

This will cause your specified IP to be inaccessible. Please change
the IP or name of your host only network so that it no longer matches that of
a bridged or non-hostonly network.

mac のローカルIPアドレスと ホストオンリーネットワークが同じセグメントにあるのでエラーが表示されました。

別のセグメントに変更する必要があります。

mac のローカルIPアドレスは、ifconfig で確認できます。

確認すると、おそらく、192.168.○○.○ になっているはずです。

私の場合は、mac のローカルIPアドレスが 192.168.10.○ で、Homestead.yaml で設定したIPアドレスも 192.168.10.10 にしており、同じセグメントになっておりました。

別のセグメントにするために Homestead.yaml の IP を 192.168.30.10 に変更しました。

その後に、Homestead のディレクトリ内で vagrant up をすると問題なく仮想マシンが起動しました。


Step 8 仮想マシン上で Composer を利用して、Laravel ファイルをダウンロードする

vagrant up で仮想マシンは起動されていますので、仮想マシンを操作するために仮想マシンにログインします。


ターミナル(仮想マシンにログインするコマンド)

vagrant ssh


ターミナルの先頭の文字が vagrant@homestead: になります。

これは仮想マシン上にログインして操作しているためです。

SSHを利用して仮想マシンにログインしたので、次は code ディレクトリに移動します。


ターミナル(codeディレクトリに移動するコマンド)

cd code


Laravel の最新バージョンを利用したい方は下記のコマンドでダウンロードできます。


ターミナル(現在いるディレクトリの中に最新のLaravelをダウンロードするコマンド)

laravel new


LTS の Laravel 5.5 を利用したい方もいるかと思います。

Lravel 5.5 の最新バージョンをダウンロードするときは、下記のコマンドでダウンロードできます。


ターミナル(Laravelディレクトリの中にダウンロードするコマンド)

composer create-project --prefer-dist laravel/laravel blog "5.5.*"


いずれかのコマンドを打つとダウンロードが開始されます。完了するまでに、私の環境では約 10 分ほどかかりました。

バージョンを指定する方法では、code 内に blog フォルダが作成され、その中に Laravel のファイルがダウンロードされます。

現在、仮想マシンにログインした状態なので、ターミナルの先頭の文字も vagrant@homestead になっているはずです。

仮想マシンの code フォルダは mac のユーザーフォルダ直下の code と共有されるように設定されています。

この共有設定は先ほど説明した通り、 Homestead.yamlfolders に記述しています。


Homestead.yamlの抜粋

folders:

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

mac のユーザーフォルダ直下の code フォルダを開いてください。

blog フォルダ内に Laravel のファイルがダウンロードされているのが確認できます。

先ほどの Homestead.yamlsites を改めて見てみましょう。


Homestead.yamlの抜粋

sites:

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

to は仮想マシン側を表していますが、/home/vagrant/code/public になっています。

現状は blog フォルダを新たに作成してそこに Laravel のファイルをダウンロードしたため、/home/vagrant/code/blog/public  になっています。

blog の階層は不要です。

blog フォルダ内にある全てのファイルを、一つ上の階層の code 直下に移動してください。

code フォルダ内は mac と仮想マシンで共有されているので、この移動は mac の code フォルダを開いてファイルをドラッグして移動しても問題ありません。

ターミナル上で仮想マシン側で操作したい方は、cd blogblog フォルダに移動してください。

下記のコマンドで blog フォルダ内のファイルを一つ上の階層へ移動できます。

mv ./* ..

cd ~/codecode フォルダに移動してください。

ls を入力すると code フォルダ内にあるファイル・フォルダの一覧を確認できます。

blog フォルダは不要ですので、下記のコマンドで削除できます。

rmdir blog

現在、仮想マシンに入っているので、vagrant@homestead: で始まっているかと思います。

仮想マシンからログアウトするときは、logout とコマンドを打つとログアウトします。

仮想マシン上での操作は一通り終わりましたので、ログアウトしてください。

今回、blog フォルダ内にダウンロードしてから一つ上の階層へ移動するという無駄な作業をしています。

composer でダウンロードするときに blog フォルダを作らずにカレントディレクトリにダウンロードする方法を調べましたが、わかりませんでした。

composerで新たにフォルダを作らずにカレントディレクトリにダウンロードするコマンドをご存知の方は、教えてください。


Step 9 Laravel ページの表示

Homestead.yaml に記述した IPアドレスにブラウザからアクセスすると下記の Laravel ページが表示されます。

設定を変更していない方は、192.168.10.10 で、私の変更された方は 192.168.30.10 です。

laravel.png

私の場合は、Homestead.yaml の IP を 192.168.30.10 に設定したため、ブラウザで 192.168.30.10 を入力するとLaravelのページが表示されます。

設定を変えていない方は、192.168.10.10 で表示されるはずです。

IPアドレスでアクセスしても問題はないですが、わかりやすいように homestead.test と入力しても、Laravel のページが表示されるように設定してみましょう。

設定するには、ホスト名 homestead.test とIPアドレスの対応付けをします。


mac の場合

mac の場合は、ホスト名とIPアドレスの対応付けは /etc/hosts に記述されています。

Homestead.yaml を編集したときと同じく vim を使って hosts を編集します。

hosts は管理者権限がないと編集できないので、管理者権限で編集するために頭に sudo と記述します。

sudo と記述すると、管理者権限で実行できます。


ターミナル(hostsファイルを管理者権限で開くコマンド)

sudo vim /etc/hosts


管理者権限で実行したため、パスワードを入力が必要になると思いますので、mac のパスワードを入力してください。

hosts ファイルが表示されますので、i を入力して INSERTモードにし、最後の行に下記を追加します。


ターミナル(hosts)

192.168.10.10 homestead.test


私の環境と同じように 192.168.30.10 にされた方は下記のように記述してください。


ターミナル(hosts)

192.168.30.10 homestead.test


esc を押し、INSERTモードを終了します。

:wq を入力し、enter を押して上書き保存します。

これでブラウザから homestead.test を入力すれば、Laravelのページが表示されるようになります。

vagrant を終了するときは、下記のコマンドで終了させてください。

vagrant halt


php artisan migrate でエラーが発生する

php artisan migrate を実行すると下記のエラーが表示されました。

In Connection.php line 664:

SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = homestead and table_name = migrations)

In Connector.php line 67:

SQLSTATE[HY000] [2002] Connection refused

これは mac 側から php artisan migrate を実行しているためです。

vagrant ssh で仮想マシンへログインして、Laravel のファイルをダウンロードしてあるディレクトリ(この記事では code)に移動して php artisan migrate を実行すると問題なく実行できました。

mac 側から php artisan migrate を実行したい場合は、/Users/ユーザー名/code にある .env を開いて編集する必要があります。

. からはじまるファイルは最初から表示されていません。

command + shift + .. からはじまるファイルが表示されます。もう一度押すと非表示になります。

. からはじまるファイルを誤って削除すると動作しなくなる場合がありますので、削除しないように気をつけてください。

.env をテキストエディタで開くと下記の記述があります。

(テキストエディタではなく、ターミナル上から vim で開いても結構です。)

DB_CONNECTION=mysql

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

127.0.0.1192.168.10.10 に変更して保存してください。

私のように Homestead.yaml の IP を 192.168.30.10 に変更した方は、192.168.30.10 としてください。


TIPS


仮想マシンを起動・停止するには?

Vagrantfile があるディレクトリに移動してから、vagrant up してください。

Homestead を利用して開発環境を構築した方は、Homestead ディレクトリに Vagrantfile があります。

仮想マシンの起動だけではなく、vagrant halt で仮想マシンの停止をする場合も Vagrantfile があるディレクトリに移動してからコマンドを打ってください。

別のディレクトリで vagrant up を打つと下記のエラーが表示されます。


エラー

A Vagrant environment or target machine is required to run this

command. Run `vagrant init` to create a new Vagrant environment. Or,
get an ID of a target machine from `vagrant global-status` to run
this command on. A final option is to change to a directory with a
Vagrantfile and to try again.

vagrant ssh で仮想マシン内で操作している方は、logout と打つとホストOSのディレクトリに戻ります。

ホストOSの Vagrantfile があるディレクトリに移動してから、vagrant halt などを入力してください。


よく使う Vagrant & Linux/Unix コマンド一覧

vagrant を利用するときに、よく使うコマンドです。

コマンド
内容

vagrant up
仮想マシンの起動

vagrant halt
仮想マシンの停止

vagrant ssh
仮想マシンにSSHでログイン

vagrant status
仮想マシンの状態を確認

vagrant reload
仮想マシンの再起動

vagrant destroy
仮想マシンの破棄

vagrant suspend
仮想マシンの一時停止

vagrant resume
一時停止の復帰

vagrant -v
vagrant のバージョン確認

vagrant box list
ダウンロード済みのboxを確認

vagrant box remove xxx
boxの削除 xxxにはbox名を入力 ※homesteadを削除するなら vagrant box remove laravel/homestead

logout
仮想マシンからログアウト


Laravel を学べる書籍

2018年11月現在、Laravel について学べる代表的な書籍は下記の3冊になるかと思います。

他におすすめの書籍があれば教えてください。


「PHPフレームワーク Laravel入門」 秀和システム(2017/9/16)

本のタイトルの通り、Laravel入門者向けの書籍です。

2017年9月に出版しており、Laravel 5.4 をベースに執筆されていますが、5.5 開発版でも動作確認済みとのことです。

誤植がいくつかあるので、公式サイトの正誤表を確認しながら、読み進めていきましょう。

Laravelはバージョンによって異なるため、最新版よりは 5.5 (LTSで2018年11月現在もセキュリティサポートされているため)で試すのがよいかと思います。

1.jpg

引用:PHPフレームワーク Laravel入門 | 掌田津耶乃 |本 | 通販 | Amazon


「絶対に挫折させないアプリ開発 はじめてのLaravel」(2018/10)

PHP と Laravel の違い、フレームワークを利用するメリットを学ぶことを目的とした書籍です。

TODO アプリを素の PHP、Laravel(ルーティングメイン)、Laravel(MVC)で3回作成することで、PHP と Laravel の違いを学ぶことができます。

実際にコードベースで Laravel(フレームワーク)を利用するとどんなメリットがあるの?という方に最適です。

PHP でも TODO アプリを作成するため、理解するには PHP の基本的な知識な必要になります。

Laravel の基礎的なことは「PHPフレームワーク Laravel入門」の方がより詳説しているので、Laravel入門者は「PHPフレームワーク Laravel入門」で学んだ後にこの書籍を手に取るのがよいかと思います。

書籍版とダウンロード版があります。

3.jpg

引用:絶対に挫折させないアプリ開発 はじめてのLaravel - plumsa - BOOTH(同人誌通販・ダウンロード)


「PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応」ソシム (2018/9/26)

Laravel の基礎を学んだ後に、より深く知りたい方向けの書籍です。

右も左もわからない方には理解するのが難しいと思うので、入門書を終えてステップアップしたい方はこちらの書籍を読みましょう。

2.jpg

引用:PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応 | 竹澤 有貴, 栗生 和明, 新原 雅司, 大村 創太郎, 丸山 弘詩 |本 | 通販 | Amazon