SlideShare a Scribd company logo
1 of 84
Download to read offline
モダン開発環境
@atty303
今日の内容
• 開発環境にまつわる問題
• スマートな開発環境とは?
• Vagrantによる仮想マシンの管理
• Chefによる構成管理
LAMP開発に絞ります
開発環境にまつわる
憂鬱
• プロジェクトに参画したとき、アプリ
を手元で動かすのに○時間掛かった……
• 数年前のアプリのメンテナンスを依頼
されたが、環境を用意できなくて開発
に取り掛かることすらできない……
憂鬱
問題
• 構築手順が明文化されていない
• 構築作業が自動化されていない
憂鬱
• 開発環境では動いている機能が、本番
環境で動かない……
• Aさんの環境では動くけど、自分の環境
では動かない……
問題
• 環境に差異がある
• 構成管理が不足している
• メンバーが1つの開発開発を共有して使
っており、他人が開発中のコードが自
分に影響して開発が進められない……
• バグが混入したバージョンを特定した
いけど、環境を使っている他人に影響
するので戻せない……
憂鬱
問題
• 環境構築に手間が掛かるので、個人ご
とに環境を用意できていない
• 物理マシンを使っているので、環境を
増やすのにコストが掛かる
もっとスマートに
しよう!
必要なこと
• 一人ごとに独立していること
• 構築作業が容易であること
• 同一構成の再現が可能であること
• 構成をバージョン管理できること
独立性の確保
• 物理マシン
• クラウドサーバ
• 仮想マシン
Virtual Machine
(VM)
OS (Linux)
Webサーバ
アプリケーション
DBサーバ
物理マシン
OS (Mac,Windows)
Webサーバ
アプリケーション
DBサーバ
物理マシン(ホスト)
ハイパーバイザー (VMWare,VirtualBox, Hyper-V)
OS (Linux)
仮想マシン(ゲスト)
Webサーバ
アプリケーション
DBサーバ
OS (Linux)
仮想マシン(ゲスト)
VMのメリット
• コストがほぼゼロ
• 構成を簡単に変更可能
• スナップショット
VMのデメリット
• 性能が落ちる
• ホストに十分なパワーが必要
• 汎用パーツしか使えない
VM
=
ハードウェアの
ソフトウェア化
VMハイパーバイザー
製品名 価格 Windows Mac
OracleVirtualBox Free Yes Yes
MicrosoftVirtualPC Free Yes
Microsoft Hyper-V 高い Yes
VMWare Workstation ¥30,000 Yes
VMWare Fusion ¥5,000 Yes
Parallels Desktop ¥8,000 Yes
VMWare vSphere 高い
VMWare Fusion
デモ
容易性の確保
• 仮想マシン管理の自動化
• ミドルウェア構成の自動化
Vagrant
• VMの管理ツール
• テキストファイルにVMの設定を書く
• コマンド一発でVM作成と起動
• OSの構成管理ツール
• テキストファイルに構成を書く
• コマンド一発で構築
OS (Mac,Windows)
Webサーバ
アプリケーション
DBサーバ
物理マシン(ホスト)
ハイパーバイザー (VirtualBox)
OS (Linux)
仮想マシン(ゲスト)
Chef
Vagrant
詳細は後で
再現性の確保
• Vagrantによる仮想マシン構成の決定
• ChefによるOS内環境の決定
構成のバージョニング
• ただのテキストファイル
• ソースコードと同様
• Gitでバージョン管理が可能
Vagrantfile Cookbook
まとめ
必要なこと
• 一人ごとに独立していること
→ 仮想マシンを利用
• 構築作業が容易であること
→Vagrant + Chef で自動化
• 同一構成の再現が可能であること
→Vagrant + Chef で構成管理
• 構成をバージョン管理できること
→Vagrantfile + Cookbook を Git で管理
Vagrant
対応VM-HV
• VirtualBox
• VMWare Fusion
• VMWare Workstation
• ...and Amazon EC2
インストール
http://downloads.vagrantup.com/
ゼロからVMを
作ってみる
初期設定
$ vagrant box add ubuntu1204 https://s3.amazonaws.com/
gsc-vagrant-boxes/ubuntu-12.04.2-i386-chef-11-
omnibus.box
$ vagrant box add ubuntu1204 https://s3.amazonaws.com/
gsc-vagrant-boxes/ubuntu-12.04.2-server-amd64.box
VirtualBox
VMWare Fusion
プロジェクトディレクトリ
を作る
$ cd ~/work
$ mkdir hello_vagrant
$ cd hello_vagrant
Vagrantfileを作成
$ vagrant init ubuntu1204
VM起動
$ vagrant up
$ vagrant up --provider=vmware_fusion
VirtualBox
VMWare Fusion
VMにログイン
$ vagrant ssh
ファイル共有
$ touch README.md
$ ls
README.md Vagrantfile
$ vagrant ssh
ubuntu1204$ ls /vagrant
README.md Vagrantfile
VMを落とす
$ vagrant halt
VMを削除
$ du -sh .vagrant/
1.6G! .vagrant/
$ vagrant destroy
$ du -sh .vagrant/
0B! .vagrant/
Boxes
ubuntu1204
Boxes
centos63 centos54
プロジェクトA
ubuntu1204
プロジェクトB プロジェクトC
ubuntu1204 centos54
構築済みBoxes
http://www.vagrantbox.es/
Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(“2”) do |config|
config.vm.box = “ubuntu1204”
end
Rubyで記述
複数VM
Vagrant.configure(“2”) do |config|
config.vm.define :web do |web|
web.vm.box = “ubuntu1204”
web.vm.network :private_network, ip: “192.168.99.1”
end
config.vm.define :db do |db|
db.vm.box = “ubuntu1204”
db.vm.network :private_network, ip: “192.168.99.2”
end
end
Vagrantfile
• up, haltなどのコマンドは全てのVMを対
象として実行される
• コマンドの後にVM名を追加すると、特
定VMだけを操作できる
$ vagrant ssh web
• VMの管理をコマンドで簡単にできる
• 1ファイルで構成を管理
• 複数VM構成も大丈夫
まとめ
作成したVMは初期状態だけど、
Webサーバなどのインストールや
設定はどうするの?
Provisioning
シェルスクリプト
Vagrant.configure(“2”) do |config|
config.vm.box = “ubuntu1204”
config.vm.provision :shell, :inline => <<EOT
apt-get update
apt-get -y install apache2-mpm-prefork
apt-get -y install libapache2-mod-php5
EOT
end
• up 時に自動実行
• up 後にも任意で実行できる
• halt → up を手軽に実行
$ vagrant provision
$ vagrant reload
• シェルスクリプトで事足りることもある
• 何も覚えることがないので楽ではある
• より堅牢に管理するために……
Chef
Vagrant.configure(“2”) do |config|
config.vm.box = “ubuntu1204”
config.vm.provision :chef_solo do |chef|
chef.add_recipe “apache”
end
end
Chef
まだ慣れていないので
さわりだけです……
インストール
• Vagrant + Chef のセットで使う場合は、
Boxにインストール済みのChefを使うの
が簡単
インストール
(chef + knife-solo)
$ gem install knife-solo
$ git clone git://github.com/matschaffer/knife-solo.git
$ cd knife-solo
$ bundle && bundle exec rake install
* http://shimotori.github.io/blog-it/2013/04/30/1-knife-solo-cautions/
Version 0.2.0
Version HEAD (0.3.0-pre3)
最初の一歩
Cookbook作成
vm$ cd /vagrant
vm$ knife cookbook create myrecipe -o cookbooks
vm$ ls -F cookbooks/
myrecipe/
vm$ ls -F cookbooks/myrecipe/
CHANGELOG.md README.md attributes/ definitions/
files/ libraries/ metadata.rb providers/
recipes/ resources/ templates/
Vagrant.configure(“2”) do |config|
config.vm.box = “ubuntu1204”
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = "cookbooks"
chef.add_recipe "myrecipe"
end
end
Vagrantfile
$ vagrant reload
...
[default] Running provisioner: chef_solo...
Generating chef JSON and uploading...
Running chef-solo...
[2013-05-17T11:07:27+00:00] INFO: *** Chef 11.4.0 ***
...
[2013-05-17T11:07:28+00:00] INFO: Chef Run complete in 0.017913367 seconds
...
動作確認
とりあえず動きました
gitを入れてみる
Recipe編集
package “git” do
action :install
end
cookbooks/myrecipe/recipes/default.rb
$ vagrant provision
...
[default] Running provisioner: chef_solo...
Generating chef JSON and uploading...
Running chef-solo...
...
[2013-05-17T11:24:54+00:00] INFO: Processing package[git] action install
(myrecipe::default line 10)
[2013-05-17T11:25:11+00:00] INFO: Chef Run complete in 17.741444756
seconds
...
実行
• destory → up しても再現される
Apache + PHP を
動かしてみる
[“apache2-mpm-prefork”, “libapache2-mod-php5”].each do |pkg|
package pkg do
action :install
end
end
service "apache2" do
supports :status => true, :restart => true, :reload => true
action [ :enable, :start ]
end
template "apache2-site-dev" do
path "/etc/apache2/sites-available/dev"
source "apache2-site-dev.erb"
owner "root"
group "root"
mode 0644
notifies :reload, 'service[apache2]'
end
execute "apache2-sites-disable-default" do
only_if { File.exists?("/etc/apache2/sites-enabled/000-default") }
command "a2dissite default"
notifies :reload, 'service[apache2]'
end
execute "apache2-sites-enable-dev" do
not_if { File.exists?("/etc/apache2/sites-enabled/dev") }
command "a2ensite dev"
notifies :reload, 'service[apache2]'
end
<VirtualHost *:80>
DocumentRoot <%= node['apache2']['document_root'] %>
EnableMMAP off
EnableSendfile off
</VirtualHost>
cookbooks/myrecipe/templates/default/apache2-site-dev.erb
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = "cookbooks"
chef.add_recipe "myrecipe"
chef.json = {
"apache2" => {
"document_root" => "/vagrant/web"
}
}
end
Vagrantfile
デモ
• サーバの管理は必ずChef経由で行う
• あるべき状態を定義する
まとめ
• ロール
• コミュニティのCookbook
• Chef Server
• VagrantなしでChefを使う(本番サーバ)
他にも
http://tatsu-zine.com/books/chef-solo
勉強中です
モダン開発環境
• 一人ごとに独立していること
• 構築作業が容易であること
• 同一構成の再現が可能であること
• 構成をバージョン管理できること
ご静聴
ありがとうございました
時間が余っていたら
みなさんも
やってみましょう!

More Related Content

What's hot

ニフティクラウドを使った安定運用のススメ
ニフティクラウドを使った安定運用のススメニフティクラウドを使った安定運用のススメ
ニフティクラウドを使った安定運用のススメ
NIFTY Cloud
 

What's hot (20)

改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
改訂第3版 Jenkins 実践入門 what's newから見るJenkinsのUpdate
 
仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法 仮想マシンを使った開発環境の簡単共有方法
仮想マシンを使った開発環境の簡単共有方法
 
Infrastrucure as a CodeにおけるJenkinsの役割
Infrastrucure as a CodeにおけるJenkinsの役割Infrastrucure as a CodeにおけるJenkinsの役割
Infrastrucure as a CodeにおけるJenkinsの役割
 
Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編Multibranch Pipeline with Docker 入門編
Multibranch Pipeline with Docker 入門編
 
Devとopsをつなぐchat ops
Devとopsをつなぐchat opsDevとopsをつなぐchat ops
Devとopsをつなぐchat ops
 
邪道Jenkins
邪道Jenkins邪道Jenkins
邪道Jenkins
 
Git勉強会
Git勉強会Git勉強会
Git勉強会
 
shinken monitoringについて真剣に調べてみた結果
shinken monitoringについて真剣に調べてみた結果shinken monitoringについて真剣に調べてみた結果
shinken monitoringについて真剣に調べてみた結果
 
Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!Git & GitHub & kintone でウルトラハッピー!
Git & GitHub & kintone でウルトラハッピー!
 
ニフティクラウドを使った安定運用のススメ
ニフティクラウドを使った安定運用のススメニフティクラウドを使った安定運用のススメ
ニフティクラウドを使った安定運用のススメ
 
jenkinsで遊ぶ
jenkinsで遊ぶjenkinsで遊ぶ
jenkinsで遊ぶ
 
Jenkinsのある生活
Jenkinsのある生活Jenkinsのある生活
Jenkinsのある生活
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
 
Dockerで楽しむ自宅サーバ
Dockerで楽しむ自宅サーバDockerで楽しむ自宅サーバ
Dockerで楽しむ自宅サーバ
 
tweleve-factor-app_and_enterprise
tweleve-factor-app_and_enterprisetweleve-factor-app_and_enterprise
tweleve-factor-app_and_enterprise
 
Git紹介
Git紹介Git紹介
Git紹介
 
Redmine Ansible
Redmine AnsibleRedmine Ansible
Redmine Ansible
 
Nodeを稼働させる
Nodeを稼働させるNodeを稼働させる
Nodeを稼働させる
 
自ら肥え太る執事を現場に入れてみた
自ら肥え太る執事を現場に入れてみた自ら肥え太る執事を現場に入れてみた
自ら肥え太る執事を現場に入れてみた
 
会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話会社にGitHub Enterpriseを導入してみた話
会社にGitHub Enterpriseを導入してみた話
 

Similar to モダン開発環境

3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
Takeshi Komiya
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
Shota Umeda
 
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
tomo_masakura
 

Similar to モダン開発環境 (20)

3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes3分間 開発環境クッキング 2012.07 #pyfes
3分間 開発環境クッキング 2012.07 #pyfes
 
Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22Gitと出会って人生変わった テックヒルズ2013-03-22
Gitと出会って人生変わった テックヒルズ2013-03-22
 
作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく作る人から作りながら運用する人になっていく
作る人から作りながら運用する人になっていく
 
Jenkins使ってみた~Windows編~
Jenkins使ってみた~Windows編~Jenkins使ってみた~Windows編~
Jenkins使ってみた~Windows編~
 
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
 
130412 kayac-cinnamon
130412 kayac-cinnamon130412 kayac-cinnamon
130412 kayac-cinnamon
 
サイドプロジェクトで使う Azure DevOps
サイドプロジェクトで使う Azure DevOpsサイドプロジェクトで使う Azure DevOps
サイドプロジェクトで使う Azure DevOps
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
Vagrant chef
Vagrant chefVagrant chef
Vagrant chef
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Eureka go 2015_12_12
Eureka go 2015_12_12Eureka go 2015_12_12
Eureka go 2015_12_12
 
継続的デリバリー読書会資料 #1
継続的デリバリー読書会資料 #1継続的デリバリー読書会資料 #1
継続的デリバリー読書会資料 #1
 
Dev ops
Dev opsDev ops
Dev ops
 
Word bench7月号
Word bench7月号Word bench7月号
Word bench7月号
 
恋するJenkins
恋するJenkins恋するJenkins
恋するJenkins
 
Chef
ChefChef
Chef
 
Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築Vagrant & Dockerによるイマドキの開発環境構築
Vagrant & Dockerによるイマドキの開発環境構築
 
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevioいるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 
ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発 ブラウザだけで学ぶWebアプリ開発
ブラウザだけで学ぶWebアプリ開発
 

Recently uploaded

Recently uploaded (12)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

モダン開発環境