2.

仮想環境完全ガイド — VM / コンテナ / 言語別仮想環境の使い分け

編集
この記事の要点
  • 仮想環境は大きく分けて 3 種類: VM (VMware/VirtualBox/Hyper-V/KVM) / コンテナ (Docker/Podman) / 言語別の隔離 (Python venv, Node nvm, Ruby rbenv)
  • VM はOS ごと仮想化、コンテナはOS カーネルを共有してプロセスを隔離、言語別はランタイム/パッケージのバージョン管理
  • 用途別: 異なる OS で動作確認 → VM、本番に近い再現性 → Docker、Python の依存衝突 → venv、Node 切替 → nvm
  • リソース消費: VM (重い、数 GB) > コンテナ (軽い、数 MB) > 言語別 (極めて軽量)
  • クラウドの仮想マシン (AWS EC2 / Azure VM / GCE) は本質的に VM、Cloud Run / Fargate はコンテナホスト

仮想環境とは

「仮想環境」という言葉は、文脈によって全く異なるものを指します。本記事では IT で頻出する 3 つのレイヤ — 仮想マシン (VM)コンテナ言語ランタイム別の仮想環境 — を整理し、それぞれの仕組み・使い分け・代表的ツールをまとめます。

レイヤ仮想化対象起動時間サイズ
VMOS 全体 + 仮想ハードウェアVMware / VirtualBox / Hyper-V / KVM分単位数 GB
コンテナプロセスとファイルシステムDocker / Podman / containerd秒単位数 MB〜数百 MB
言語別言語ランタイム + ライブラリPython venv / Node nvm / Ruby rbenv瞬時数十 MB

VM (仮想マシン)

ハードウェアを丸ごと仮想化し、その上でゲスト OS が独立に動作します。ハイパーバイザ (Type 1: KVM/ESXi/Hyper-V, Type 2: VMware Workstation/VirtualBox) が仮想化を実現します。

ツール種別OS用途
VMware Workstation ProType 2Windows/Linux個人 / 開発機
VirtualBoxType 2Windows/Linux/macOS無料、教育用途
Hyper-VType 1Windows Pro/ServerWindows 標準
KVM + libvirtType 1LinuxLinux サーバー仮想化
VMware ESXiType 1独立 OSエンタープライズ
Proxmox VEType 1独立 OSOSS の仮想化基盤
UTMQEMU ラッパーmacOSApple Silicon でも x86 を動かせる
# KVM/libvirt の例 (Linux)
sudo apt install -y qemu-kvm libvirt-daemon-system virt-manager
sudo virt-install \
  --name ubuntu24 --vcpus 2 --memory 4096 \
  --disk size=20 --os-variant ubuntu24.04 \
  --cdrom /tmp/ubuntu-24.04.iso

# 一覧 / 起動 / 停止
virsh list --all
virsh start ubuntu24
virsh shutdown ubuntu24

コンテナ

カーネルはホスト OS と共有し、プロセス・ファイルシステム・ネットワークだけを隔離する軽量な仮想化方式です。Linux カーネルのnamespacecgroups が技術基盤。

ツール特徴
Docker事実上の標準、デスクトップ版あり
Podmanデーモンレス、ルートレス、Docker 互換 CLI
containerdKubernetes が直接使うランタイム
LXC / LXDシステムコンテナ (OS まるごと)
Singularity / ApptainerHPC / 研究用途
# Docker の基本
docker pull nginx
docker run -d -p 8080:80 --name web nginx
docker ps
docker exec -it web /bin/bash
docker logs -f web
docker stop web && docker rm web

# Dockerfile から自前イメージ
cat > Dockerfile <

VM vs コンテナ

項目VMコンテナ
OSゲスト OS ありホスト OS のカーネル共有
起動時間分単位秒単位
イメージサイズ数 GB数 MB〜数百 MB
分離度強い (別 OS)弱い (同カーネル)
異 OSLinux 上で Windows VM 可Linux 上は Linux のみ (WSL2 経由は別)
用途異 OS / 完全分離マイクロサービス / CI/CD

言語別の仮想環境

Python: venv / pipenv / poetry

# 標準 venv
python3 -m venv .venv
source .venv/bin/activate     # Linux/macOS
.venv\Scripts\activate         # Windows
pip install requests
deactivate

# poetry (依存管理 + 仮想環境)
pip install poetry
poetry init
poetry add requests pytest
poetry run python app.py

# pyenv (Python バージョン切替)
pyenv install 3.12.0
pyenv local 3.12.0

Node.js: nvm / volta / fnm

# nvm (Linux/macOS)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
nvm install 20
nvm use 20
nvm alias default 20

# .nvmrc でプロジェクト毎切替
echo "20.10.0" > .nvmrc
nvm use

# Volta (Windows でも単一バイナリ)
curl https://get.volta.sh | bash
volta install node@20

Ruby: rbenv / rvm

# rbenv
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
rbenv install 3.3.0
rbenv local 3.3.0
gem install bundler
bundle install     # Gemfile を解決

Java: jenv / SDKMAN!

# SDKMAN! (Java/Kotlin/Gradle 等を統合管理)
curl -s "https://get.sdkman.io" | bash
sdk install java 21.0.2-tem
sdk use java 17.0.10-tem
sdk list java

Vagrant: VM のコード化

# Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/jammy64"
  config.vm.network "private_network", ip: "192.168.56.10"
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.cpus = 2
  end
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update && apt-get install -y nginx
  SHELL
end
vagrant up
vagrant ssh
vagrant halt
vagrant destroy

WSL2 (Windows Subsystem for Linux 2)

Windows 上で Linux カーネルを軽量 VM で動かす仕組み。技術的には Hyper-V ベースの VM ですが、起動は秒単位、ファイルシステム / ネットワークが Windows と統合され、開発体験はネイティブ Linux に近いです。

wsl --install -d Ubuntu-24.04
wsl --list --verbose
wsl --set-default-version 2
wsl --shutdown

クラウドの仮想環境

サービス種別用途
AWS EC2 / Azure VM / GCEVMサーバー全般
AWS Fargate / GCP Cloud Runコンテナ実行サーバーレスコンテナ
AWS Lambda / GCP Cloud FunctionsFaaSイベント駆動
EKS / AKS / GKEKubernetesコンテナオーケストレーション

用途別の選び方

やりたいことおすすめ
Windows で Linux を試したいWSL2
異 OS の動作確認 (Windows XP / FreeBSD など)VirtualBox / VMware
本番に近い再現性Docker (+ docker-compose)
Python のプロジェクトごとの依存隔離venv / poetry
Node.js を複数バージョン使い分けnvm / Volta
マイクロサービス本番運用Kubernetes
開発環境をコード化したいVagrant or Docker Compose

FAQ

Q: Docker は VM ではない?
A: Linux 上の Docker は VM ではなくコンテナ。Docker Desktop for Windows/macOS は内部で軽量 Linux VM (WSL2 / hyperkit) を動かし、その中でコンテナを実行している。

Q: Apple Silicon Mac で x86 のソフトを動かしたい
A: UTM (QEMU) で x86 VM を作る。あるいは Rosetta 2 + Docker Desktch の --platform linux/amd64

Q: venv と pipenv どっちが良い?
A: 単純な隔離なら venv、ロックファイル付き依存管理なら poetry がモダン (pipenv は最近落ち目)。

編集
Post Share
子ページ
  1. Docker
  2. MCO Airport Lounges
  3. mcafee account login
同階層のページ
  1. 開発環境
  2. 仮想環境
  3. プロジェクト管理(プログラム)
  4. プロジェクト管理(グループウェア)
  5. ネットワーク
  6. バージョン管理
  7. Webサーバー / アプリケーションサーバー
  8. エミューレーター
  9. システム管理
  10. ゲームエンジン
  11. 3Dグラフィックス
  12. 学習・教育用ソフトウェア
  13. Webサイト作成
  14. シミュレーター
  15. Microsoft Office
  16. エディタ
  17. BIM
  18. Bluetooth
  19. ブラウザ
  20. その他