Vagrant+chef(knife)が流行っていたのは知っていたのですが、
個人的に開発作業がなかったのでスルーしてました。
遅ればせながら試してみたので、手順を書き残しておきます。

ちなみに、Vagrantとは、ざっくり言うと、
VirtualBoxをコントロールして便利に開発用の環境を構築するためのツールです。
# バージョン1.1以降はVirtualBox以外(VMwareとか)も使えるようになっています。

以前はChef Soloのみを使って構築していたのですが、
気づけば、世の中便利になっていたので、今回はKnife SoloとBerkshelfも使ってみました。

それぞれのツールの役割を理解しやすいように、以下の図に整理しました。

vagrantchef_1


Berkshelf:
 公開されているCookbookの取得
Knife Solo:
 ①各ノードへのChef Soloセットアップ
 ②各ノードへのCookbookの転送
 ③Chef Soloの起動
Chef Solo:
レシピの実行(セットアップ実行)

<a href="http://www.flickr.com/photos/62769571@N03/9714120829" title="View 'vagrantchef_2' on Flickr.com"><img height="375" title="vagrantchef_2" alt="vagrantchef_2" border="0" src="http://farm8.staticflickr.com/7405/9714120829_a81f255569.jpg" width="500"/></a>

Berkshelf:本番環境と同じ
Vagrant:
 ①各ノードの起動
 ②各ノードへのChef Soloセットアップ
 ③各ノードへのCookbookの転送
 ④Chef Soloの起動
VirtualBox:
 開発用仮想環境
Chef Solo:本番環境と同じ

環境構築は次の流れで行います。
1. VirualBoxのインストール
1. Vagrantとプラグインのインストール
2. Knife Soloのインストール
3. 仮想マシンの起動
※構築環境はMacOS10.8.4、rubyはセットアップ済みの前提です。

VirtualBoxのインストール

以下のサイトからVirtualBoxをダウンロードします。

VirtualBox
 https://www.virtualbox.org
 →Downloads → VirtualBox 4.2.16 for OS X hosts
ファイル名:VirtualBox-4.2.16-86992-OSX.dmg

ダウンロードしたファイルを開き「VirtualBox.pkg」をダブルクリック、
インストーラの指示に従ってインストールを実行します。

Vagrantとプラグインのインストール

以下のサイトからVagrantをダウンロードします。

Vagrant
 http://www.vagrantup.com
 →Download → v1.2.7
ファイル名:Vagrant-1.2.7.dmg

ダウンロードしたファイルを開き「Vagrant.pkg」をダブルクリック、
インストーラの指示に従ってインストールを実行します。

以下のコマンドで、バージョン確認できればセットアップは成功です。

$ vagrant -v
Vagrant version 1.2.7

Knife Soloのインストール

以下のコマンドで、Knife Soloの作業用ディレクトリを作成します。

$ mkdir ~/chef-repo

作業用ディレクトリに以下ファイルを作成します。

Gemfile

source 'https://rubygems.org'
gem 'chef'
gem 'knife-solo'
gem 'berkshelf'

Berksfile

site :opscode
cookbook 'nginx'

以下のコマンドで、KnifeSoloとBerkshelfをインストールします。

$ bundle install --path=vendor/bundle

以下のコマンドで、knifeのディレクトリ構成を作成します。

$ bundle exec knife solo init .

ここまでで、以下のような構成になります。
+ Berksfile
+ Gemfile
+ Gemfile.lock
+ cookbooks
+ data_bags
+ nodes
+ roles
+ site-cookbooks
+ vendor

ひとまず、このディレクトリ構成をgitにcommitしておきます。
# .gitignoreに「/vendor/」を追加しておいた方がよいです。

$ git init
$ git add .
$ git commit -a -m "initial commit"

以下のコマンドで、opscodeのリポジトリからnginxと依存するcookbookを取得します。

$ bundle exec berks --path=cookbooks

Vagrantで仮想マシンを起動

以下のコマンドで、VagrantのbaseとなるBoxを取得します。
ここではCentOS6.4 64bitをベースとして使用しています。
# 利用可能なBoxのリストが、以下のサイトに掲載されています。
# Vagrantbox.es
#  http://www.vagrantbox.es

$ vagrant box add CentOS64_x64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box

以下のコマンドで、Vagrantfileを作成します。

$ vagrant init CentOS64_x64

Vagrantfileに、次の内容(config.vm.provision以下)を追記します。

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "base"
config.vm.provision :chef_solo do |chef|
chef.add_recipe "nginx"
end
end

以下のコマンドで、仮想マシンの起動及びChefレシピの適用を行います。
# 仮想マシンの起動やChefレシピ適用のログが出力されます。

$ vagrant up

以下のコマンドで、仮想マシンにsshで接続します。

$ vagrant ssh

仮想マシンで以下のコマンドを実行するとnginxがセットアップされている事が確認できます。

[vagrant@localhost ~]$ ps -ef | grep nginx

開発環境が不要になったら以下のコマンドで、仮想マシンを停止・削除します。

$ vagrant destroy

以上のような手順で、
(本番環境をchefのrecipeで構築しているのであればですが、)
本番同様の開発環境を、簡単に構築することができます。

開発メンバの出入りが多いとか、
単体・機能テストフェーズにたくさん環境が必要な時とか、特に便利かなと感じました。