GDG信州 2014 Jan で発表したスライドです。
Vagrant + Berkshelf でお手軽写経環境構築GDG Shinshu Meetup – January 2014@thinkAmi
View Slide
自己紹介• @thinkAmi• hatenaID: thinkAmi• C#, Ruby• 自社インフラ管理• GDG信州, NSEG• シナノドルチェ・シナノゴールド派
はじめに• Vagrant + Berkshelf でお手軽写経環境構築– Vagrant (ベイグラント)– Chef (シェフ)– Berkshelf (バークシェルフ)• 本日のコード• https://gist.github.com/thinkAmi/8608604
写経• 本や雑誌に書いてあるコードを実際に写してみること• 和田卓人の“テスト駆動開発”講座 第6回 「写経」でTDDの手順や書き方を学ぶhttp://gihyo.jp/dev/serial/01/tdd/0006
最近• Ruby学習のため、写経しようと考えた– The RSpec Book (翔泳社)– Rails チュートリアル (Web, 達人出版会)
ところで• 自分のThinkPadのOSは、Windows7– 時々、Windowsではツライ扱いも...• 今回Linuxで写経をすることに
環境構築をどうするか• できるだけお手軽に写経環境を作りたい– やりたいのは写経であり、構築ではない• 案を考えてみた
環境案1• Windows + Linuxのデュアルブート
環境案1• やること多すぎ...• あんまり手軽に作れるイメージが無い– WindowsとLinux• パーティションを切る• Linux入れる• 環境作る• …– Windows8以降のブートローダー変更とか...
環境案2• VirtualBoxなどで仮想マシンを作ってそちらで写経する– 失敗しても、仮想マシンを削除すれば環境を作り直せる
環境案2• GUIでいろいろとやるのが手間...– 環境を作りなおすとしても、いちいちGUIから操作する• インストールとか• ネットワークやメモリの設定とか
環境案3• Vagrant– CUI + 設定ファイルから、仮想マシンを作る• 設定ファイル(Vagrantfile)にいろいろと記載– 設定ファイルを使い回すことで、同じ内容の仮想マシンを作成できる• コマンドラインから、お気軽に仮想マシンの起動と削除ができる– vagrant up で起動– vagrant destory で破棄
環境案3• Vagrant– 素のVagrantでは起動するところまで• インストールや環境設定のところは、まだ手動...
環境案4• Vagrant + Chef solo– Chef• インフラの構成等をcookbookという設定ファイル群へ記載し、実行する– gitをインストール– Terminalにgitのブランチ名を表示• Cookbookを使い回せば、何度でも再現可能• 自分で書かなくても、メジャーなものについてはすでにいくつも公開されている• Vagrantと組み合わせて利用することが可能
環境案4• Vagrant + Chef solo– cookbook間に依存関係があったりする• 依存を検証・対応するのが手間...
環境案5• Vagrant + Chef solo + Berkshelf– Berkshelf• Chefのcookbookの依存関係を解消する• Vagrantと組み合わせて利用することが可能– vagrant-berkshelfプラグインを使う• 注) 現在Berkshelfはv2系だが、v3がそろそろ– コマンドや設定が変更になるとか– これでようやくお手軽になった気がする!
ツールのセットアップ• 用意するツール– VirtualBox– Vagrant– Vagrant用のBox– Vagrant Plugin– Ruby– RubyDevkit– Bundler– Berkshelf v2系 ...なんか多い気が
ツールのセットアップ• VirtualBox– 公式サイトから落としてインストール• https://www.virtualbox.org/
ツールのセットアップ• Vagrant– 公式サイトから落としてインストール• http://www.vagrantup.com/
ツールのセットアップ• Vagrant用のBox– vagrantで作る仮想マシンのひな形– Vagrantbox.esで公開されているのを使ったり(自己責任)、自作したり– 事前に用意しておくといい感じ• 回線細いとダウンロードに時間がかかる...• 事前に用意した場合、以下のコマンドでVagrantへBoxを追加しておく– vagrant box add 場所>» vagrant box add ubuntu120403 d:\fuga.box
ツールのセットアップ• Vagrant用のPlugin– vagrant-omnibus• 仮想マシン上のChefの有無とインストールする• vagrant plugin install vagrant-omnibus– vagrant-berkshelf• VagrantとBerkshelfを連携する• vagrant plugin install vagrant-berkshelf
ツールのセットアップ• Ruby (Windowsの場合)– Berkshelfを入れるために使う• vagrantに同梱されているRubyを使いたいけどberksコマンドを認識してくれなかった– RubyInstallerから、ダウンロード• http://rubyinstaller.org/downloads/• Ruby 2.0.0-p353• インストール時にPathを通しておく
ツールのセットアップ• RubyDevkit (Windowsの場合)– Berkshelfを入れるために使う– RubyInstallerから、ダウンロード• http://rubyinstaller.org/downloads/• DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe
ツールのセットアップ• RubyDevkit (Windowsの場合)– ダウンロードしたものを解凍• c:\devkit など– コマンドプロンプトより実行• cd c:\devkit• ruby dk.rb init• ruby dk.rb install
ツールのセットアップ• Bundler– GemというRubyのパッケージを管理– Gemfileに、使用するGemのリストを記載• Berkshelfしかないけど、RubyInstallerで入れたRubyの環境を汚さないために、使用する– gem install bundler --no-ri --no-rdoc
ツールのセットアップ• Bundler– 今回使用するディレクトリを作って、その中にGemfileを入れておく• 例) D:\gdg\Gemfile– 中身はこんな感じ• v2系の最新版を指定しておくsource 'https://rubygems.org'gem 'berkshelf', '2.0.13'
ツールのセットアップ• Berkshelf– Bundlerを使ってBerkshelfを入れる• bundle install --path vendor/bundle» グローバルなところにGemを入れたくないので、--pathで入れ先を指定しておく» D:\gdg\verndor\bundle の中に入る
設定ファイルのセットアップ• Berkshelfでひな形を用意• Berksfileへ記載• recipes/default.rbヘ記載• Vagrantfileヘ記載• 今回はGitのインストールとTerminalの表示変更をしてみる
設定ファイルのセットアップ• Berkshelfでひな形を用意– 今回は、d:\gdg– bundle exec berks cookbook gdg-shinshu-201401– Bundlerを使っているので、berksの前にbundle execが必要
設定ファイルのセットアップ• ひな形– たくさんできるが、お手軽写経環境構築ではとりあえず以下だけおさえておく• recipes/default.rb• Berksfile• Vagrantfile
設定ファイルのセットアップ• Berksfileへ記載– 使用するcookbookやリソース元を記載– 今回は公開されているGitのcookbookを指定
設定ファイルのセットアップ• recipes/default.rbへ記載– Chef向けに書く– 独自の設定があればここに記述• Terminalにgitのブランチを表示する etc
設定ファイルのセットアップ• Vagrantfileへの記載– 仮想マシン設定や使用するcookbookを記載
デモ• Vagrantfileのあるディレクトリでvagrant up– しばらく待つと、VirtualBoxが起動– 更にしばらくすると、設定終了– ログにいろいろと出ている– Gitのブランチを作って見てみる
デモ• Gitのブランチを作って見てみる• mkdir hoge• cd hoge• git init• git checkout -b fuga• touch piyo.txt• git add .• git commit -m first– Terminalにブランチ名が表示されてる
あとは• recipeやcookbookを育ててく– Gitでバージョン管理し、• ブランチを切る• タグ付けするといろいろと楽かも• 忘れずに写経も...
参考文献• 今っぽい Vagrant + Chef Solo チュートリアルhttp://qiita.com/taiki45/items/b46a2f32248720ec2bae• 入門Chef Solo - Infrastructure as Code (伊藤直也 著)http://tatsu-zine.com/books/chef-solo