📋 Copy All Commands
📄 Generate PDF
開発環境管理と仮想マシンのプロビジョニングのための、包括的な HashiCorp Vagrant コマンドとワークフロー。
インストールとセットアップ
コマンド 説明 vagrant versionVagrantのバージョンを表示 vagrant -hヘルプ情報を表示 vagrant init新しいVagrantfileを初期化する vagrant init ubuntu/jammy64特定のボックスで初期化する
ボックス管理
ボックス操作
コマンド 説明 vagrant box listインストールされたボックスの一覧 vagrant box add ubuntu/jammy64ボックスを追加 vagrant box add --name mybox /path/to/box.boxローカルボックスを追加 vagrant box remove ubuntu/jammy64ボックスを削除 vagrant box updateすべてのボックスを更新 vagrant box update --box ubuntu/jammy64特定のボックスを更新
ボックス情報
コマンド 説明 vagrant box outdated古いボックスを確認する vagrant box prune古いボックスバージョンを削除 vagrant box repackage ubuntu/jammy64ボックスを再梱包
VMライフサイクル管理
基本操作
コマンド 説明 vagrant upVMの起動とプロビジョニング vagrant haltVMをシャットダウン vagrant reloadVMを再起動 vagrant destroyVMを破棄 vagrant suspendVMを中断 vagrant resume中断したVMを再開
VMステータスと情報
コマンド 説明 vagrant statusVMステータスを表示 vagrant global-statusすべてのVMのステータスを表示 vagrant global-status --prune無効なエントリーをクリーンアップする
SSHとアクセス
SSH操作
コマンド 説明 vagrant sshSSHでVMにログイン vagrant ssh-configSSH 設定を表示 vagrant ssh -- -L 8080:localhost:80SSHでポートフォワーディング
プロビジョニング
プロビジョニングコマンド
コマンド 説明 vagrant provisionプロビジョナーを実行 vagrant provision --provision-with shell特定のプロビジョナーを実行 vagrant up --provision起動とプロビジョニング vagrant reload --provision再起動とプロビジョニング
マルチマシン環境
マルチマシンコマンド
コマンド 説明 vagrant up web特定のマシンを起動 vagrant ssh web特定のマシンにSSH接続する vagrant halt db特定のマシンを停止 vagrant destroy --force確認なしですべてを破壊する
スナップショット
スナップショット管理
コマンド 説明 vagrant snapshot save snapshot_nameスナップショットを保存 vagrant snapshot listスナップショットをリスト vagrant snapshot restore snapshot_nameスナップショットを復元 vagrant snapshot delete snapshot_nameスナップショットを削除
プラグイン管理
プラグイン操作
コマンド 説明 vagrant plugin listインストールされたプラグインの一覧 vagrant plugin install vagrant-vbguestプラグインをインストール vagrant plugin uninstall vagrant-vbguestプラグインをアンインストール vagrant plugin updateすべてのプラグインを更新
Vagrantfileの例
基本的なVagrantfile
Vagrant . configure ( "2" ) do |config|
config. vm . box = "ubuntu/jammy64"
config. vm . hostname = "myserver"
# Network configuration
config. vm . network "private_network" , ip: "192.168.56.10"
config. vm . network "forwarded_port" , guest: 80 , host: 8080
# Provider configuration
config. vm . provider "virtualbox" do |vb|
vb. memory = "2048"
vb. cpus = 2
vb. name = "MyVM"
end
# Provisioning
config. vm . provision "shell" , inline: <<-SHELL
apt-get update
apt-get install -y nginx
systemctl enable nginx
systemctl start nginx
SHELL
end
マルチマシンセットアップ
Vagrant . configure ( "2" ) do |config|
# Web server
config. vm . define "web" do |web|
web. vm . box = "ubuntu/jammy64"
web. vm . hostname = "web"
web. vm . network "private_network" , ip: "192.168.56.10"
web. vm . provider "virtualbox" do |vb|
vb. memory = "1024"
vb. cpus = 1
end
web. vm . provision "shell" , inline: <<-SHELL
apt-get update
apt-get install -y nginx
SHELL
end
# Database server
config. vm . define "db" do |db|
db. vm . box = "ubuntu/jammy64"
db. vm . hostname = "database"
db. vm . network "private_network" , ip: "192.168.56.11"
db. vm . provider "virtualbox" do |vb|
vb. memory = "2048"
vb. cpus = 2
end
db. vm . provision "shell" , inline: <<-SHELL
apt-get update
apt-get install -y mysql-server
SHELL
end
end
高度な設定
Vagrant . configure ( "2" ) do |config|
config. vm . box = "ubuntu/jammy64"
config. vm . box_version = "20230607.0.0"
# Synced folders
config. vm . synced_folder "." , "/vagrant" , disabled: true
config. vm . synced_folder "./app" , "/var/www/html" ,
owner: "www-data" , group: "www-data"
# Network configuration
config. vm . network "private_network" ,
ip: "192.168.56.10" ,
netmask: "255.255.255.0"
config. vm . network "public_network" ,
bridge: "en0: Wi-Fi (AirPort)"
# Port forwarding
config. vm . network "forwarded_port" , guest: 80 , host: 8080
config. vm . network "forwarded_port" , guest: 443 , host: 8443
# Provider-specific configuration
config. vm . provider "virtualbox" do |vb|
vb. gui = false
vb. memory = "4096"
vb. cpus = 4
vb. name = "Development Server"
# VirtualBox specific settings
vb. customize [ "modifyvm" , :id , "--natdnshostresolver1" , "on" ]
vb. customize [ "modifyvm" , :id , "--natdnsproxy1" , "on" ]
end
# Multiple provisioners
config. vm . provision "shell" , inline: <<-SHELL
apt-get update
apt-get upgrade -y
SHELL
config. vm . provision "file" ,
source: "./configs/nginx.conf" ,
destination: "/tmp/nginx.conf"
config. vm . provision "shell" , path: "scripts/setup.sh"
config. vm . provision "ansible" do |ansible|
ansible. playbook = "playbook.yml"
ansible. inventory_path = "inventory"
end
end
プロビジョニング方法
シェルプロビジョニング
# Inline shell commands
config. vm . provision "shell" , inline: <<-SHELL
apt-get update
apt-get install -y docker.io
usermod -aG docker vagrant
SHELL
# External script
config. vm . provision "shell" , path: "scripts/bootstrap.sh"
# Privileged and non-privileged
config. vm . provision "shell" , privileged: false , inline: <<-SHELL
echo "Running as vagrant user"
SHELL
# Environment variables
config. vm . provision "shell" , env: \\\\{ "DEBIAN_FRONTEND" => "noninteractive" \\\\}, inline: <<-SHELL
apt-get install -y mysql-server
SHELL
ファイルプロビジョニング
config. vm . provision "file" ,
source: "~/.ssh/id_rsa.pub" ,
destination: "~/.ssh/authorized_keys"
config. vm . provision "file" ,
source: "./configs/" ,
destination: "/tmp/configs"
Ansibleプロビジョニング
config. vm . provision "ansible" do |ansible|
ansible. playbook = "site.yml"
ansible. inventory_path = "inventory/vagrant"
ansible. limit = "all"
ansible. verbose = "v"
ansible. extra_vars = \\\\{
nginx_port: 80 ,
database_name: "myapp"
\\\\}
end
Dockerプロビジョニング
config. vm . provision "docker" do |d|
d. pull_images "nginx"
d. pull_images "mysql:8.0"
d. run "nginx" ,
args: "-p 80:80 -v /vagrant/html:/usr/share/nginx/html"
d. run "mysql" ,
args: "-e MYSQL_ROOT_PASSWORD=secret -p 3306:3306"
end
ネットワーク設定
プライベートネットワーク
# Static IP
config. vm . network "private_network" , ip: "192.168.56.10"
# DHCP
config. vm . network "private_network" , type: "dhcp"
# Multiple interfaces
config. vm . network "private_network" , ip: "192.168.56.10"
config. vm . network "private_network" , ip: "10.0.0.10"
パブリックネットワーク
Would you like me to continue with the remaining sections? I noticed that some sections (3-20) are currently empty. If you have specific content for those sections, please provide them and I’ll translate accordingly.```ruby
Bridge to default interface
config.vm.network “public_network”
Bridge to specific interface
config.vm.network “public_network”, bridge: “en0: Wi-Fi (AirPort)“
Static IP on public network
config.vm.network “public_network”, ip: “192.168.1.100”
### Port Forwarding
```ruby
# Basic port forwarding
config.vm.network "forwarded_port", guest: 80, host: 8080
# Multiple ports
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 443, host: 8443
config.vm.network "forwarded_port", guest: 3306, host: 3306
# Auto-correct port conflicts
config.vm.network "forwarded_port", guest: 80, host: 8080, auto_correct: true
Provider Configuration
VirtualBox Provider
config. vm . provider "virtualbox" do |vb|
vb. gui = true
vb. memory = "4096"
vb. cpus = 4
vb. name = "MyVM"
# Advanced settings
vb. customize [ "modifyvm" , :id , "--vram" , "128" ]
vb. customize [ "modifyvm" , :id , "--accelerate3d" , "on" ]
vb. customize [ "modifyvm" , :id , "--clipboard" , "bidirectional" ]
end
VMware Provider
config. vm . provider "vmware_desktop" do |vmware|
vmware. vmx [ "memsize" ] = "4096"
vmware. vmx [ "numvcpus" ] = "4"
vmware. vmx [ "displayName" ] = "MyVM"
end
Hyper-V Provider
config. vm . provider "hyperv" do |hv|
hv. memory = 4096
hv. cpus = 4
hv. vmname = "MyVM"
end
Synced Folders
Basic Synced Folders
# Default synced folder (disabled)
config. vm . synced_folder "." , "/vagrant" , disabled: true
# Custom synced folder
config. vm . synced_folder "./src" , "/var/www/html"
# With options
config. vm . synced_folder "./app" , "/var/www/html" ,
owner: "www-data" ,
group: "www-data" ,
mount_options: [ "dmode=775,fmode=664" ]
NFS Synced Folders
config. vm . synced_folder "./" , "/vagrant" ,
type: "nfs" ,
nfs_udp: false ,
nfs_version: 4
SMB Synced Folders (Windows)
config. vm . synced_folder "./" , "/vagrant" ,
type: "smb" ,
smb_username: "username" ,
smb_password: "password"
Best Practices
Resource Allocation : Allocate appropriate CPU and memory
Synced Folders : Use NFS for better performance on macOS/Linux
Box Selection : Choose minimal base boxes
Snapshot Management : Use snapshots for quick rollbacks
Provider Optimization : Configure provider-specific optimizations
Security
SSH Keys : Use SSH keys instead of passwords
Network Isolation : Use private networks when possible
Firewall : Configure appropriate firewall rules
Updates : Keep boxes and Vagrant updated
Secrets : Don’t commit secrets to version control
Development Workflow
Version Control : Include Vagrantfile in version control
Documentation : Document setup and usage
Consistency : Use same environment across team
Testing : Test provisioning scripts
Cleanup : Regularly clean up unused VMs and boxes
Troubleshooting
Logs : Check Vagrant and provider logs
SSH : Use vagrant ssh-config for debugging
Networking : Test network connectivity
Provisioning : Test provisioning scripts separately
Resources : Monitor host system resources