Laravelの環境構築をVagrant +Virtual Box+Homesteadで構築した時のローカルの共有フォルダを自動生成する話
はじめに
初めまして。
今回は、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_rsa
と id_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_rsa
と id_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