読者です 読者をやめる 読者になる 読者になる

人生イコール本番環境

現役エンジニアが、IT・webを中心に書く雑記ブログ

Windows上にVagrant+VirtualBox+Gitで開発環境を構築しチームで環境を統一する

f:id:hiro-chika:20170420163443j:plain

初めまして、ひろーちか(@piyopiyo_621)と申します。

プログラム開発を行う際にとても面倒なのが「環境構築」ですよね。

特にチームで開発している場合、WindowsMacLinuxなど、使っているPCのOSがバラバラだったり、OSレベルで同一であっても、細かな環境差異で何かしら問題が起きたりします。

大抵はインストールするソフトウェアのバージョン相違や、設定ファイルの記述ミスとか、環境変数の設定ミスなどの些細なモノですが、それらが積み重なってくると対処に時間がかかることもあり、ツールを使って無駄を極力減らしたいですよね。

今回は、「環境差異が発生しやすいWindows環境において、チーム全員が統一された開発環境(仮想Linux)を使えるようにする」ことを目的にしています。

1. 今回使うツールの紹介

1. VirtualBox

仮想化ソフトウェアの1つ。VMwareと並んでよく利用されます。

VMwareは企業のサーバ用途、VirtualBoxは個人の勉強用途で多く使われます。

これを使うとWindows上に仮想的なLinuxを構築したり出来ます。

仮想化ソフトウェアを実行するOS(今回はWindows)をホストOS、仮想化ソフトウェア上で実行されるOS(今回はLinux)をゲストOSと呼びます。

 

2. Vagrant

VirtualBoxVMwareなどの仮想化ソフトウェアを操作して、設定ファイル(Vagrantfileと言います)に基づいた仮想マシンを自動で構築してくれます。

つまり、Vagrantfileさえ用意すれば、いちいちVirtualBoxを手動で操作して環境を1から構築する必要がなくなります。そして、Vagrantfileを共有すればチームで仮想環境を完全に統一できます。

今回の主役ツールです。

 

3. Git

ソースコードや設定ファイルなどをバージョン毎に保存する仕組みを提供してくれます。

バージョン管理システムとも呼ばれます。

今回はVagrantfileの管理に加え、チーム内に最新のVagrantfileを配布するために使います。

 

2. やりたいこと

・Vagrantfileを作成し、Vagrant + VirtualBoxで仮想Linux環境を構築する。

・GitでVagrantfileのバージョンを管理し、チームメンバに最新のVagrantfileを配布する。

 

3. 作業手順

1. VirtualBoxをインストールする

まず、VirtualBoxの公式にアクセスします。

f:id:hiro-chika:20170416053359p:plain

画面中央にある「Download VirtualBox」ボタンをクリックします。最新バージョンのダウンロードページへ飛びます。(2017年4月16日現在、最新は5.1)

f:id:hiro-chika:20170416053413p:plain

VirtualBox binariesの中にある「Windows hosts」リンクをクリックし、exeファイルをダウンロード、起動します。

f:id:hiro-chika:20170416055925p:plain

「Next」ボタンをクリック。

f:id:hiro-chika:20170416055935p:plain

そのまま「Next」ボタンをクリック。

f:id:hiro-chika:20170416055915p:plain

そのまま「Next」ボタンをクリック。

f:id:hiro-chika:20170416060305p:plain

「Yes」ボタンをクリック。(ネットワークインタフェースを追加するから、一時的にネットワークが切断されるかもね、という内容の警告です)

f:id:hiro-chika:20170416060553p:plain

「Install」ボタンをクリック。

f:id:hiro-chika:20170416060644p:plain

Windows セキュリティの警告ウインドウが出てきたら、「インストール」ボタンをクリックします。これは仮想マシン用のUSBコントローラです。

f:id:hiro-chika:20170416060925p:plain

「インストール」ボタンをクリック。これはネットワークアダプターです。

f:id:hiro-chika:20170416061104p:plain

「インストール」ボタンをクリック。これはネットワークサービスです。

f:id:hiro-chika:20170416061214p:plain

インストールが完了したら、そのまま「Finish」ボタンをクリックします。

f:id:hiro-chika:20170416061325p:plain

VirtualBoxが起動します。

 

2. Vagrantをインストールする

Vagrantの公式ダウンロードページにアクセスします。

f:id:hiro-chika:20170416062108p:plain

Windowsの中にある「Universal (32 and 64-bit)」リンクをクリックし、msiファイルをダウンロード、起動します。

f:id:hiro-chika:20170416062636p:plain

「Next」ボタンをクリック。

f:id:hiro-chika:20170416062702p:plain

「I accept the terms in the License Agreement」にチェックを入れ、「Next」ボタンをクリック。(使用許諾契約の条項に同意するかの確認です)

f:id:hiro-chika:20170416062817p:plain

そのまま「Next」ボタンをクリック。(デフォルトのインストール先が何故かCドライブ直下になっているため、気になる人はProgram Filesを指定する必要があるかもしれません)

f:id:hiro-chika:20170416063056p:plain

「Install」ボタンをクリック。

f:id:hiro-chika:20170416063207p:plain

インストールが完了したら、「Finish」ボタンをクリックします。

f:id:hiro-chika:20170416063642p:plain

システムの再起動を求められるため、「Yes」ボタンをクリックし、Windowsを再起動します。

f:id:hiro-chika:20170416064644p:plain

再起動後、Windowsキー + Rを押して「cmd」と入力し、コマンドプロンプトを立ち上げます。

f:id:hiro-chika:20170416065043p:plain

vagrant -v」と入力し、バージョン情報が表示されればインストール完了です。

 

3. Gitをインストールする

Git for Windowsの公式にアクセスします。

f:id:hiro-chika:20170416065652p:plain

画面上部にある「Download」ボタンをクリックし、exeファイルをダウンロード、起動します。

f:id:hiro-chika:20170416070304p:plain

「Next」ボタンをクリック。

f:id:hiro-chika:20170416070437p:plain

そのまま「Next」ボタンをクリック。

f:id:hiro-chika:20170416070516p:plain

そのまま「Next」ボタンをクリック。(デスクトップにアイコンを追加したい場合、On the Desktopにチェックを入れて下さい)

f:id:hiro-chika:20170416071305p:plain

そのまま「Next」ボタンをクリック。

f:id:hiro-chika:20170416071327p:plain

そのまま「Next」ボタンをクリック。(ここで選択した内容は、環境変数へのパスの追加有無に関わってきます。その他、Gitのインストールに関する詳細は石坂忠広さんの記事が詳しいので、そちらを参照して下さい。)

f:id:hiro-chika:20170416072507p:plain

そのまま「Next」ボタンをクリック。(ここで選択した内容は、OpenSSLライブラリの利用有無に関わってきます)

f:id:hiro-chika:20170416073546p:plain

「Checkout as-is, commit as-is」を選択し、「Next」ボタンをクリック。(ここで選択した内容は、改行コードの変換処理に関わってきます

f:id:hiro-chika:20170416073559p:plain

そのまま「Next」ボタンをクリック。(ここで選択した内容は、MinTTYコンソールの利用有無に関わってきます)

f:id:hiro-chika:20170416074429p:plain

 そのまま「Next」ボタンをクリック。

f:id:hiro-chika:20170416074529p:plain

インストールが完了したら「View Release Notes」のチェックを外し(リリースノート見る必要もないので)、「Launch Git Bash」にチェックを入れ、「Finish」ボタンをクリック。

f:id:hiro-chika:20170416075006p:plain

Git Bashのコンソール画面が立ち上がります。

 

4. 仮想環境を構築する

1. Vagrant + VirtualBoxで仮想Linux環境を構築する

まず、Cドライブ直下やデスクトップなど、好きなところに作業用ディレクトリを作成します。

f:id:hiro-chika:20170416075943p:plain

今回私はDドライブ直下に、ディレクトリ名を「Vagrant」で作成しました。

f:id:hiro-chika:20170416061325p:plain

次にVagrantディレクトリを開いた状態で、VirtualBoxを起動します。

仮想マシンが作成されると画面左側に表示されますが、もちろんまだ何も存在しません。

f:id:hiro-chika:20170416081113p:plain

次に、Vagrantディレクトリ内で右クリックし、「Git Bash Here」をクリックします。

f:id:hiro-chika:20170416081927p:plain

Git Bashのコンソールが立ち上がります。pwdコマンドで、カレントディレクトリがVagrantディレクトリになっていることを確認します。

$ pwd
/d/Vagrant

 

ここまで完了したら、一旦Vagrantの使い方を説明します。

Vagrantでは、仮想マシンの構築にBoxファイルというテンプレートを利用します。

Boxファイルとは仮想マシンのイメージファイルであり、インターネット上で様々なLinuxディストリビューションのBoxファイルが配布されています。

最小構成のOSだけインストールされたBoxファイルや、プロビジョニングツールが追加でインストールされたBoxファイルなど色々あります。

これにより、あなたはLinuxディストリビューションのISOファイルを用いて、1から仮想マシンを構築するストレスから解放されます。

 

実際にbentoでBoxファイルを探してみましょう。bentoはchef社が公開しているBoxファイルのリポジトリなのでとても安全です。

f:id:hiro-chika:20170416084017p:plain

今回はCentOS7.3のBoxファイルを使うことにします。まずリンクにアクセスします。

f:id:hiro-chika:20170416084243p:plain

プロバイダー(仮想化ソフトウェア)毎に使い方が書いてあります。VagrantVirtualBoxの他にVMwareParallels Desktopなどもサポートしています。

今回使うのはVirtualBoxであるため、その欄を確認します。Boxファイルのサイズに加え、「vagrant init bento/centos-7.3; vagrant up --provider virtualbox」といったコマンドが書いてあります。

前半の「vagrant init bento/centos-7.3」はイニシャライズ(初期化)処理をvagrantに指示します。vagrantはinitコマンドを受け付けるとVagrantfileを作成し、マシン設定の記述をユーザに促します。bento/centos-7.3は、このBoxファイルを利用して仮想マシンを構築せよという意味を持っています。

後半の「vagrant up --provider virtualbox」は実際に仮想マシンの作成・構築をvagrantに指示します。upコマンドによりBoxファイルのダウンロード・展開・仮想マシンの構築が行われます。--provider virtualboxでは、プロバイダーがVirtualBoxであることを指定しています。

 

では上記コマンドを実行してみましょう。まずls -aコマンドを発行し、カレントディレクトリにファイルが何もないことを確認します。

$ ls -a
./ ../

f:id:hiro-chika:20170416090231p:plain

次に、vagrant init bento/centos-7.3」を入力し、lsコマンドでVagrantfileが作成されたことを確認します。

$ vagrant init bento/centos-7.3
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

$ ls -a
./ ../ Vagrantfile

f:id:hiro-chika:20170416090606p:plain

エディタでVagrantfileの内容を確認します。f:id:hiro-chika:20170416091404p:plain

Vagrantfileの中に、「config.vm.box = "bento/centos-7.3"」と書いてあるのが確認できます。これは、先程のinitコマンドによるものです。

例えば先程のコマンドを「vagrant init bento/centos-7.2」と間違えて入力した場合は「config.vm.box = "bento/centos-7.2"」としてVagrantfileが作成されますが、ここを書き換えることで使用するBoxファイルを訂正することができます。つまりinitコマンドは、Vagrantfileを作成するだけであり、仮想マシンの生成に直接関わることはありません。

initの仕組みを理解したところで、「vagrant up --provider virtualboxを実行します。

$ vagrant up --provider virtualbox

config.vm.boxの値を参照してBoxファイルのダウンロード・展開・仮想マシンの構築が行われます。ダウンロードには時間がかかるため、けものフレンズ1話を観て待つことをオススメします。たのしー

f:id:hiro-chika:20170416172117p:plain

様々なメッセージが出力され、プロンプトが戻ってきました。ここで、VirtualBoxの管理画面を見てみましょう。

f:id:hiro-chika:20170416172355p:plain

仮想マシンが1つ作成され、実行中のステータスになっています。VagrantによってCentOS 7.3の環境が構築された証拠です。

ここで、vagrant upコマンドにて出力されたメッセージの内容を簡単に説明します。

$ vagrant up --provider virtualbox
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'bento/centos-7.3' could not be found. Attempting to find and install...
default: Box Provider: virtualbox
default: Box Version: >= 0
==> default: Loading metadata for box 'bento/centos-7.3'
default: URL: https://atlas.hashicorp.com/bento/centos-7.3
==> default: Adding box 'bento/centos-7.3' (v2.3.4) for provider: virtualbox
default: Downloading: https://atlas.hashicorp.com/bento/boxes/centos-7.3/versions/2.3.4/providers/virtualbox.box
default:
==> default: Successfully added box 'bento/centos-7.3' (v2.3.4) for 'virtualbox'!
==> default: Importing base box 'bento/centos-7.3'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'bento/centos-7.3' is up to date...
==> default: Setting the name of the VM: Vagrant_default_1492303114660_2001
==> default: Fixed port collision for 22 => 2222. Now on port 2200.
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
default: Adapter 1: nat
==> default: Forwarding ports...
default: 22 (guest) => 2200 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:2200
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Remote connection disconnect. Retrying...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
default: /vagrant => D:/Vagrant

 

1. https://atlas.hashicorp.com/bento/centos-7.3からBoxのメタデータを取得

2. 取得したメタデータを元に、https://atlas.hashicorp.com/bento/boxes/centos-7.3/versions/2.3.4/providers/virtualbox.boxからBoxをダウンロード、検証

3. Boxを元に、VirtualBox上で仮想マシンインスタンス)を生成

4. 仮想マシン上のネットワークインタフェース初期化、NATによるポートフォワーディング設定(2200番ポートに着信した通信を22番ポートに転送する)

5. 仮想マシン上のIPアドレスの設定(127.0.0.1ループバックアドレス

6. SSH接続用の鍵ペアの作成(秘密鍵は自動でホストOS側に配置される)

7. 共有フォルダのマウント処理(「D:/Vagrant」がホストOS⇔ゲストOS間で共有される)

 

通常、VirtualBoxを用いて1から仮想マシンを構築する場合、ホストOSとゲストOS間で通信をさせようとするとかなり手間がかかります。アダプタの設定、IPアドレスの設定、NATの設定、ファイアウォールの設定、SSHサーバの起動など考慮すべき点が沢山あるため、躓くことが多いのです。

しかし、Vagrantはそういった設定を自動で行ってくれます。その結果、あなたはゲストOSへのアクセス手順について悩む必要がなくなります。

 

さて、仮想マシンが起動したので次は接続してみましょう。Git Bashコンソールで「vagrant ssh」と入力してみてください。

$ vagrant ssh

f:id:hiro-chika:20170416183048p:plain

自動で仮想マシンへの公開鍵SSH接続が行われます。しかし、あなたは仮想マシンIPアドレスSSHポート待ち受け番号、ユーザ名、パスワード、秘密鍵の配置パスを意識する必要はありません。Vagrantによりこれらの情報は隠蔽され、あなたは仮想マシン上の開発に専念することができます。これがVagrantの大きな特徴です。

なお、Git Bashコンソールではなく、Teratermなど、他の使い慣れたコンソールを利用したい場合はホストOS上で「vagrant ssh-config」と入力します。

$ vagrant ssh-config
Host default
HostName 127.0.0.1
User vagrant
Port 2200
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile D:/Vagrant/.vagrant/machines/default/virtualbox/private_key
IdentitiesOnly yes
LogLevel FATAL

SSHの接続情報が出てくるので、これを元に接続します。秘密鍵にはIdentityFileを選択します。なお、ゲストOSログイン用のユーザ名・パスワードは「vagrant」で統一されています。

f:id:hiro-chika:20170416185223p:plain

f:id:hiro-chika:20170416185232p:plain

f:id:hiro-chika:20170416185237p:plain

無事、仮想マシンへの接続ができていることが確認できます。また、ゲストOSはホストOSのネットワークを利用するため、インターネットへの接続も問題ありません。

これで開発環境が整ったので、次はGitでVagrantfileを管理するフェーズに入ります。

 

2. GitでVagrantfileのバージョンを管理する

まず、Git Bashコンソールで「git init」と入力します。

$ git init

f:id:hiro-chika:20170416193930p:plain

initコマンドにより、「.git」ディレクトリが新たに生成されます。このディレクトリにはGitの設定ファイルなどが入っており、Gitはこのディレクトリの存在をトリガとして、「Vagrantディレクトリをワーキングツリーとみなします。(Gitでは、「.git」ディレクトリを持つ作業用ディレクトリをワーキングツリーと呼びます)

Vagrantにおけるinitコマンドとは異なり、Gitでファイルのバージョン管理を行う場合、initコマンドは必須です。

 

ここまで完了したら、一旦Gitの使い方を説明します。

Gitでは、コミット(commit)という単位でファイルのバージョンを管理します。例えば、「test.txt」というファイルを作り、そのファイルのバージョンを管理するとします。

「test.txt」は今作られたばかりなので、内容は空っぽです。いわば、このファイルのバージョンは「0」であると言えます。

ここで重要なのは、Gitは自動でファイルのバージョンを管理してくれるワケではありません。開発者が明示的にコミットすることによって、「test.txt」はGitに初めて「このファイルのバージョンは"0"である」と認識されます。まずはイニシャルコミットを完了しないとバージョン管理は始まりません。

さて、コミットをするためには対象ファイルをアド(add)する必要があります。アドとは、ファイルをインデックスに登録することです。

コミットはインデックスに登録されたファイルのアップデートのみを対象とすることで、開発者の意図しないファイルをコミットに含めることを防ぐようになっています。

先程作った「test.txt」をアドし、コミットします。これにより、空の「test.txt」は初回のコミットに紐付きます。

次に、「test.txt」に"Hello World!"という文字列を追加しました。

先程と同じように「test.txt」をアドし、コミットします。これにより、文字列が追加された「test.txt」は2回目のコミットに紐付きます。

もし、「test.txt」を空の状態に戻したい(バージョンロールバックしたい)場合は、1回目のコミットから復元すればよいのです。これがバージョン管理です。

 

 実際に、Vagrantfileをインデックスに登録してみましょう。

「git add Vagrantfile」と入力し、その後「git status」を確認します。

$ git add Vagrantfile
$ git status

f:id:hiro-chika:20170416200154p:plain

なんか英語が沢山出てきて焦りますね。1つずつ説明します。

$ git status
On branch master

Initial commit

Changes to be committed:
(use "git rm --cached ..." to unstage)

new file: Vagrantfile

Untracked files:
(use "git add ..." to include in what will be committed)

.vagrant/

まず、「On branch master」は現在のブランチがmasterであることを表しています。

Gitでは、複数人で同じソフトウェアを並行して開発できるよう、ブランチという概念が存在します。言葉での説明が難しいので、図で説明されているサイトを下記に貼ります。こちらのサイトはGitの基礎が分かりやすく解説されているためオススメです。

www.backlog.jp

次に、「Initial commit」はこれから行うコミットがこのワーキングツリーにおいて最初のコミットであることを表しています。

「Changes to be committed:」はこれから行うコミットに含まれるファイル(addされたファイル)を表しています。新規追加されたファイルはnew file、前回のコミットから内容が変更されたファイルはmodifiedと表示されます。

「Untracked files:」はこれから行うコミットに含まれないファイル(addされていないファイル)を表しています。

つまり、現在はVagrantfileのみがインデックスに登録されている状態です。

「.vagrantディレクトリはいつの間に作られたかというと、vagrant up時に、SSH鍵などを格納するために作られています。このディレクトリは特に重要なものでもないため、今回のコミットからは外すことにしています。

 

さて、いよいよコミットの出番です。「git commit -m "Initial commit"」を入力し、バージョン管理を始めましょう。(-mオプションはコミットメッセージを表しています。コミットメッセージは通常、ファイルの変更点や追加機能について記載します。)

$ git commit -m "Initial commit"

f:id:hiro-chika:20170416235825p:plain

これでコミットが完了しました。

$ git commit -m "Initial commit"
[master (root-commit) 1b4c150] Initial commit
1 file changed, 71 insertions(+)
create mode 100644 Vagrantfile

「master (root-commit)」はそれぞれ、そのコミットがmasterブランチであること、ルートコミット(全てのコミットの根本)であることを表しています。(masterでコミットする前にブランチを切ってコミットした場合、それがルートコミットになります)

その後ろにある「1b4c150」はコミットのリビジョンを示しています。Gitはコミットをリビジョンによって識別しています。「Initial commit」はコミットメッセージです。

「1 file changed, 71 insertions(+)」はこのコミットによってファイルが1つ変更され、合計71行が追加されたことを表しています。

「create mode 100644 Vagrantfile」はVagrantfileがパーミッション644(-rw-r--r--)で登録されたことを表しています。(先頭の100は分かりませんでした・・・誰か教えて下さい)

 

これでGitでVagrantfileを管理するという目的も達成された・・・と思いきや、少し手順が不足しています。

Gitでは最終的にコミットの履歴をサーバにプッシュ(記録)する必要があります。これにより、データのバックアップとソースコードの配布が容易になります。(現段階ではコミット履歴はマシンローカルにしかありません)

プッシュにはリモートサーバ(Gitホスティングサービス)の契約が必要であるため、GitHubを利用します。

GitHubはGitホスティングサービスの中で最も有名です。しかし、無料ユーザの場合プライベート(鍵付き)リポジトリの作成が出来ないため、ソースコードを公開する必要がない状況においてはBitBucketがよく使われます。今回はVagrantfileの配布(公開)を目的としているため、GitHubを使うことにします。

 

3. Gitで最新のVagrantfileを配布する 

まず、GitHubの公式にアクセスし、会員登録をします。右上の「Sign up」ボタンをクリックします。

f:id:hiro-chika:20170418025658p:plain

ユーザ名、メールアドレス、パスワードを入力し、「Create an account」ボタンをクリック。

f:id:hiro-chika:20170418025813p:plain

free planを選択し、「Continue」ボタンをクリック。(「Help me set up an organization next」オプションは組織向けなのでチェックは付けません)

f:id:hiro-chika:20170418025915p:plain

メールアドレスに送られてくる認証URLにアクセスすると、登録が完了します。「Start a project」ボタンをクリックし、新しいリポジトリを作成します。

f:id:hiro-chika:20170418025927p:plain

リポジトリ名と、必要に応じ説明文を入力します。Publicを選択し、「Create repository」ボタンをクリックします。(Private repositoryを作成するには有料プランへの加入が必要です)

f:id:hiro-chika:20170418032715p:plain

リポジトリが作成され、Gitで利用するための手順が示されます。

今回は既にローカルにリポジトリがある(コミット履歴がある)ため、「...or push an existing repository from the command line」に書いてある手順を実行します。

f:id:hiro-chika:20170418032738p:plain

$ git remote add origin https://github.com/hogehoge/vagrant_hello.git
$ git push -u origin master

「git remote add origin」はoriginという名前でプッシュ先のリモートリポジトリを追加しています。

「git push -u origin master」はoriginという名前のリモートリポジトリに対して、masterブランチの内容をプッシュしています。(-uオプションを付けることで、次回以降のプッシュ時のコマンドを省略し、「git push」のみで完結できます)

f:id:hiro-chika:20170418040807p:plain

プッシュ時にGitHubのウインドウが立ち上がるため、ログインします。(ログインしないとユーザ認証が通らないため、処理が進みません)

f:id:hiro-chika:20170418040111p:plain

プッシュ時の出力メッセージについては、オブジェクトのカウント数など、基準がよく分からないため説明を省略します。コンフリクト等のエラーが発生しなければ問題ないと思います。

f:id:hiro-chika:20170418040807p:plain

無事プッシュが完了すると、GitHubのWebページからソースコードやコミットログを確認できるようになります。

f:id:hiro-chika:20170418045746p:plain

 「Clone or download」ボタンをクリックすると、ソースコードをZIPファイルでダウンロードしたり、cloneコマンドで使用するURLを表示することができます。

f:id:hiro-chika:20170418053544p:plain

 

4. Gitで最新のVagrantfileを回収する 

最後にcloneコマンドを使い、チームメンバのPCでVagrantfileをダウンロードして仮想マシンを起動する手順を紹介します。

※メンバPCにVirtualboxVagrant・Gitがインストールされていることが前提です。入っていない場合は、インストールをお願いします。

まず、メンバPC上でGit Bashコンソールを立ち上げ、作業用ディレクトリで「git clone」を実行します。リモートリポジトリ名のディレクトリが作成されます。

$ git clone https://github.com/hogehoge/vagrant_hello.git

f:id:hiro-chika:20170420145434p:plain

次に、cdコマンドで作成されたディレクトリへ移動します。

$ cd vagrant_hello

ZIPでダウンロードする場合と異なり、cloneコマンドで取ってきた場合は「.git」ディレクトリ以下も全て含まれるため、今までのコミットログなどを全て確認できます。

これにより、開発者はcloneで取ってきたソースコードに変更を加え、同じリモートリポジトリにプッシュすることが容易になっています。

f:id:hiro-chika:20170420145541p:plain

次に、vagrant up --provider virtualboxを実行します。

$ vagrant up --provider virtualbox

f:id:hiro-chika:20170420145558p:plain

ダウンロードしたVagrantfileに基づいて仮想マシンが構築されるため、これでメンバ全員の開発環境を統一することが出来ました。

また、Vagrantでは「vagrant halt」で仮想マシンの停止、「vagrant destroy」で仮想マシンの削除、「vagrant reload」で仮想マシンの再起動を行うことが出来ます。sudoコマンドの実行や、suコマンドでのroot昇格も可能です。(パスワードは「vagrant」です)

ホストOSからゲストOSにSSHポート以外でアクセスする場合(webサーバなど)、Vagrantfileに「config.vm.network "forwarded_port"」の記載が必要なため注意して下さい。

 

4. 最後に

今回はBoxファイルを利用した仮想マシンの構築のみ行いましたが、VagrantではChefなどのプロビジョニングツールと連携して、ソフトウェアのインストールや設定ファイルの記述まで自動化することが可能です。

事前に設定済の仮想マシンをBox化してVagrantfileと共に配布する方法もありますが、プロビジョニングツールを使うことで以下のようなメリットがあります。

・環境をコード化できる(環境の可視化に加え、手順の再利用がしやすい)

・本番環境構築の際にも同じレシピファイルが使える(非仮想環境でも動作する)

プログラムの開発が終わり、本番環境の構築フェーズに入るタイミングでプロビジョニングツールは非常に活躍するので、個人的にはBox化よりもこちらをお勧めします。

※一応、ツールを使わずにVagrant単体でもプロビジョニングは可能ですが、2つ目のメリットを享受できないためオススメはできません。開発環境のみに適用など、用途を絞った使い方であればアリだと思います。

 

この記事で、少しでも多くの方の悩みを解決できれば幸いです。

非常に長くなりましたが、最後までお付き合いいただきありがとうございました。

修正点などありましたら適宜リライトしていきます。