AI Agentに自由な開発環境を渡す、Proxmox+LXCで。
📝 記事の概要
AIエージェントに「好き勝手できる開発環境」を安全かつ効率的に提供するため、Proxmox上でLXCコンテナを使って使い捨てVMをポコポコ作って捨てる手法を解説した実践的な記事。著者のuzulla氏が実際の運用フローを詳細に共有している。
🔑 重要ポイント
なぜLXCなのか
- 完全仮想化(KVM/QEMU)ではなくコンテナ型仮想化で軽量
- カーネルを共有するため、Clone作成が簡単で高速
- シン・プロビジョニングで使った分だけディスク消費
- メモリサイズも再起動なしで動的変更可能
- IPもポートも別々に振られる → エージェントからは「自分専用のマシン」に見える
- Dockerネストも可能(keyctl + Nestingを有効化)
なぜProxmoxなのか
- VMware ESXiのような仮想化管理プラットフォーム
- Web管理画面からコンテナが作れる + CLIも充実
- 完全仮想化も可能(古いディストリやWindowsも動く)
テンプレート作成フロー
- Debian公式CTテンプレートをダウンロード
- 1台起動してカスタマイズ(Docker、SSH鍵、作業ユーザー、mise等)
- Docker用にFeaturesで
keyctl と Nesting を有効化(ここがハマりポイント)
- SSHホスト鍵を削除してテンプレート化
⚠️ 罠ポイント: Debianテンプレートは鍵を消しただけだとクローン起動時に再生成されない。sshd-keygen.service の ConditionFirstBoot=yes を外す必要がある。
# コンテナ内で: sshd-keygen.service の条件を外す
SYSTEMD_EDITOR="tee" systemctl edit sshd-keygen.service << 'EOF'
[Unit]
ConditionFirstBoot=
EOF
# 鍵を消してシャットダウン
rm -f /etc/ssh/ssh_host_*_key*
shutdown -h now
# Proxmox側でテンプレート化
pct template 221
コンテナのポンポン作成
# リンククローンで一瞬で立ち上がる
pct clone 221 322 --full 0 --hostname some-test-host
pct start 322
--full 0 でリンククローン指定。テンプレートのディスクを共有しつつ差分のみ保持。秒で完成。
🚨 工夫ポイント:どうログインするか
各VMはDHCPでIPが振られるためIP不明。Tailscaleを一台一台入れるのは面倒。そこで Proxmoxを踏み台(Bastion)として使う。
# ~/.ssh/config
Host pxmx
User root
HostName xxx.xxx.xxx.xxx
Host dev-*
User jhon
ProxyCommand ssh -q pxmx "pct exec $(echo %h | cut -d'-' -f2) -- nc localhost 22"
ssh dev-322 と叩くと、ProxmoxにSSH接続 → pct exec 322 -- nc localhost 22 でコンテナ内のsshdにパイプ接続。ホスト名からVMIDを抽出。TailscaleはProxmox1台だけでOK。
セキュリティ設計
- 作業ユーザーにNOPASSWD sudoは付けない(root丸ごと渡さない)
- Dockerはグループ権限で実行可能(sudoなしでも大抵のことができる)
- Credentialはテンプレートに入れず、各VMで個別設定(Revokeしやすい)
miseによるツール管理
ランタイム管理ツール「mise」で claude-code、gh、rust、go、node、codex等を管理。タスクランナーとしても活用。
スナップショット・バックアップ
pct snapshot: 差分保存で軽量、気軽に撮れる
pct rollback: 一瞬で巻き戻し
vzdump: フルバックアップ(ファイル退避用)
捨て方
pct stop 322
pct destroy 322
# 止めておくだけでもOK(後日 pct start で再開)
💡 まとめ
Proxmox + LXCによる使い捨て開発環境は、AIエージェントに安全で自由な環境を提供する実用的なソリューション。リンククローンで秒単位の作成、踏み台SSHでIP管理不要、スナップショットで安全な実験、そして簡単な破棄。エージェントがイキイキと動ける環境を低コストで量産できる仕組み。