Infrastructures as Codes と聞いたらこう思った。
- 開発環境が必要なときにパッとセットアップしていらなくなったらパッと捨てたい
- だけど環境を整備する操作の履歴はとっておきたい
追加でこれもあったらいいよね。
- 開発時には手元のエディターを使って、動作確認を Vagrant ホストでやりたい
というわけで git submodule 先生、出番です !!
開発環境の整備
まずローカルのどこかや github あたりにホストの設定をおいておく。たとえばこういうの。
各ブランチの位置づけはこう。
- master
- サーバーの基礎設定だとか必須のパッケージインストールだとかをする
- 他のブランチの土台
- その他
- ミドルウェアや開発環境をのっける
上記リポジトリにはとりあえずで Node.js をつっこんだ nodejs ブランチがある。
ブランチは必要なものを適宜つくっていけばいいんだけど、基礎部分 master に変更があった場合は以下を参照して歴史改変していく前提。
実際の開発
開発開始、となった際にまずプロジェクト用のディレクトリを切って、 git を使う準備をする。
mkdir -r /path/to/project/dir/
cd /path/to/project/dir/
git init
で、たとえば Node.js アプリを開発します、という場合は、こう。
git submodule add -b nodejs https://github.com/januswel/centos6.5.git vagrant
git commit -m 'Add vagrant host as a submodule'
-b
でブランチ指定。サブモジュール追加後に commit しておく。
あとは Vagrant ホストをたちあげてプロビジョニングを走らせる。うちの場合こう。
cd vagrant
cp conf.yml.example conf.yml
vi conf.yml
vagrant up
cd ansible
ansible-playbook playbook.yml
conf.yml あたりのハナシは以下のようなことをしていると解釈してくださいな。全然本筋じゃないので無視していい。
- http://qiita.com/janus_wel/items/b379ab090f588288bbb9
- http://qiita.com/janus_wel/items/405998b2ebd47dd8b8af
これで開発環境が整った。楽 !!
開発は手元の環境で、動作確認は Vagrant ホストで
ガリガリと書くために Vagrantfile に以下の共有ディレクトリ設定をしてある。
config.vm.synced_folder "..", "/shared"
/path/to/project/dir/vagrant に Vagrant ホストがある場合は /path/to/project/dir 以下が /shared として共有されるわけですはい。というわけで以下のように手元でコードを書いていける。 Node.js の例ね。
cd /path/to/project/dir
mkdir app
cd app
vi helloworld.js
これを動かすために vagrant ssh して以下のコマンドを打つ。
cd /shared/app
node helloworld
開発環境からアプリコードが独立できてるね。
他のメンバーは
普通の submodule の扱いと一緒。
git pull https://example.com/your-team/awesome-app.git
git submodule init
で、あとはホスト立ち上げのコマンド群を打っていく。
ホスト側に変更があったとき
以下のコマンドでアップデートできる。
git submodule foreach git pull --rebase
git commit -am 'Update vagrant host'
ホストの再セットアップが必要なら vagrant destroy
して最初からやりなおせばいいじゃない。