こんにちは!あっきー(IwswAkht)です!
今回はHomesteadを使用したLaravelの環境構築の方法を記事にします。
VirtualBox、Vagrant、Homestead。
これらの言葉を聞いて何それ、おいしいの?という方に向けて全体的な概要を確認しながら実際にLaravelのトップ画面を表示するまでの方法をチュートリアル化した記事になります。
Windows環境、Mac環境どちらでも対応できるように書いてますのでOSによる違いは極力なくすようにしております。
また、実際に環境構築する中で発生したエラーなどもまとめてますので一度トライしたけどエラーがわからず挫折してしまった方などの参考にもなれば幸いです。
それではみていきましょう!
はじめに
まずそれぞれの概要を確認していきましょう。
VirtualBox→Vagrant→Homesteadの順番でみていくとそれぞれがどういう役割をになっているかわかりやすいと思いますのでそんな流れで説明していきます。
VirtualBoxとは
VirtualBoxはひとことで言えば、OS上で別のOSを実行できる仮想化ソフトウェアです。
windows上で仮想環境のmacのOSを起動するなど、その逆でmacの環境でwindowsを起動するなど、仮想環境でLinuxを使うなど。
プログラミングやパソコンにゆかりがあるひとなら、どれかしらにピントくるイメージがあるのではないでしょうか?
VirtualBoxはこのように違うOSやプログラミング言語を動かすためにVirtualBox上に仮想化した環境を作成するために使うアプリケーションになります。
ですが、VirtualBoxをインストールしただけではまだなにもできません。VirtualBoxでLaravelを動くようにするには次にOSを入れて、Webサーバを入れて、データベースを入れて、PHPを入れてなどやらなければならないことがたくさんあります。
そんな時に登場するのがVagrantです。
Vagrantとは
VagrantはOS、Webサーバ、データベース、プログラミング言語など構築しなければいけない仮想環境を簡単に作れる仕組みを提供するオープンソフトウェアです。
詳しいやり方は後ほど説明しますが、Vagrantをインストールするとvagrantコマンドをターミナル上で実行できるようになります。
基本的にこのvagrantコマンドで仮想環境(VirtualBox)に対して指示を出すことができますので、VirtualBoxをさわることなくVagrantを経由して操作を完結させることができます。
その中に$ vagrant boxというコマンドがあります。
このコマンドではDiscover Vagrant Boxesに公開されている仮想環境のセットアップファイルを自分の仮想環境にダウンロードすることができます。
試しにDiscover Vagrant Boxesの中を覗きますと、UbuntuだったりCentOSなどのOSがどの仮想環境上で動かせるか記載されているのが確認できます。
例えばcentos/7をダウンロードしたい場合は$ vagrant box add centos/7とコマンドを実行すればお手軽にOSが導入できるというイメージです。
Vagrantで仮想環境を簡単に導入できることがわかりましたが、Laravelを動かすためにはまだまだ足りない要素があります。
そこで出てくるのがHomesteadです。
Homesteadとは
HomesteadはLaravelを動かすための開発環境を簡単に構築できるツールになります。
Laravel公式(6.x)からHomesteadの中に含まれているソフトウェアが確認できます。
OS、サーバ、データベース、プログラミング言語、ライブラリ、様々なものがパッケージとして内包されていることが確認できますね。
実際にHomesteadで開発環境を構築するにはlaravel/homestead Vagrant boxとHomesteadをセットで使用します。
Vagrant boxでVirtualBoxにHomesteadを構築するためのファイルなどがダウンロードされGitHubに公開されている設定済みのVagrantfileなど使用してLaravelに必要なソフトウェアを導入するというイメージです。
Homesteadの素晴らしいところは簡単に環境を構築できるというのもありますが、個人的には複数人で共同で開発する時に環境を統一できるところにあります。
GitHubにHomesteadで環境構築したLaravelのコードがあった場合、自分のローカル環境にVirtualBoxとVagrantが導入されて入れば$ vagrant upで同じ環境が作れます。
ただ、デメリットというほどではないかもですが、逆にローカルで構築すると思わぬところで他の人(Homesteadで環境構築した人)では出なかったエラーが発生したりします。
例えば、以下のようなエラーが発生したとします。
エラー
1 2 |
xxxxx\Exception\RuntimeException You need to install the imagick extension to use this back end |
このエラーはPHPにモジュールがない時などに起きるエラーなのですが、これはローカルのPHPとHomesteadのPHPのモジュールの差異があったためです。
つまり、Homesteadで環境構築したら全員がHomesteadで足並みを揃えて開発するとパフォーマンスを発揮できますが、各々が好きに環境構築すると大変なこともあるという認識は持っておいて欲しいです。
概要はこのくらいにして実際に手を動かしてやっていきましょう。
環境構築の工程
まずはざっと一連の流れを確認しましょう
- VirtualBoxのインストール
- Vagrantのインストール
- Gitのインストール
- 環境構築
また、Macの場合はXcodeがあらかじめインストールされている前提ですのでインストールしていない人はインストールしてからよんでください。
VirtualBoxのインストール
以下のURLよりダウンロードを行います。
VirtualBoxは仮想環境(ホストOS上で別のOSを実行)を提供するソフトウェアです。
環境構築についてはVagrantを経由して行いますのでここではインストールするだけで大丈夫です。
手順は以下になります。
- Download VirtualBox x.x.xをクリック
- VirtualBox x.x.x platForm Packagesより自分のPCの環境のリンクをクリック
あとは特にこだわりがなければそのままガイドに沿ってインストールを行います。
個人的にはデスクトップにアイコンが増えるのが嫌なのでCreate a shortcut on the desktop/in the Quick Launch Barのチェックは外しました。
アイコンにショートカットを作らない場合は以下に保存されます。
C:\Program Files\Oracle\VirtualBox\
Finder→アプリケーション
インストールが終了し以下の画像が表示されれば終了です。
macの場合でしたらbrewコマンドでインストールすることも可能です。以下のコマンドを実行してください。
ターミナル
1 2 3 |
$ brew cask install virtualbox #上記でエラーが発生した場合 $ brew install --cask virtualbox |
caskはGUIのアプリケーションをインストールする時に使うコマンドです。Finder上にVirtualBoxがインストールされていることが確認できます。
Vagrantのインストール
以下のURLダウンロードを行います。
使用PCのOSとBit数が同じものを選択します。
・Bitの確認方法
コントロールパネル>システムとセキュリティ>システム
「システムの種類:」にxxビットと記載されています。
システム環境設定>システムレポート
プロセッサに「x.x GHz Core i~」のような表記があると思います。それを下記の対応表で確認してください。
プロセッサ名 | 32 ビット/64 ビット |
---|---|
Intel Core Solo | 32 ビット |
Intel Core Duo | 32 ビット |
Intel Core 2 Duo | 64 ビット |
Intel クアッドコア Xeon | 64 ビット |
デュアルコア Intel Xeon | 64 ビット |
クアッドコア Intel Xeon | 64 ビット |
Core i3 | 64 ビット |
Core i5 | 64 ビット |
Core i7 | 64 ビット |
VirtualBoxと同様にこだわりがなければガイドに沿ってインストールを完了させます。
Vagrantは隠しファイルとしてインストールされていますので確認したい場合は隠しファイルを表示して確認してみてください。Users/{userName}/.vagrant.d にいます。
インストールができましたら以下のコマンドでVagrantが導入されたか確認してください。
ターミナル
1 2 3 |
$ vagrant -v #出力結果 Vagrant x.x.x |
また、macの場合は以下のコマンドからVagrantをインストールすることができます。
ターミナル
1 2 3 |
$ brew cask install vagrant #上記でエラーが発生した場合 $ brew install --cask vagrant |
Gitのインストール
続いてHomesteadをクローンするためにGitをインストールします。
まずはGitがインストールされているか以下のコマンドで確認してからインストールを行ってください。
ターミナル
1 |
$ git --version |
バージョンの表示がされなければ続きの作業をおこなってください。
Windows
WindowsではGit for WindowsをインストールしてコマンドはGit bashを使用して環境構築をします。
Homesteadをクローンするためでもありますが、基本的にコマンドがUnix系になるためデフォルトでUnixコマンドが使えないWindowsのコマンドプロンプトでは対応できないため、Git bashでUnixコマンドのようにして使うためです。
以下の記事がGitのインストールの流れから各設定項目の説明まで網羅しておりとてもわかりやすかったので参考にしてください。
Mac
MacはWindowsのように公式のHPからインストールする方法でもいいのですがHomebrewからインストールするほうが楽だったのでこちらを紹介します。
ターミナルを起動して以下のコマンドを実行してください。
ターミナル
1 2 |
#homebrewをインストール $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
※最新のコマンドは、Homebrewにアクセスしてください。
以下のコマンドでインストールされたか確認します。
ターミナル
1 |
$ brew doctor |
your system is ready to brew と表示されれば大丈夫です。
続いて以下のコマンドを順番に実行して、 git version 2.x.x となれば完了です。
ターミナル
1 2 |
$ brew install git $ git --version |
環境構築
環境構築はコマンドで行いますのでターミナルを起動してください。
WindowsならGit Bashを起動。Macならターミナルを起動します。
Homestead vagrant box のダウンロード
以下のコマンドを実行してください。
ターミナル
1 |
$ vagrant box add laravel/homestead |
Enter your choice:と使用する仮想化とソフトウェア聞かれます。
該当するものを選択してEnterを押してください。今回はVirtualBoxになりますので3)を選択します。
僕は以下のように選択肢がでました。WindowsとMacどちらでも一緒でした。
Homestead のダウンロード
任意のディレクトリにHomesteadファイルをクローンします。
今回はUser/{userName}/配下に/appというフォルダを作成するとして以下のコマンドを実行してください。
ターミナル
1 2 3 4 5 6 7 8 9 10 11 |
#フォルダ作成 $ mkdir app #appディレクトリに移動 $ cd app #Homesteadをクローン $ git clone https://github.com/laravel/homestead.git Homestead #確認 $ ls |
Homestead/ とターミナルに表示されていれば完了です。
SSH鍵の作成
SSHは暗号化でリモートコンピュータと通信するプロトコルです。
仮想環境に繋ぐ時にSSHで認証をして繋ぐために作成しておく必要があります。以下のコマンドを順番に実行して作成してください。
ターミナル
1 2 3 4 5 |
#ホームディレクトリに移動 $ cd ~/ #sshキーの存在確認 $ ls -al ~/.ssh |
すでにある場合は以下のようにid_rsaとid_rsa.pubが存在することが確認できます。
ターミナル
1 2 3 |
drwxr-xr-x 3 username staff 96 8 26 2020 config -rw------- 1 username staff 1921 7 29 2020 id_rsa -rw-r--r-- 1 username staff 431 7 29 2020 id_rsa.pub |
ない場合は以下のコマンドを実行し、sshキーを作成します。
ターミナル
1 |
$ ssh-keygen -t rsa |
Enter file in which to save the keyと表示されたらEnter⏎を押します。
Enter passwordとパスワードを求められるので任意のパスワードを入力してEnter⏎
再度パスワードを求められるのでもう一度入力してEnter⏎(※パスワード入力時はターミナルに文字が表示されません)
以上でSSH鍵の作成の完了です。
設定ファイルの作成/編集
次に先ほどGitHubからクローンしたHomesteadファイルの設定ファイルを作成、編集していきます。
このファイルにホストOSやゲストOSのディレクトリ定義やSSH鍵での接続を定義したりと、各種設定を行うファイルしていくというイメージです。
以下のコマンドを実行し、設定ファイルを作成します。
ターミナル
1 2 3 4 5 |
#Homesteadディレクトリに移動 $ cd ~/app/Homestead #設定ファイルの作成 $ bash init.sh |
Homestead initialized!と表示されていれば完了です。この時にHomestead.yamlというファイルが作成されます。
ファイルをvimで編集していきます。
ターミナル
1 2 |
#Homestead.yamlの編集 $ vim Homestead.yaml |
以下のような設定内容が表示されますのでiを入力してINSERTモードに変更して編集してください。
Homestead.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
ip: "192.168.10.10" #接続先のIPアドレス memory: 2048 #割り当てるメモリ cpus: 1 #同CPUのコア数 provider: virtualbox #VMのホスト authorize: ~/.ssh/id_rsa.pub #SSH公開鍵の場所 keys: - ~/.ssh/id_rsa #秘密鍵の場所 folders: - map: ./ #ホストOSのローカルディレクトリ to: /home/vagrant/code #VMのディレクトリ php: "7.4" #phpのバージョン指定 sites: - map: homestead.test #ゲストOSのホスト名 to: /home/vagrant/code/{Laravelのルートディレクトリ名}/public #Web上の公開ディレクトリ databases: - homestead 以下省略 |
編集が完了しましたらEscでINSERTモード解除。
:wqを入力しEnter⏎で上書き保存します。
仮想マシンに接続-Laravelプロジェクトの作成
設定は完了ですのでVagrantを起動してLaravelのプロジェクトを作成してみましょう。
以下のコマンドを順番に実行してください。
ターミナル
1 2 3 4 5 6 7 8 9 10 11 |
#vagrantの起動 $ cd ~/app/Homestead && vagrant up #sshで仮想環境にログイン $ vagrant ssh #仮想環境の作業ディレクトリに移動 vagrant@homestead:~$ cd code #Laravelプロジェクトの作成 vagrant@homestead:~/code$ laravel new sample |
Homestead.yamlで設定したIP(192.168.10.10)にブラウザからアクセスするとLaravelのトップ画面が表示されます。
マイグレーション
マイグレーションは特にローカルとやり方は変わりません。
.envファイルを以下に変更してphp artisan migrateを実行すれば完了です。
.env
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#MySQLの場合 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret #PostgreSQLの場合 DB_CONNECTION=pgsql DB_HOST=127.0.0.1 DB_PORT=5432 DB_DATABASE=homestead DB_USERNAME=homestead DB_PASSWORD=secret |
ホスト名でアクセス
IPアドレス(192.168.10.10)ではなくhttp://xxx.comのようにホスト名でアクセスできるようにしましょう。
実はホスト名は先ほどのHomestead.yamlの以下の部分でhomestead.testというホスト名で設定しています。
Homestead.yaml
1 2 3 |
sites: - map: homestead.test #ゲストOSのホスト名 to: /home/vagrant/Code/{Laravelのルートディレクトリ名}/public #Web上の公開ディレクトリ |
ただこのままではホスト名でアクセスしても画面は表示されません。
パソコンのhostsファイルにこのホスト名を登録してあげることでアクセスできるようになります。
macの場合はvimでホストファイルに以下の編集を加えてください。
ターミナル
1 2 3 4 5 6 7 8 9 10 |
$ sudo vim /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 192.168.10.10 homestead.test #これを追加 |
WindowsではC:\Windows\System32\drivers\etc\hostsに同じように192.168.10.10 homestead.testを追加してください。
書き込み権限の関係などで編集できないなどの問題が発生しましたらこの記事とか参考に変更してください。
http://homestead.test/にアクセスしますとLaravelのトップ画面が表示されることが確認できます。
PHPのバージョンを変更
Homesteadのバージョンを変更する方法も確認しておきましょう。
PHPのバージョンも実はHomestead.yamlで設定しています。
Homestead.yaml
1 2 3 4 |
folders: - map: ./ #ホストOSのローカルディレクトリ to: /home/vagrant/Code #VMのディレクトリ php: "7.4" #phpのバージョン指定 |
ただこれだけですとCLIのバージョンはデフォルトのままです。
以下の中でバージョンに一致するコマンドを実行することで適応することができます。
ターミナル
1 2 3 4 5 6 |
php56 php70 php71 php72 php73 php74 |
仮想環境を停止
作業が終わったら仮想環境を停止します。
以下のコマンドを順番に実行して仮想環境を停止します。
ターミナル
1 2 3 4 5 |
#sshで仮想環境からログアウト $ logout #仮想マシンの停止 $ vagrant halt |
エラー対応
環境構築でよく出るエラーと対応をまとめます。
No input file specified.
Q. 画面にアクセスするとNo input file specified.と表示される。
原因:パスが間違っていることが原因
対策:まずは原因を調査するためにログファイルを確認します。以下のコマンドを実行します。
ターミナル
1 |
$ less /var/log/nginx/{host name}-error.log |
{host name}はHomestead.yamlで設定したホスト名になります。今回はhomestead.testになりますね。
結果としては以下です。
ターミナル
1 2 |
2021/03/08 09:39:49 [error] 8999#8999: *1 FastCGI sent in stderr: "Unable to open primary script: /home/vagrant/code/public/index.php (No such file or directory)" while reading response header from upstream, client: 10.0.2.2, server: homestead.test, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php8.0-fpm.sock:", host: "127.0.0.1:8000" 2021/03/08 09:39:52 [error] 8999#8999: *4 FastCGI sent in stderr: "Unable to open primary script: /home/vagrant/code/public/index.php (No such file or directory)" while reading response header from upstream, client: 192.168.10.1, server: homestead.test, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php8.0-fpm.sock:", host: "192.168.10.10" |
/home/vagrant/code/public/index.phpのファイルが見つからないとのこと。
public/index.phpのはLaravelデイレクトの下にあるファイルです。「仮想マシンに接続-Laravelプロジェクトの作成」のとこでやったことを見返してください。
仮想環境にログインした後に$ cd codeして$ laravel new sampleを実行しました。つまりディレクトリ構造としてはcode/sample/public/index.phpになります。
ここのファイルパスの指定はHomestead.yamlのsites:で行っており、デフォルトでは/home/vagrant/code/publicになっています。
以上からHomestead.yamlを以下のように編集すれば解決です。
Homestead.yaml
1 2 3 |
sites: - map: homestead.test #ゲストOSのホスト名 to: /home/vagrant/code/sample/public |
VirtualBox machine already exists
Q. Vagrant upで以下のエラーで起動しなくなった
ターミナル
1 2 3 4 |
sites: A VirtualBox machine with the name 'xxxx' already exists. Please use another name or delete the machine with the existing name, and try again. |
原因:VirtualBoxの仮想環境の名前が重複している
対策:まず、以下のコマンドをいくつか試してみる
ターミナル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ vagrant global-status #出力結果 id name provider state directory -------------------------------------------------------------------------------- 6b578c7 default virtualbox poweroff /Users/xxxx/Vagrant/CentOS70 824274b default virtualbox poweroff /Users/xxxx/Vagrant/CentOS_m2 b0360b3 default virtualbox running /Users/xxxx/Vagrant/Homestead 643d085 default virtualbox poweroff /Users/xxxx/Homestead The above shows information about all known Vagrant environments on this machine. This data is cached and may not be completely up-to-date. To interact with any of the machines, you can go to that directory and run Vagrant, or you can use the ID directly with Vagrant commands from any directory. For example: "vagrant destroy 1a2b3c4d" |
エラーが出てる仮想環境のidに対して以下のコマンドを実行
ターミナル
1 |
$ vagrant destroy {id} |
これでダメだったらVirtualBoxを開いて対象の仮想環境を設定...でリネームするか除去...で削除して$ vagrant upし直せばOKです。
仮想環境は壊れたら簡単に破棄できるのがメリットなので難しく考えないで詰まったら作り直してみましょう。
VBoxManage: error: Failed to create the host-only adapter
Q. Vagrant upで以下のエラーで起動しなくなった
ターミナル
1 2 3 4 5 6 7 8 9 10 11 12 |
Bringing machine 'default' up with 'virtualbox' provider... ==> default: Clearing any previously set network interfaces... There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below. Command: ["hostonlyif", "create"] Stderr: 0%... Progress state: NS_ERROR_FAILURE VBoxManage: error: Failed to create the host-only adapter VBoxManage: error: VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component HostNetworkInterfaceWrap, interface IHostNetworkInterface VBoxManage: error: Context: "RTEXITCODE handleCreate(HandlerArg *)" at line 95 of file VBoxManageHostonly.cpp |
原因:macとVirtualBoxのバージョン相違
対策:VirtualBoxを最新バージョンにしましょう
VirtualBoxから最新のパッケージをダウンロードします。(2021年現在は6.1.18が最新)
また、macのアップデートの原因でインストールに失敗する可能性があります。
この場合システム環境設定→セキュリティとプライバシーでダウンロードしたアプリケーションの実行許可を許可してあげて再度インストールすればインストール可能になります。
ネットワーク接続エラー
Q. 以下のようなネットワークエラーがおきた
ターミナル
1 |
The specified host network collides with a non-hostonly network! |
原因:Homestead.yamlでのIPアドレスとローカルIPアドレスが同じになっているのが原因
対策:Homestead.yamlのIP設定を変更する
仮想マシンがタイムアウトする
Q.以下のようなネットワークエラーがおきた
ターミナル
1 |
Timed out while waiting for the machine to boot. |
原因:仮想化支援機能が有効になっていない
対策:BIOSの設定を変更する。
コントロールパネル>プログラムと機能>Windowsの機能の有効化または無効化をクリックしHyper-vのチェックを入れて再起動する。
これはほぼWindowsの場合でおきますのでmacの方は大丈夫だと思います。
仮想マシンが起動しない
Q.そもそも仮想マシンが起動しない。vagrant upしてもシェルがコマンドを認識しない
原因:WindowsのOSが原因
対策:根本はPCの買い替えかOSの買い替え
以前Linuxの勉強でVirtualBoxで使用時にシェルが全く起動しなくて原因不明で頓挫したことがありました。
気分を変えてMacでやってみたら問題なくシェルが起動して、当時はとりあえず動いたしと深く考えず放置していたら今回の環境構築でも同じくvgrant up の時に仮想マシンが立ち上がらなく今回しっかり調べてみました。
原因としてはWindows 10 Home か Professional なのかということでした。
Homeでは一個前でのエラー対策に記述した仮想化支援機能の有効化ができないようです。
つまり根本的に積んでいるため対策としては以下のようにするしかないようです。
- Professionalを買う
- macでやる
- UbuntuでもcentOSでもいいから入れて、そのOS上で動かしてみる
パソコン自体を買い替えたり、MicroSoftの公式からOSを購入したりすると結構高い値段になってしまいますので、ヤフオクとかで探すと安くOS大替のパッケージ変えますのでおすすめです。
さいごに
まとめとして一連の流れをざっくりとした図にしてみました。
環境構築は最初はやっぱり大変ですね。新しい開発環境がでてきたらまずはやってみて記事にしてプログラミングの一番の挫折ポイントを少しでも減らせるよう今後とも記事にしていこうと思います
この記事を気に入っていただけましたらTwitterdでもプログラミングに関してのツイートをリアルタイムでしていますので
ご一緒にフォローもお願いします。
僕は未経験からSESの企業にエンジニアとして転職し、その後はフリーラン、現在は受託開発企業に転職しました。
エンジニアとしていろいろな働き方を経験し、いろいろな転職サイトや転職エージェントの方にお話を伺いました。
その経験の中でだいじだと感じたことは、ITに特化した転職エージェントのサービスを利用することです。
幅広い業界に対応した転職エージェントはIT転職に特化したエージェントと比べると紹介先の数が少ないです。
そのため希望してない紹介先に転職し、思ってたのと違うとなることもあります。
そうならないためにエンジニアを目指すなら必ずIT特化の転職サービスを登録し、たくさんの選択肢の中から自分が行きたいと思う企業を探してください。
僕はフリーランスでの案件探し、受託開発企業の転職の時もレバテックのかたに紹介していただきました。
とても満足できましたので皆さんもぜひ利用してみてください!
\無料のIT系転職サービス/
/優良案件がたくさん\