VagrantとVirtualBoxで仮想環境を構築する

こんにちは。TABI LABO エンジニアの南です。

ローカル開発環境を準備するにあたってVagrantでの仮想環境の構築を行ったので、今回は前編として仮想環境の立ち上げまでの手順をまとめてみようと思います。後編では、そこでRailsの開発が行えるまでの設定の手順についてまとめています。

仮想環境とは

仮想環境は大きくホスト型、ハイパーバイザー型、コンテナ型に分類できます。今回Vagrantで構築するホスト型の仮想環境では、自分のマシン(PC)内に独立した環境を作り、そこにRubyやRedis、Mysqlなど開発に必要なソフトウェアやライブラリをインストールしていきます。

仮想環境のメリット

仮想環境による開発のメリットをまとめると

  • 実働・本番環境に合わせたOSの選択が可能
  • Vagrantコマンド一発で環境の構築・停止・削除・再構築などが可能
  • マシンの環境とは独立しているのでソフトやパッケージのインストールなどを仮想環境で気軽に試せる
  • chefなどの設定管理ソフトを導入すれば必要なソフトやライブラリが追加された状態の環境をすぐに作れる
  • 設定を共有すれば複数のディベロッパーの間で開発環境を揃えられる

などが挙げられ、効率よく開発を行うことができます。

今回採用したソフトウェア

  • VirtualBox:仮想環境を構築するためのソフトウェア
  • Vagrant:仮想環境の立ち上げ、停止、削除などをローカル環境のコマンドラインで操作するためのソフトウェア。

仮想環境の管理ツールとしてはVagrantはデファクトスタンダードになっており、VirtualBox以外にもVMware、KVMなどの仮想化ソフトウェアと合わせて利用することも可能です。

VirtualBoxはOracleが提供するオープンソースの仮想化ソフトウェアで、ソフトウェア単体で見ただけでも、クロスプラットフォーム、多機能・高性能(スナップショット機能など)、料金無料などの魅力に加え、Vagrant × VirtualBoxの組み合わせはネット上の情報がかなり充実しています。

仮想環境構築手順

本記事執筆時の私の環境は以下の通りです。

 macOS High Sierra 10.13.1
 VirtualBox 5.2.0
 Vagrant 2.0.1

まずは上にも挙げたVirtualBoxVagrant自分のPCのOSに合わせてそれぞれリンク先からインストールしてください。

Vagrantのインストール

 

VirtualBoxのインストール

インストールができたら実際にvagrantコマンドで仮想環境を作っていきます。

VagantではBoxと呼ばれる仮想マシンのテンプレートとなるイメージファイルを読み込んで環境を構築します。

今回はboxにbento/centos-7.4を使うので、わかりやすいよう「~/vagrant/centos7/」というディレクトリ構成とします。

vagrant@localhost$ mkdir -p ~/vagrant/centos-7.4

vagrant@localhost$ cd ~/vagrant/centos-7.4

vagrant@localhost$ vagrant init bento/centos-7.4

$ vagrant init で仮想環境の設定を行うVagrantfileが作成されます。

$ vagrant init box名とすることでboxの設定がVagrantfileに書き込まれます。

$ vagrant init bento/centos-7.4

Vagrantfileの確認・修正点は3つです。

boxが正しく設定されているか

config.vm.box = "bento/centos-7.4"

ポートフォワーディングの設定をコメントインしつつ、guest、hostともに3000に設定する。

config.vm.network "forwarded_port", guest: 3000, host: 3000

プライベートネットワークの行をコメントイン

config.vm.network "private_network", ip: "192.168.33.10"

仮想環境を立ち上げる前に以下によく使うvagrantのコマンドをまとめておきます。

vagrant基本コマンド

 vagrant up  仮想環境の起動
 vagrant halt  仮想環境の停止
 vagrant reload  仮想環境の再起動
 vagrant destory  仮想環境の削除
 vagrant suspend  仮想環境の一時停止
 vagrant ssh  仮想環境への接続

それでは仮想環境を立ち上げてみます。

vagrant@localhost$ vagrant up

無事立ち上がったでしょうか?以下のようなエラーが出た場合は、vagrant-vbguest というプラグインをインストールすれば、自動的にGuestAdditionsのバージョンを上げてくれます。

vagrant-vbguestのインストール

vagrant@localhost$ vagrant plugin install vagrant-vbguest

GuestAdditionsのアップデート

vagrant@localhost$ vagrant vbguest

確認

vagrant@localhost$ vagrant vbguest –status

vagrant@localhost$ vagrant reload

問題なく立ち上がればOKです。

仮想環境への接続

仮想環境への接続(ログイン)は以下のコマンドで行います。

vagrant@localhost$ vagrant ssh

今回立ち上げた環境ではローカルと仮想環境間でファイルを共有できるようになっています。

デフォルトではローカルのvagrant/centos-7.4と仮想環境の/vagrantのディレクトリの中身が同じになっています。

どのディレクトリを共有対象にするかは、Vagrantfileの以下の部分を修正することで変更できます。

config.vm.synced_folder "../data", "/vagrant_data"

具体的には、"../data"がローカル、"/vagrant_data"が仮想環境のディレクトリを表しています。

トラブルシューティング

私が仮想環境を立ち上げた時は、yumでライブラリをインストールした時などに文字化けしてしまっていました。

以下に修正手順をまとめます。

言語設定の確認

$ locale

私はこの時点で以下のようにLC_CTYPEについてアラートが出てました。


vagrant@localhost$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: LC_ALL?????????????????????: ??????????????????????
LANG=ja_JP.utf8
LC_COLLATE=”ja_JP.UTF-8″
LC_CTYPE=”UTF-8″
LC_MESSAGES=”ja_JP.UTF-8″
LC_MONETARY=”ja_JP.UTF-8″
LC_NUMERIC=”ja_JP.UTF-8″
LC_TIME=”ja_JP.UTF-8″
LC_ALL=

利用可能言語一覧

vagrant@localhost$ locale -a

grepで絞り込めます

vagrant@localhost$ locale -a | grep US

今回はen_US.utf8に設定します。

言語設定の変更

失敗例

vagrant@localhost$ localectl set-locale LANG=en_US.utf8

設定ファイルの変更確認

vagrant@localhost$ cat /etc/locale.conf

読み込み

vagrant@localhost$ source /etc/locale.conf

確認

vagrant@localhost$ locale

一見うまくいってるように見えますが、LC_CTYPEのみ設定が変わっておらず、しかも再度sshして入ると設定が元に戻ってしまいます。

成功例

vagrant@localhost$ vi ~/.bash_profile

以下を記述

vagrant@localhost$ source ~/.bash_profile

確認

vagrant@localhost$ locale

sshで再ログインして設定が戻っていないことを確認。

まとめ

以上で仮想環境の立ち上げは完了です。Vagrant × VirtualBoxを利用すれば簡単に開発環境を作れるので、ぜひ開発現場などでローカル開発環境の構築に取り入れてみてください。

後編では、yumとrbenvでRailsの開発環境を構築します。

chefでの環境構築の自動化についても機会があれば紹介したいと思います。