質問: ### 前提・実現したいこと 仮想環境を作成し、チーム間で共有する際のベストプラクティスが知りたいです。 ### 発生している問題・エラーメッセージ 現在、素人がチームを組んで小さなアプリ開発をしており、メンバーそれぞれがローカルで環境を構築しているような状態です。 そこで上司の方に仮想環境を作って開発環境を統一しようと言われました。 上司のやり方は、VirtualBoxで環境を作成し、そのvdiファイルを共有する感じでした。 しかしそのやり方だと少なからずメンバーそれぞれがVirtualBoxを起動し、メモリの設定等はいじる必要があると思います。 それよりもVagrantを使ってVagrantFileを共有すればコマンド一発で環境構築できるのでは?と思ったのですが、私の認識に間違いはあるでしょうか? vdiファイルを共有しなければならない理由は存在するのでしょうか? ググってはみたもののvdiファイルの共有のようなやり方に該当するものは出てきませんでした。
回答: 可能であるなら、Vagrant 越しに VirtualBox を操作した方が 便利であることに間違いはありません Vagrantfile の共有のみを行ったときのデメリット Vagrantfile の共有のみを行う場合、 それぞれの開発者が初回の起動時に構築を行うことになります 構築処理が長い場合は、 環境をリセットしたいときに構築し直しとなるので 長い待ち時間が発生することになります これを回避するためには、構築済みのイメージを用意しておいて、 Vagrantfile から参照する方法が有効です イメージ構築自動化の方法 VirtualBox, Vagrant の他に、 以下のツールを組み合わせることでイメージの構築を自動化することができます: イメージの構築・デプロイの自動化のためのツール Packer by HashiCorp Shell Script に比べメンテナンス性に優れる構築自動化ツール Ansible Documentation — Ansible Documentation 上記 `Packer` で Vagrant の Box を構築のベースに指定できるようにするプラグイン themalkolm/packer-builder-vagrant: 📦 Packer builder to use existing vagrant boxes (Packer 1.4.5 以下で使う必要があります) すべて一度に導入する必要はありません、 できるところから少しずつ導入していくと開発が楽になっていきます まず、Docker が導入できないか検討 質問のタイトルでは「VirtualBox 上」ということですが、 Docker で問題ないのであれば、 VirtualBox よりも Docker のワークフローの方が効率的で、 この回答で紹介したすべてのツールが習得不要になります Docker が導入できないかどうかを最初に検討することをおすすめします 参考 少し前まで僕が使っていた VirtualBox の開発環境のコードを紹介します 自動的に開発環境のイメージ構築するのコード yukihiko-shinoda/ansible-playbook-docker-host: Ansible playbook for Docker host. 構築したイメージを使うための Vagrantfile yukihiko-shinoda/vagrant-docker-host: Vagrant for Docker host. (README.md がなくて恐縮です) このようなコードを準備しておくと、 次のようなコマンドを実行するだけでイメージの構築が完了します: ``` packer build -var 'cloud_token=xxxxxxxx' packer_template.json ``` そして、あとは開発用の PC で: ``` vagrant up && vagrant ssh ```