開発環境整備ツールについてまとめてみる

# よくわからなくなってきた

- 2013/8/18版

[パシフィック・リム](http://wwws.warnerbros.co.jp/pacificrim/)よかった。
開発環境など頭でこんがらがってるので整理するために書く。

多分ここに列挙してることは、2013/10には古くなる...

# opscode

[Official site](http://www.opscode.com/)

- でかい
- chefの総本山
- chefの```provider```, ```resource```の使い方がわからなくなる度に公式サイトに行く

# Chef

[Official site](http://www.opscode.com/chef/)

- サーバー構築時、yum installでのパッケージインストールとかそういうのをcookbookという形でまとえておける
- 他人に開発環境の構築を頼むときにもVagrant向けなら```vagrant provision```しといてとかお願いできる
- 人の温もりを感じ取りづらい
- [ステージの概念](http://docs.opscode.com/essentials_nodes_chef_run.html)の把握が難しい、```ruby_block```の実行順序が```file```や```directory```などと違うとかどうしろと...
- [chef-solo](http://docs.opscode.com/chef_solo.html)だけじゃなく[chef-zero](https://github.com/jkeiser/chef-zero)がある
- そもそもchefは単独の環境で動作していることを前提として作られているわけじゃない
- 波動だと思うようになってきた

# Vagrant

[Official](http://www.vagrantup.com/)

- [VMWare](http://www.vmware.com/jp/), [Virtualbox](https://www.virtualbox.org/)のcli toolをRubyでラッピングしたもの
- Chef連携可能
- [Puppet](http://puppetlabs.com/puppet/what-is-puppet)連携可能
- [AWS EC2](hhttps://github.com/mitchellh/vagrant-aws)や[Digital Ocean](https://github.com/smdahlen/vagrant-digitalocean)などのクラウドサービスに対するイメージ作成にもpluginで対応
- 1枚のVagrantfileで複数の仮想マシン対応可能
- すぐに立ち上げることができる[boxesリソース一覧が公開されていて](http://www.vagrantbox.es/)自分で用意せずともVagrantfileにbox指定すれば入れられて便利
- ただ、Dropboxを配信プロバイダとして利用してるboxだと転送量上限に引っかかってたりして落とせないことがある
- [boxについてはveeweeを使えば自作できる](https://github.com/jedi4ever/veewee)

## plugins

### Vagrant omunibus plugin

[Official site](https://github.com/schisamo/vagrant-omnibus)

- すでにchefが入ってるVagrant boxを使ったとしても、omunibusで指定したバージョンのchefをインストールしてくれる
- chefのバージョンによって使えなくなったcookbooksを適用したいときにも使える

### Vagrant berkshelf plugin

[Official site](https://github.com/riotgames/vagrant-berkshelf)

- Vagrant boxでのchef cookbookを適用する場合に使うplugin
- ```config.berkshelf.enabled = false``` しとかないとpluginが有効な状態になってしまう...

# Berkshelf

[Official site](http://berkshelf.com/)

- [RiotGames](http://www.riotgames.com/)が作ったChef cookbooksを管理するためのツール
- [LoL](http://beta.na.leagueoflegends.com/)バンザイ
- BerksfileというGemfileに似たパッケージ管理用のファイルを作って```berks --path cookbooks```すれば```cookbooks```以下に```chef cookbook```をインストールしてくれる

```ruby
site :opscode

cookbook "apt"
cookbook "rbenv", github: "fnichol/chef-rbenv"
cookbook "mysql"
```

- Berksfileに全てのcookbookリソースを記述するという形になっている
- ローカルにあるcookbookもBerksfileに記述できるんだけど、```site :opscode```の記述があるとopscodeを探しに行くので自作のcookbookがopscode communityにあるcookbookと名前が被ってると叱られる
- [reset](https://github.com/reset)さんとお話してみたい

# packer

[Official site](http://www.packer.io/)

- Vagrantの作者がgoで作ってる仮想環境を準備するためのツール
- [chef-solo対応のためのprovisioner作成PR](https://github.com/mitchellh/packer/pull/167)が出されていて、Vagrantからの乗り換え感をひしひしと感じたり。
- EC2、Dropbox連携もできる
- まだ個人で使っていれば、という感じかもしれないけど、いずれ乗り換えることになりそう(opscode次第なんだろうか...)

# capistrano

[Official site](http://www.capistranorb.com/)

- キャピストラーノ(読み)
- デプロイで使う
- ローカルでgit cloneして固めて相手サーバーに投げつけるとかそういうの書ける

# serverspec

[Official site](http://serverspec.org/)

- 既に出来上がっているサーバーの状態をチェックする
- rspec風(というかまんま)のテストコードを書いてチェックする
- 様々な環境(OS)に対応してる
- [Vagrant対応もされている](https://github.com/serverspec/serverspec/pull/191)
- 更新頻度が早く、加速感がある...

# test-kitchen

[Official site](https://github.com/opscode/test-kitchen)

- opscodeが作ってる
- Vagrant使って仮想環境おったててcookbookを仮想環境上で実行してくれる
- CI向け。