Laravelの環境構築をVagrant +Virtual Box+Homesteadで構築した時のローカルの共有フォルダを自動生成する話

2020/12/29に公開

はじめに

初めまして。
今回は、Homesteadで仮想空間に環境を構築した時の効率化の話をしようと思います。
仮想空間を立ち上げた時に、仮想フォルダとローカルフォルダ両方に指定の共有フォルダを自動で作成する設定を最近したため、共有したいと思います。

自己紹介

プログラミングスクールを卒業して自社開発企業のエンジニアとフリーランスをやっている『二匹の猫』と申します。
気ままに、プログラミングに関する記事や、体験談などを公開しています。

前提条件

  • Vagrant及びVirtual Boxがインストールされていること
  • HomesteadでLaravelの環境構築をしようとしていること
  • 基本的にMacでの操作(Windowsの方はターミナルの部分はコマンドプロンプトに読み替えてください)

環境構築

Homestead Virtual Boxを作成する

ターミナルから下記コマンドを記入し、Homesteadを利用するための仮想ボックスを立ち上げます。

ターミナル
$ vagrant box add laravel/homestead

コマンドを入力すると仮想マシンを立ち上げるためのソフトウェアを聞かれるので、
今回は3)VirtualBox を選択します。
これで、Boxの立ち上げが始まります。
立ち上げの時間は、通信環境などに左右されますが、5〜10分ほどで終わると思います。

Homesteadをクローンする

Homesteadをgitからクローンします。
今回はDesctop直下に app というディレクトリを作成し、そこにHomesteadをクローンします。
まずはDesctopディレクトリに移動します。

ターミナル
$ cd Desctop

appというディレクトリを作成します。

ターミナル
$ mkdir app

appディレクトリに移動します。

ターミナル
$ cd app

appディレクトリに移動できたら、下記コマンドでHomesteadをクローンしていきます。

ターミナル
$ git clone https://github.com/laravel/homestead.git Homestead

これで、appディレクトリ内にHomesteadフォルダがダウンロードされました。

Homesteadの設定ファイルを作成する

先ほどクローンしたHomesteadディレクトリに移動します。

ターミナル
$ cd Homestead

Homesteadディレクトリに移動できたら、下記コマンドでHomesteadの設定ファイルを初期化します。

ターミナル
$ bash init.sh

Homestead initialized! と表示され、Homestead.yaml が作成されます。
Homestead.yaml の記述を変更する前に SSH鍵ファイルを作成しましょう。

SSH鍵ファイルの作成をする

ホストOS(iOS)とゲストOS(vagrant)とのやり取りは SSH で行います。
SSH でやり取りするのに必要な鍵を作成します。

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

ターミナル
$ cd

移動できたら、下記コマンドを入力します。

ターミナル
$ ls -la I grep .ssh

id_rsaid_rsa.pub が表示されれば、既にSSH鍵ファイルはあります。
すでにある場合は新たに作成する必要はありません。次に進んでください。
ない場合は下記コマンドで新たに作成してください。

ターミナル
$ ssh-keygen -t rsa

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

Enter passphrase とパスワードの設定を求められますので、任意のパスワードを入力してください。
再度パスワードの確認を求められるので、先程入力したパスワードを入力してください。
これでSSH鍵ファイルが作成されます。

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

ターミナル
$ ls -la I grep .ssh

id_rsaid_rsa.pub が表示されるはずです。
表示されたら、SSHの設定は完了となります。

Homesteadのファイルを設定する

Homesteadのディレクトリに移動します。

ターミナル
$ cd Desctop/app/Homestead

ターミナルでvim Homestead.yaml と入力してターミナル上で追記するか、使い慣れているテキストエディターで Homestead.yaml を編集していきましょう。
基本的に folders の map のディレクトリを変更するだけです。
今回は、app ディレクトリに Composer を利用して Laravel 自体のファイルを設置しますので、下記のように map の記述を変更します。
folders の map がホストOSのディレクトリで、 to がゲストOSのディレクトリになります。
ここで指定したホストOS上のディレクトリとゲストOS上のディレクトリは共有します。

ターミナル
--
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/Laravel/public

databases:
    - homestead

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

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

変更する場所は、下記の3点です。
共有フォルダの設定です。
下記設定では、ローカルのHomesteadディレクトリ内のcodeディレクトリと仮想マシンのcodeディレクトリが共有フォルダになります。

ターミナル
folders:
    - map: ~/code
      to: /home/vagrant/code

sitesはlocalhost:8000でアプリを表示させるための設定です。
[アプリ名]と書かれている部分は、自分が立ち上げるアプリ名を記入します。
こうなっていない場合、localhost:8000で繋いでもLaravelが表示されないので注意してください。

ターミナル
sites:
    - map: homestead.test
      to: /home/vagrant/Code/[アプリ名]/public

接続したいdatabaseの名前を追記します。

ターミナル
databases:
    - homestead
    - [任意のdatabase名]←アプリ名がわかりやすくていいかと思います。

これで、Homestead.yaml ファイルの設定は終わりです。

Vagrantfileに追記して、共有フォルダ作成を自動化する

Homestead内のVagrantfailを開き、下記の一文を追加する。

ターミナル
config.vm.synced_folder "./code", "/home/vagrant/code", create:"true"

追記する場所は、下記の場所です。

ターミナル
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    if File.exist? aliasesPath then
        config.vm.provision "file", source: aliasesPath, destination: "/tmp/bash_aliases"
        config.vm.provision "shell" do |s|
            s.inline = "awk '{ sub(\"\r$\", \"\"); print }' /tmp/bash_aliases > /home/vagrant/.bash_aliases && chown vagrant:vagrant /home/vagrant/.bash_aliases"
        end
	config.vm.synced_folder "./code", "/home/vagrant/code", create:"true"←ここです
    end
.
.
.
end

これでVagrantfile設定は終了です。

仮想マシンを起動する

これで、最低限の設定は終了です。
Homesteadのディレクトリで下記コマンドを入力します。

ターミナル
$ vagrant up

しばらくすると、仮想マシンが起動します。
起動と同時に共有フォルダが作成されているはずなので、確認します。
今回の設定では、ローカルはvagrant upした場所にできるので、Homestead内にcodeという空のディレクトリが存在します。
仮想マシンに関しては、SSH接続をして作成されているか確認します。
ターミナルで下記コマンドを入力し、SSH接続します。

ターミナル
$ vagrant ssh

接続が完了したら、lsコマンドで中身の確認をしましょう。

ターミナル
$ ls

codeというファイルができていたら成功です。
あとは、仮想マシンのcodeディレクトリの中でLarevelのプロジェクトを立ち上げます。
仮想マシンで立ち上げたアプリと同じ名前のフォルダがローカルにも作成されていれば、正常に動いていることになります。

最後に

今回は、HomesteadでLaravelの環境構築をする方法と共有フォルダの自動作成を解説しました。
少し複雑でわかりにくかったかもしれないですが、無事できましたでしょうか?
今回は、codeという共有フォルダを作りましたが、ここの設定を変えるだけで任意の名前の共有フォルダを作成することができます。
どんな言語でも、最初に環境構築しなければなりません。
Laravelの環境構築を簡単にするためにHomesteadがあるように他にも便利なものはありますが、それぞれ全ての人が求めているようにはできておらず、最低限の設定がしてあるだけで、個別に必要な設定はしなければいけません。しかし、今回紹介した自動化は便利になるだけで必ず設定しなければいけないものではありませんが、こういった設定は業務効率化にもつながりますので、チャレンジしてみるのはいかがでしょうか?

それでは、次回の更新をお楽しみに!

Discussion