本文へスキップ

Development

Vagrant Box のバージョン管理

Vagrant Cloud を使って Vagrant Box を適切にバージョン管理する方法を解説します。Vagrantfile の設定からバージョン付き Box のリリースまでの全工程をステップバイステップで説明し、チームやプロジェクト全体で一貫した開発環境を維持できるようにします。

5 分で読めます

概要

Vagrant のバージョン管理機能をいろいろ試してみたので、初めて取り組む方のためにこのチュートリアルを書くことにしました。この機能とその使い方に関するドキュメントは少なく、あちこちに散らばっています。改善のためのご意見があれば、ぜひお知らせください。

Vagrant

Vagrant は、完全な開発環境を構築するためのツールです。使いやすいワークフローと自動化への注力により、Vagrant は開発環境のセットアップ時間を短縮し、開発環境と本番環境の一致度を高め、「自分のマシンでは動く」という言い訳を過去のものにします。

Vagrant Cloud

Vagrant Cloud は、Vagrant 環境を共有、発見、作成するための場所です。現在、Vagrant Cloud はベータ版です。

カスタム Box または既存の Box を使う

このチュートリアルを進めるには、Box を用意しておくことをおすすめします。既存の Box を使っても、カスタム Box を作成してもかまいません。Box を作成する場合でも既存の Box を使う場合でも、バージョン管理を実装するために Box に特別な作業をする必要はありません。

このチュートリアルでは、Packer を使って作成した Ubuntu 用の既存の Box を使用します。使用したテンプレートの例は、私の GitHub プロジェクト skoblenick/packer-examples にあります。

Vagrantfile にバージョンを追加する

Vagrant 1.5.0 以降で Vagrant の API に変更が加えられ、バージョン管理の機能が追加されました。主に気にする必要があるのは次の 2 つです。

  1. config.vm.box_version

    使用する Box のバージョンです。このバージョンは、Vagrant Cloud 上の「Released」のバージョンと一致している必要があります。

  2. config.vm.box_check_update

    true の場合、Vagrant は vagrant up のたびに、設定された Box のアップデートを確認します。

Vagrantfile には、次のような記述があるはずです。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.require_version ">= 1.5.2"

Vagrant.configure("2") do |config|
  config.vm.box = "skoblenick/precise64"
  config.vm.box_version = "1.0.0"
  config.vm.box_check_update = true

  config.vm.provider "vmware_fusion" do |v, override|
    v.gui = false
  end

end

この時点で Vagrant を実行すると失敗します。Vagrant は「skoblenick/precise64」を見つけられず、結果として 404 Not Found になります。

Box の名前空間

Vagrant 1.5.0 より前は、Box は通常、ローカルのファイルパスか、ホストされている Box の HTTP URL で参照していました。

Vagrant 1.5.0 では、「<vagrantcloud_user>/<box_name>」のようなパターンに従う名前空間が導入されました。これは、Vagrant が Vagrant Cloud に問い合わせて HTTP URL に変換するエイリアスだと考えることができます。これは、Box を Vagrant Cloud に保存する必要があるという意味ではありません。ほとんどの場合、保存されるのは Box を定義するメタデータだけです。

vagrantcloud.com でアカウントを作成する

Vagrant Cloud でアカウントを作成する必要があります。サインアップはとても簡単なので、ここでは手順は説明しません。アカウントが作成されて確認が済んだら、ログインします。

Vagrant Cloud で Box を定義する

Vagrant Cloud はベータ版のため、ここで説明する手順は今後変わる可能性があります。以下の手順で新しい Box を作成します。

  1. メインナビゲーションで「Create Box」を選択します。

  2. Box の一般情報を入力します。

    • 今回は Box の名前を「precise64」にします。
    • この Box は私の開発用 Web サーバーに置くため、プライベートにもしておきます。
    • その他、必要と思われる情報を入力します。
    • 「Create box」ボタンをクリックします。
  3. 次のステップでは、Box のバージョンを定義します。

    • Vagrant は セマンティックバージョニング の使用を推奨しています。それに従って Box のバージョン番号を入力します。
    • 必要に応じて説明を入力します。
    • 「Create version」ボタンをクリックします。
  4. 次に、定義している Box がサポートするプロバイダーを追加します。

    • 「Create new provider」ボタンをクリックします。
    • プロバイダーの名前を入力します。私の場合は VMware Fusion なので「vmware_desktop」と入力します。
    • 「URL」ボタンをクリックします。
      URL ボタンをクリックすると、Box の URL の入力欄と、プロバイダーを追加するボタンが表示されます。
    • Box の URL を入力します。私の場合は http://localhost/boxes/precise64-1.0.0_vmware.box と入力します。
    • 「Create provider」ボタンをクリックします。
  5. バージョンを編集するよう求められます。入力内容を更新する必要があれば更新できます。この画面で重要なのは、緑色の「Release now」ボタンです。

    • 「Release now」ボタンをクリックします。これで Box が公開されるわけではありませんが、ステータスがアクティブに設定されます。これにより、コラボレーターに追加したユーザーが Box を使い始められるようになります。Box の作成者である私たち自身をコラボレーターに追加する必要はありません。

Box をダウンロードする前に、私が Box をプライベートにしたことを思い出してください。この設定では、追加の手順が 1 つ必要です。Vagrant は、どのユーザーで Vagrant Cloud にログインするかを知っている必要があります。

vagrant login

公開 Box を作成した場合、この手順は不要です。ただし、上記のようにプライベート Box を作成した場合は、Vagrant を実行するターミナルで次のコマンドを実行する必要があります。

username$ vagrant login
In a moment we'll ask for your username and password to Vagrant Cloud.
After authenticating, we will store an access token locally. Your
login details will be transmitted over a secure connection, and are
never stored on disk locally.

If you don't have a Vagrant Cloud account, sign up at vagrantcloud.com

Username or Email: user@example.com
Password (will be hidden):
You're now logged in!

vagrant up

最後に、ターミナルで vagrant up を実行すると、Box がダウンロード、クローンされて起動します。または、vagrant box add skoblenick/precise64 で Box を追加するだけでもかまいません。

共有