SlideShare a Scribd company logo
2014/04/24 shin1x1
DevLOVE関西
Vagrant 体験入門
ハンズオン準備
(c) 2014 Masashi Shinbara @shin1x1
USBメモリから
ファイルコピー
(c) 2014 Masashi Shinbara @shin1x1
Vagrantで作るPHP開発環境
http://www.slideshare.net/shin1x1/xampp-mamp-vagrant-php
(c) 2014 Masashi Shinbara @shin1x1
Vagrantで作るPHP開発環境[実践編]
http://www.slideshare.net/shin1x1/vagrant-php
(c) 2014 Masashi Shinbara @shin1x1
VagrantX
http://shin1x1.github.io/vagrantx/
(c) 2014 Masashi Shinbara @shin1x1
Web開発あるある
エンジニアSさん
(c) 2014 Masashi Shinbara @shin1x1
• Macbook Air で開発
• Apache / PHP / DB
• 複数案件を一台で
エンジニアSさん
(c) 2014 Masashi Shinbara @shin1x1
1162 <VirtualHost *:80>!
1163 ServerName candycane.local!
1164 DocumentRoot "/Users/shin/sandbox/demo/candycane/app/webroot"!
1165 </VirtualHost>!
1166 !
1167 <VirtualHost *:80>!
1168 ServerName demo.local!
1169 DocumentRoot "/Users/shin/sandbox/demo/20140601_phpcon"!
1170 php_value vld.active 1!
1171 </VirtualHost>!
1172 !
1173 <VirtualHost *:80>!
1174 ServerName evememo.local!
1175 DocumentRoot "/Users/shin/work/1x1/evememo/app/webroot"!
1176 </VirtualHost>!
1177 !
1178 <VirtualHost *:80>!
1179 ServerName kusaon.local!
1180 DocumentRoot "/Users/shin/work/kusaon/app/webroot"!
1181 </VirtualHost>!
エンジニアSさん
(c) 2014 Masashi Shinbara @shin1x1
1162 <VirtualHost *:80>!
1163 ServerName candycane.local!
1164 DocumentRoot "/Users/shin/sandbox/demo/candycane/app/webroot"!
1165 </VirtualHost>!
1166 !
1167 <VirtualHost *:80>!
1168 ServerName demo.local!
1169 DocumentRoot "/Users/shin/sandbox/demo/20140601_phpcon"!
1170 php_value vld.active 1!
1171 </VirtualHost>!
1172 !
1173 <VirtualHost *:80>!
1174 ServerName evememo.local!
1175 DocumentRoot "/Users/shin/work/1x1/evememo/app/webroot"!
1176 </VirtualHost>!
1177 !
1178 <VirtualHost *:80>!
1179 ServerName kusaon.local!
1180 DocumentRoot "/Users/shin/work/kusaon/app/webroot"!
1181 </VirtualHost>!
溢れる
VirtualHost
とある開発チームA
(c) 2014 Masashi Shinbara @shin1x1
• チームで開発
• Macbook / Windows で開発
• Apache / PHP / DB
とある開発チームA
(c) 2014 Masashi Shinbara @shin1x1
あれ?動かない。

何か変なコード書いた?
こっちは動いてるよ。
拡張追加しないとダメだよ。
とある開発チームA
(c) 2014 Masashi Shinbara @shin1x1
あれ?動かない。

何か変なコード書いた?
こっちは動いてるよ。
拡張追加しないとダメだよ。
俺の環境では動く
とある開発チーム新人Cさん
(c) 2014 Masashi Shinbara @shin1x1
ここの手順で開発環境を
構築しておいて。
わかりました!
(c) 2014 Masashi Shinbara @shin1x1
# tar xvzf postgresql-8.3.9.tar.gz!
# mv postgresql-8.3.9 /usr/local/src!
# cd /usr/local/src/postgresql-8.3.9!
# ./congure {prex=/usr/local/pgsql!
# gmake && gmake install!
!/usr/local/pgsql/lib/pgxs/cong/install-sh!
/bin/sh ../cong/install-sh -c -m 755 ./mkinstalldirs!
/usr/local/pgsql/lib/pgxs/cong/mkinstalldirs!
!gmake[1]: Leaving directory `/usr/local/src/postgresql-8.3.9/cong'!
PostgreSQL installation complete.!
!# .bash prole!
# Get the aliases and functions!
if [ -f ~/.bashrc ]; then!
.!
~/.bashrc!
!# User specic environment and startup programs!
PATH=$PATH:$HOME/bin!
PATH=$PATH:/usr/java/jdk1.5.0 21/bin!
export PATH!
unset USERNAME!
export JAVA HOME=/usr/java/jdk1.5.0 21/!
export CATALINA HOME=/usr/local/tomcat!
export CLASSPATH=$CLASSPATH:$CATALINA HOME/common/lib!
export CATALINA OPTS="-server -Xms512m -Xmx512m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=64m"!
!# tar xvzf postgresql-8.3.9.tar.gz!
# mv postgresql-8.3.9 /usr/local/src!
# cd /usr/local/src/postgresql-8.3.9!
# ./congure {prex=/usr/local/pgsql!
# gmake && gmake install!
!/usr/local/pgsql/lib/pgxs/cong/install-sh!
/bin/sh ../cong/install-sh -c -m 755 ./mkinstalldirs!
/usr/local/pgsql/lib/pgxs/cong/mkinstalldirs!
!gmake[1]: Leaving directory `/usr/local/src/postgresql-8.3.9/cong'!
PostgreSQL installation complete.!
!# .bash prole!
# Get the aliases and functions!
if [ -f ~/.bashrc ]; then!
.!
~/.bashrc!
!# User specic environment and startup programs!
PATH=$PATH:$HOME/bin!
PATH=$PATH:/usr/java/jdk1.5.0 21/bin!
export PATH!
unset USERNAME!
export JAVA HOME=/usr/java/jdk1.5.0 21/!
export CATALINA HOME=/usr/local/tomcat!
export CLASSPATH=$CLASSPATH:$CATALINA HOME/common/lib!
export CATALINA OPTS="-server -Xms512m -Xmx512m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=64m"!
とある開発チーム新人Cさん
(c) 2014 Masashi Shinbara @shin1x1
# tar xvzf postgresql-8.3.9.tar.gz!
# mv postgresql-8.3.9 /usr/local/src!
# cd /usr/local/src/postgresql-8.3.9!
# ./congure {prex=/usr/local/pgsql!
# gmake && gmake install!
!
/usr/local/pgsql/lib/pgxs/cong/install-sh!
/bin/sh ../cong/install-sh -c -m 755 ./mkinstalldirs!
/usr/local/pgsql/lib/pgxs/cong/mkinstalldirs!
!
gmake[1]: Leaving directory `/usr/local/src/postgresql-8.3.9/cong'!
PostgreSQL installation complete.!
!
# .bash prole!
# Get the aliases and functions!
if [ -f ~/.bashrc ]; then!
.!
~/.bashrc!
!
# User specic environment and startup programs!
PATH=$PATH:$HOME/bin!
PATH=$PATH:/usr/java/jdk1.5.0 21/bin!
export PATH!
unset USERNAME!
export JAVA HOME=/usr/java/jdk1.5.0 21/!
export CATALINA HOME=/usr/local/tomcat!
export CLASSPATH=$CLASSPATH:$CATALINA HOME/common/lib!
export CATALINA OPTS="-server -Xms512m -Xmx512m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=64m"!
とある開発チーム新人Cさん
これやるの・・・
(c) 2014 Masashi Shinbara @shin1x1
# tar xvzf postgresql-8.3.9.tar.gz!
# mv postgresql-8.3.9 /usr/local/src!
# cd /usr/local/src/postgresql-8.3.9!
# ./congure {prex=/usr/local/pgsql!
# gmake && gmake install!
!
/usr/local/pgsql/lib/pgxs/cong/install-sh!
/bin/sh ../cong/install-sh -c -m 755 ./mkinstalldirs!
/usr/local/pgsql/lib/pgxs/cong/mkinstalldirs!
!
gmake[1]: Leaving directory `/usr/local/src/postgresql-8.3.9/cong'!
PostgreSQL installation complete.!
!
# .bash prole!
# Get the aliases and functions!
if [ -f ~/.bashrc ]; then!
.!
~/.bashrc!
!
# User specic environment and startup programs!
PATH=$PATH:$HOME/bin!
PATH=$PATH:/usr/java/jdk1.5.0 21/bin!
export PATH!
unset USERNAME!
export JAVA HOME=/usr/java/jdk1.5.0 21/!
export CATALINA HOME=/usr/local/tomcat!
export CLASSPATH=$CLASSPATH:$CATALINA HOME/common/lib!
export CATALINA OPTS="-server -Xms512m -Xmx512m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=64m"!
とある開発チーム新人Cさん
しかも動かない!
とある開発チーム新人Cさん
(c) 2014 Masashi Shinbara @shin1x1
あ、あの手順の後、
○○を☓☓して、△△も入れておいて
はあ
とある開発チーム新人Cさん
(c) 2014 Masashi Shinbara @shin1x1
あ、あの手順の後、
○○を☓☓して、△△も入れておいて
はあ
スタートラインは
どこだ
WebデザイナーBさん
(c) 2014 Masashi Shinbara @shin1x1
• WordPressのデザイン
• XAMPPをインストール
• でもなんだか動かない。。。
(c) 2014 Masashi Shinbara @shin1x1
WebデザイナーBさん
(c) 2014 Masashi Shinbara @shin1x1
WebデザイナーBさん
Port 80 は
俺のモノ
そこでVagrant
(c) 2014 Masashi Shinbara @shin1x1
Vagrant?
(c) 2014 Masashi Shinbara @shin1x1
Vagrant?
(c) 2014 Masashi Shinbara @shin1x1
軽量で、再現可能かつポータブルな
開発環境の構築、設定を行う
独立した環境
(c) 2014 Masashi Shinbara @shin1x1
• 仮想環境を使った、独立した環境
• ホストに影響が無い
• プロジェクト毎にクリーンな環境
再現が可能
(c) 2014 Masashi Shinbara @shin1x1
• 構築手順をコードで記述
• コードに添って自動構築
• 全く同じ環境を再現可能
ポータブル
(c) 2014 Masashi Shinbara @shin1x1
• 構築手順コードがあればどこでも構築
• チームで同じ環境を各PCに構築
• コマンド一つ実行するだけ
Vagrant
(c) 2014 Masashi Shinbara @shin1x1
• HashiCorp が開発した OSS(MIT)
• Ruby
• 仮想環境の構築、プロビジョニングを

実行するコマンドラインツール
• 構築手順をコードで定義(Vagrantfile)
(c) 2014 Masashi Shinbara @shin1x1
Vagrant
仮想環境
仮想マシン構築
Vagrant
CentOS, Ubuntu,	

FreeBSD, etc
(c) 2014 Masashi Shinbara @shin1x1
仮想環境
仮想マシン構築
Vagrant
プロビジョニング
Vagrant
Apache, PHP, 	

MySQL, Redis, etc
(c) 2014 Masashi Shinbara @shin1x1
仮想環境
仮想マシン構築
Vagrant
プロビジョニング
Vagrant
$ vagrant up
Vagrant ワークフロー
(c) 2014 Masashi Shinbara @shin1x1
$ git clone REPO/project!
$ cd project!
$ vagrant up
• 環境構築はこれだけ
• こうなるように構成しておく!
vagrant 主なコマンド
(c) 2014 Masashi Shinbara @shin1x1
• 仮想サーバ起動
$ vagrant up
• 仮想サーバへ SSH ログイン
$ vagrant ssh
• 仮想サーバ停止
$ vagrant halt
• 仮想サーバ停止+破棄
$ vagrant destroy
(c) 2014 Masashi Shinbara @shin1x1
Vagrantで
おさえておきたい用語
Provider
(c) 2014 Masashi Shinbara @shin1x1
• 仮想環境
• VirtualBox, VMWare, Hyper-V
• AWS, DigitalOcean
Box
(c) 2014 Masashi Shinbara @shin1x1
• 仮想マシンイメージ
• CentOS, Ubuntu, FreeBSD, OSX, etc
• Vagrant Cloud

• Bento - Chef社が作成したBox
https://github.com/opscode/bento
https://vagrantcloud.com/
Box
(c) 2014 Masashi Shinbara @shin1x1
• 仮想マシンイメージ
• CentOS, Ubuntu, FreeBSD, OSX, etc
• Vagrant Cloud

• Bento - Chef社が作成したBox
https://github.com/opscode/bento
https://vagrantcloud.com/
!
ハンズオンでは、
Bento の CentOS 6.5
を使います。
Provisioner
(c) 2014 Masashi Shinbara @shin1x1
• プロビジョンを実行するツール
• シェル, Chef Solo, Puppet, 

Ansible, Docker, etc
• まずは シェル をおすすめ
Provisioner
(c) 2014 Masashi Shinbara @shin1x1
If you've never used a configuration
management system before,
it is recommended you start with
basic shell scripts for provisioning.
http://docs.vagrantup.com/v2/provisioning/index.html
Synced Folder
(c) 2014 Masashi Shinbara @shin1x1
•ホストPCのディレクトリと

仮想サーバのディレクトリを同期
•開発はホストPCで、

実行は仮想サーバで
•PhpStormやEclipseで開発可能
(c) 2014 Masashi Shinbara @shin1x1
$ ls .!
Vagrantfile
$ ls /vagrant!
Vagrantfile
ホストPC
仮想マシン
Synced Folder
Synced Folder
(c) 2014 Masashi Shinbara @shin1x1
• Shared Folder(デフォルト)
• NFS(ホストがNFSサーバになる)
• Rsync(自動でrsync実行)
Vagrantfile
(c) 2014 Masashi Shinbara @shin1x1
• 構築手順を記述したファイル
• このファイルを元に環境構築
• Ruby の DSL
• 分かる人が書けば良い
Vagrantfile
(c) 2014 Masashi Shinbara @shin1x1
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|!
config.vm.box = "opscode-centos65"!
config.vm.network “private_network", ip: "192.168.33.10"!
!
config.vm.provision "shell", inline: <<-EOT!
yum -y install httpd!
cp -a /vagrant/httpd.conf /etc/httpd/conf/!
/sbin/service httpd restart!
/sbin/chkconfig httpd on!
EOT!
end
主なユースケース
(c) 2014 Masashi Shinbara @shin1x1
• 検証環境
• 開発環境
• 仮公開環境
(c) 2014 Masashi Shinbara @shin1x1
ハンズオン
(c) 2014 Masashi Shinbara @shin1x1
流れ
1. USBメモリから必要なファイルコピー
2. Qiita に書いた手順でハンズオン
3. 上手く動いたら tweet (#DevKan)
(c) 2014 Masashi Shinbara @shin1x1
手順資料
#DevKan
http://qiita.com/shin1x1/items/
3288d9de7f04192b6ad8
(c) 2014 Masashi Shinbara @shin1x1
Tips
Git で管理
(c) 2014 Masashi Shinbara @shin1x1
• Vagrantfile とプロビジョニング
ファイルをリポジトリへ
• .vagrant/ は .gitignore
• ソースコードリポジトリに同梱
チームで共有
(c) 2014 Masashi Shinbara @shin1x1
• 環境を揃える

VirtualBox

private ip

shared_folder
• Box は、必要最低限な構成

(Bento)
Sahara Plugin
(c) 2014 Masashi Shinbara @shin1x1
• Vagrant Plugin

https://github.com/jedi4ever/sahara
• 仮想サーバの状態を DB の

ROLLBACK のように戻せる
Sahara Plugin
(c) 2014 Masashi Shinbara @shin1x1
!
$ vagrant plugin install sahara!
• インストール
Sahara Plugin
(c) 2014 Masashi Shinbara @shin1x1
$ vagrant sandbox on
• sandbox モード開始 = BEGIN;
$ vagrant sandbox rollback
• 元に戻す = ROLLBACK;
$ vagrant sandbox commit
• 変更確定 = COMMIT;
$ vagrant sandbox off
• sandbox モード終了
参考1
(c) 2014 Masashi Shinbara @shin1x1
http://docs.vagrantup.com/v2/
参考2
(c) 2014 Masashi Shinbara @shin1x1
http://www.oreilly.co.jp/books/9784873116655/
参考3
(c) 2014 Masashi Shinbara @shin1x1
http://www.amazon.co.jp/dp/B00F418SQ8
@shin1x1
(c) 2014 Masashi Shinbara @shin1x1

More Related Content

Vagrant体験入門

  • 2. ハンズオン準備 (c) 2014 Masashi Shinbara @shin1x1 USBメモリから ファイルコピー
  • 3. (c) 2014 Masashi Shinbara @shin1x1 Vagrantで作るPHP開発環境 http://www.slideshare.net/shin1x1/xampp-mamp-vagrant-php
  • 4. (c) 2014 Masashi Shinbara @shin1x1 Vagrantで作るPHP開発環境[実践編] http://www.slideshare.net/shin1x1/vagrant-php
  • 5. (c) 2014 Masashi Shinbara @shin1x1 VagrantX http://shin1x1.github.io/vagrantx/
  • 6. (c) 2014 Masashi Shinbara @shin1x1 Web開発あるある
  • 7. エンジニアSさん (c) 2014 Masashi Shinbara @shin1x1 • Macbook Air で開発 • Apache / PHP / DB • 複数案件を一台で
  • 8. エンジニアSさん (c) 2014 Masashi Shinbara @shin1x1 1162 <VirtualHost *:80>! 1163 ServerName candycane.local! 1164 DocumentRoot "/Users/shin/sandbox/demo/candycane/app/webroot"! 1165 </VirtualHost>! 1166 ! 1167 <VirtualHost *:80>! 1168 ServerName demo.local! 1169 DocumentRoot "/Users/shin/sandbox/demo/20140601_phpcon"! 1170 php_value vld.active 1! 1171 </VirtualHost>! 1172 ! 1173 <VirtualHost *:80>! 1174 ServerName evememo.local! 1175 DocumentRoot "/Users/shin/work/1x1/evememo/app/webroot"! 1176 </VirtualHost>! 1177 ! 1178 <VirtualHost *:80>! 1179 ServerName kusaon.local! 1180 DocumentRoot "/Users/shin/work/kusaon/app/webroot"! 1181 </VirtualHost>!
  • 9. エンジニアSさん (c) 2014 Masashi Shinbara @shin1x1 1162 <VirtualHost *:80>! 1163 ServerName candycane.local! 1164 DocumentRoot "/Users/shin/sandbox/demo/candycane/app/webroot"! 1165 </VirtualHost>! 1166 ! 1167 <VirtualHost *:80>! 1168 ServerName demo.local! 1169 DocumentRoot "/Users/shin/sandbox/demo/20140601_phpcon"! 1170 php_value vld.active 1! 1171 </VirtualHost>! 1172 ! 1173 <VirtualHost *:80>! 1174 ServerName evememo.local! 1175 DocumentRoot "/Users/shin/work/1x1/evememo/app/webroot"! 1176 </VirtualHost>! 1177 ! 1178 <VirtualHost *:80>! 1179 ServerName kusaon.local! 1180 DocumentRoot "/Users/shin/work/kusaon/app/webroot"! 1181 </VirtualHost>! 溢れる VirtualHost
  • 10. とある開発チームA (c) 2014 Masashi Shinbara @shin1x1 • チームで開発 • Macbook / Windows で開発 • Apache / PHP / DB
  • 11. とある開発チームA (c) 2014 Masashi Shinbara @shin1x1 あれ?動かない。
 何か変なコード書いた? こっちは動いてるよ。 拡張追加しないとダメだよ。
  • 12. とある開発チームA (c) 2014 Masashi Shinbara @shin1x1 あれ?動かない。
 何か変なコード書いた? こっちは動いてるよ。 拡張追加しないとダメだよ。 俺の環境では動く
  • 13. とある開発チーム新人Cさん (c) 2014 Masashi Shinbara @shin1x1 ここの手順で開発環境を 構築しておいて。 わかりました!
  • 14. (c) 2014 Masashi Shinbara @shin1x1 # tar xvzf postgresql-8.3.9.tar.gz! # mv postgresql-8.3.9 /usr/local/src! # cd /usr/local/src/postgresql-8.3.9! # ./congure {prex=/usr/local/pgsql! # gmake && gmake install! !/usr/local/pgsql/lib/pgxs/cong/install-sh! /bin/sh ../cong/install-sh -c -m 755 ./mkinstalldirs! /usr/local/pgsql/lib/pgxs/cong/mkinstalldirs! !gmake[1]: Leaving directory `/usr/local/src/postgresql-8.3.9/cong'! PostgreSQL installation complete.! !# .bash prole! # Get the aliases and functions! if [ -f ~/.bashrc ]; then! .! ~/.bashrc! !# User specic environment and startup programs! PATH=$PATH:$HOME/bin! PATH=$PATH:/usr/java/jdk1.5.0 21/bin! export PATH! unset USERNAME! export JAVA HOME=/usr/java/jdk1.5.0 21/! export CATALINA HOME=/usr/local/tomcat! export CLASSPATH=$CLASSPATH:$CATALINA HOME/common/lib! export CATALINA OPTS="-server -Xms512m -Xmx512m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=64m"! !# tar xvzf postgresql-8.3.9.tar.gz! # mv postgresql-8.3.9 /usr/local/src! # cd /usr/local/src/postgresql-8.3.9! # ./congure {prex=/usr/local/pgsql! # gmake && gmake install! !/usr/local/pgsql/lib/pgxs/cong/install-sh! /bin/sh ../cong/install-sh -c -m 755 ./mkinstalldirs! /usr/local/pgsql/lib/pgxs/cong/mkinstalldirs! !gmake[1]: Leaving directory `/usr/local/src/postgresql-8.3.9/cong'! PostgreSQL installation complete.! !# .bash prole! # Get the aliases and functions! if [ -f ~/.bashrc ]; then! .! ~/.bashrc! !# User specic environment and startup programs! PATH=$PATH:$HOME/bin! PATH=$PATH:/usr/java/jdk1.5.0 21/bin! export PATH! unset USERNAME! export JAVA HOME=/usr/java/jdk1.5.0 21/! export CATALINA HOME=/usr/local/tomcat! export CLASSPATH=$CLASSPATH:$CATALINA HOME/common/lib! export CATALINA OPTS="-server -Xms512m -Xmx512m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=64m"! とある開発チーム新人Cさん
  • 15. (c) 2014 Masashi Shinbara @shin1x1 # tar xvzf postgresql-8.3.9.tar.gz! # mv postgresql-8.3.9 /usr/local/src! # cd /usr/local/src/postgresql-8.3.9! # ./congure {prex=/usr/local/pgsql! # gmake && gmake install! ! /usr/local/pgsql/lib/pgxs/cong/install-sh! /bin/sh ../cong/install-sh -c -m 755 ./mkinstalldirs! /usr/local/pgsql/lib/pgxs/cong/mkinstalldirs! ! gmake[1]: Leaving directory `/usr/local/src/postgresql-8.3.9/cong'! PostgreSQL installation complete.! ! # .bash prole! # Get the aliases and functions! if [ -f ~/.bashrc ]; then! .! ~/.bashrc! ! # User specic environment and startup programs! PATH=$PATH:$HOME/bin! PATH=$PATH:/usr/java/jdk1.5.0 21/bin! export PATH! unset USERNAME! export JAVA HOME=/usr/java/jdk1.5.0 21/! export CATALINA HOME=/usr/local/tomcat! export CLASSPATH=$CLASSPATH:$CATALINA HOME/common/lib! export CATALINA OPTS="-server -Xms512m -Xmx512m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=64m"! とある開発チーム新人Cさん これやるの・・・
  • 16. (c) 2014 Masashi Shinbara @shin1x1 # tar xvzf postgresql-8.3.9.tar.gz! # mv postgresql-8.3.9 /usr/local/src! # cd /usr/local/src/postgresql-8.3.9! # ./congure {prex=/usr/local/pgsql! # gmake && gmake install! ! /usr/local/pgsql/lib/pgxs/cong/install-sh! /bin/sh ../cong/install-sh -c -m 755 ./mkinstalldirs! /usr/local/pgsql/lib/pgxs/cong/mkinstalldirs! ! gmake[1]: Leaving directory `/usr/local/src/postgresql-8.3.9/cong'! PostgreSQL installation complete.! ! # .bash prole! # Get the aliases and functions! if [ -f ~/.bashrc ]; then! .! ~/.bashrc! ! # User specic environment and startup programs! PATH=$PATH:$HOME/bin! PATH=$PATH:/usr/java/jdk1.5.0 21/bin! export PATH! unset USERNAME! export JAVA HOME=/usr/java/jdk1.5.0 21/! export CATALINA HOME=/usr/local/tomcat! export CLASSPATH=$CLASSPATH:$CATALINA HOME/common/lib! export CATALINA OPTS="-server -Xms512m -Xmx512m -Xss512k -XX:PermSize=64m -XX:MaxPermSize=64m"! とある開発チーム新人Cさん しかも動かない!
  • 17. とある開発チーム新人Cさん (c) 2014 Masashi Shinbara @shin1x1 あ、あの手順の後、 ○○を☓☓して、△△も入れておいて はあ
  • 18. とある開発チーム新人Cさん (c) 2014 Masashi Shinbara @shin1x1 あ、あの手順の後、 ○○を☓☓して、△△も入れておいて はあ スタートラインは どこだ
  • 19. WebデザイナーBさん (c) 2014 Masashi Shinbara @shin1x1 • WordPressのデザイン • XAMPPをインストール • でもなんだか動かない。。。
  • 20. (c) 2014 Masashi Shinbara @shin1x1 WebデザイナーBさん
  • 21. (c) 2014 Masashi Shinbara @shin1x1 WebデザイナーBさん Port 80 は 俺のモノ
  • 23. Vagrant? (c) 2014 Masashi Shinbara @shin1x1
  • 24. Vagrant? (c) 2014 Masashi Shinbara @shin1x1 軽量で、再現可能かつポータブルな 開発環境の構築、設定を行う
  • 25. 独立した環境 (c) 2014 Masashi Shinbara @shin1x1 • 仮想環境を使った、独立した環境 • ホストに影響が無い • プロジェクト毎にクリーンな環境
  • 26. 再現が可能 (c) 2014 Masashi Shinbara @shin1x1 • 構築手順をコードで記述 • コードに添って自動構築 • 全く同じ環境を再現可能
  • 27. ポータブル (c) 2014 Masashi Shinbara @shin1x1 • 構築手順コードがあればどこでも構築 • チームで同じ環境を各PCに構築 • コマンド一つ実行するだけ
  • 28. Vagrant (c) 2014 Masashi Shinbara @shin1x1 • HashiCorp が開発した OSS(MIT) • Ruby • 仮想環境の構築、プロビジョニングを
 実行するコマンドラインツール • 構築手順をコードで定義(Vagrantfile)
  • 29. (c) 2014 Masashi Shinbara @shin1x1 Vagrant 仮想環境 仮想マシン構築 Vagrant CentOS, Ubuntu, FreeBSD, etc
  • 30. (c) 2014 Masashi Shinbara @shin1x1 仮想環境 仮想マシン構築 Vagrant プロビジョニング Vagrant Apache, PHP, MySQL, Redis, etc
  • 31. (c) 2014 Masashi Shinbara @shin1x1 仮想環境 仮想マシン構築 Vagrant プロビジョニング Vagrant $ vagrant up
  • 32. Vagrant ワークフロー (c) 2014 Masashi Shinbara @shin1x1 $ git clone REPO/project! $ cd project! $ vagrant up • 環境構築はこれだけ • こうなるように構成しておく!
  • 33. vagrant 主なコマンド (c) 2014 Masashi Shinbara @shin1x1 • 仮想サーバ起動 $ vagrant up • 仮想サーバへ SSH ログイン $ vagrant ssh • 仮想サーバ停止 $ vagrant halt • 仮想サーバ停止+破棄 $ vagrant destroy
  • 34. (c) 2014 Masashi Shinbara @shin1x1 Vagrantで おさえておきたい用語
  • 35. Provider (c) 2014 Masashi Shinbara @shin1x1 • 仮想環境 • VirtualBox, VMWare, Hyper-V • AWS, DigitalOcean
  • 36. Box (c) 2014 Masashi Shinbara @shin1x1 • 仮想マシンイメージ • CentOS, Ubuntu, FreeBSD, OSX, etc • Vagrant Cloud
 • Bento - Chef社が作成したBox https://github.com/opscode/bento https://vagrantcloud.com/
  • 37. Box (c) 2014 Masashi Shinbara @shin1x1 • 仮想マシンイメージ • CentOS, Ubuntu, FreeBSD, OSX, etc • Vagrant Cloud
 • Bento - Chef社が作成したBox https://github.com/opscode/bento https://vagrantcloud.com/ ! ハンズオンでは、 Bento の CentOS 6.5 を使います。
  • 38. Provisioner (c) 2014 Masashi Shinbara @shin1x1 • プロビジョンを実行するツール • シェル, Chef Solo, Puppet, 
 Ansible, Docker, etc • まずは シェル をおすすめ
  • 39. Provisioner (c) 2014 Masashi Shinbara @shin1x1 If you've never used a configuration management system before, it is recommended you start with basic shell scripts for provisioning. http://docs.vagrantup.com/v2/provisioning/index.html
  • 40. Synced Folder (c) 2014 Masashi Shinbara @shin1x1 •ホストPCのディレクトリと
 仮想サーバのディレクトリを同期 •開発はホストPCで、
 実行は仮想サーバで •PhpStormやEclipseで開発可能
  • 41. (c) 2014 Masashi Shinbara @shin1x1 $ ls .! Vagrantfile $ ls /vagrant! Vagrantfile ホストPC 仮想マシン Synced Folder
  • 42. Synced Folder (c) 2014 Masashi Shinbara @shin1x1 • Shared Folder(デフォルト) • NFS(ホストがNFSサーバになる) • Rsync(自動でrsync実行)
  • 43. Vagrantfile (c) 2014 Masashi Shinbara @shin1x1 • 構築手順を記述したファイル • このファイルを元に環境構築 • Ruby の DSL • 分かる人が書けば良い
  • 44. Vagrantfile (c) 2014 Masashi Shinbara @shin1x1 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|! config.vm.box = "opscode-centos65"! config.vm.network “private_network", ip: "192.168.33.10"! ! config.vm.provision "shell", inline: <<-EOT! yum -y install httpd! cp -a /vagrant/httpd.conf /etc/httpd/conf/! /sbin/service httpd restart! /sbin/chkconfig httpd on! EOT! end
  • 45. 主なユースケース (c) 2014 Masashi Shinbara @shin1x1 • 検証環境 • 開発環境 • 仮公開環境
  • 46. (c) 2014 Masashi Shinbara @shin1x1 ハンズオン
  • 47. (c) 2014 Masashi Shinbara @shin1x1 流れ 1. USBメモリから必要なファイルコピー 2. Qiita に書いた手順でハンズオン 3. 上手く動いたら tweet (#DevKan)
  • 48. (c) 2014 Masashi Shinbara @shin1x1 手順資料 #DevKan http://qiita.com/shin1x1/items/ 3288d9de7f04192b6ad8
  • 49. (c) 2014 Masashi Shinbara @shin1x1 Tips
  • 50. Git で管理 (c) 2014 Masashi Shinbara @shin1x1 • Vagrantfile とプロビジョニング ファイルをリポジトリへ • .vagrant/ は .gitignore • ソースコードリポジトリに同梱
  • 51. チームで共有 (c) 2014 Masashi Shinbara @shin1x1 • 環境を揃える
 VirtualBox
 private ip
 shared_folder • Box は、必要最低限な構成
 (Bento)
  • 52. Sahara Plugin (c) 2014 Masashi Shinbara @shin1x1 • Vagrant Plugin
 https://github.com/jedi4ever/sahara • 仮想サーバの状態を DB の
 ROLLBACK のように戻せる
  • 53. Sahara Plugin (c) 2014 Masashi Shinbara @shin1x1 ! $ vagrant plugin install sahara! • インストール
  • 54. Sahara Plugin (c) 2014 Masashi Shinbara @shin1x1 $ vagrant sandbox on • sandbox モード開始 = BEGIN; $ vagrant sandbox rollback • 元に戻す = ROLLBACK; $ vagrant sandbox commit • 変更確定 = COMMIT; $ vagrant sandbox off • sandbox モード終了
  • 55. 参考1 (c) 2014 Masashi Shinbara @shin1x1 http://docs.vagrantup.com/v2/
  • 56. 参考2 (c) 2014 Masashi Shinbara @shin1x1 http://www.oreilly.co.jp/books/9784873116655/
  • 57. 参考3 (c) 2014 Masashi Shinbara @shin1x1 http://www.amazon.co.jp/dp/B00F418SQ8
  • 58. @shin1x1 (c) 2014 Masashi Shinbara @shin1x1