Vagrantで普段使いの開発環境を仮想マシン上に構築する
環境構築手順を残す
背景
僕は割と頻繁にOSを入れ替える
その都度環境を構築しなおしている
何回も環境構築するのめんどくさい
これでOSを入れ替えてもスクリプトを走らせれば一通り環境構築は終わる
だいたいどっかで失敗して都度手直しする
血管がブチ切れる
環境構築スクリプトは簡単に試せない
ブラウザ使えなくなったりエディタ使えなかったり
もう一度走らせても最初の一回目の実行と同じ条件での実行ではない
検証できないので次実行してだいたい失敗する
血管がブチ切れる
環境構築スクリプトを気軽に試したい
言い換えるなら気軽に環境を作り直せるようにしたい
仮想マシンの出番では?
2020/5にゲーミングPC買った
RyzenとLinuxの相性が悪くてOSをインストールできず、なくなく予備のWindows 10 Homeをインストールした
Windows 10 HomeエディションだとDockerが使えない DockerのためだけにProにするのもアホらしい
仮想マシンの出番では?
コード管理できる
Vagrantで仮想マシンを起動してそのうえでDockerを動かせばWinProに上げる必要がない
簡単に使い捨てられる
やらかしたり最初からに戻したくなったらvagrant destroyで一撃
プロビジョニング済みの環境を保存できる
公式のBoxを好き勝手プロビジョニングしたものを自分用のBoxとしてローカルに保存できる
ローカル保存したBoxをVagrantfileに書くことでプロビジョニング済みの環境を一瞬で立ち上げなおせる
VMを破棄して立ち上げ直したくなったときに、プロビジョニングし直さなくて良い
プロビジョニング時間かかるし、ネットワーク詰まるのでやらなくてよいのは嬉しい
環境構築手順
Git for Windows付属のGitBashを起動する
以下のコマンドを実行する
code:sh
cd workspace/ubuntu
vagrant init
vagrant up # ここめちゃくちゃ時間かかるので寝る前に実行するくらいの気持ちで叩く
vagrant ssh
プロビジョニング済みのVMをBoxとしてローカル保存する場合は更に以下の手順を追加
code:sh
vagrant package
vagrant box add <登録したい名前> package.box
vagrant box add jiro4989/ubuntu package.box # 僕はこんな感じで登録した
これをVagrantfileのconfig.vm.boxに指定すればプロビジョニング済みのVMから始動できる
以上
感想
自分が思っていた以上に快適
対応してるゲームが少ないので
Wineもあんまり動かない
今はゲームも開発も両立できている
CUIモードのVagrantなら操作に遅延とかも特になく、ストレスを感じない
GUIのほうはちょっともたつく感じあるけど、致命的ではない
Vagrant provisionに環境構築スクリプトを記述してvagrant up時に環境を構築するようにしている
仮想環境が立ち上がった瞬間からNeovimで補完が効く状態で使える素晴らしさ
dockerに比べるとそりゃ起動遅いし時間もかかるけれど、多少時間かかっても確実にコマンド一発で起動できる状態にもっていけたので最高 何回かvagrant destoryしてスクリプト直して、確実に成功する状態にもっていけた
以前までの、ホストOS上でスクリプトを実行していたときではこういう検証はできなかった
普段はGUI不要なのでvagrant sshだけしてNeovimで開発
GUIアプリを動かしたいときだけubuntu-desktopをインストールした別のVagrant環境を起動して開発
みたいに使い分けしている
使わなくなったらvagrant haltで終わり
デュアルブートするよりも楽
ゲーミングPCなのでスペック的には余裕
やらかしてもすぐに環境を立ち上げ直せるのでいろいろ試しまくれる
環境を破壊するかもしれないようなことも気軽に試せる
危険なコマンドとか
グローバルにいろんなコマンド入れたりとか
OSアップグレードしたりとか
docker in dockerやるのだと色々面倒
こういうこと意識せず普通にdockerが動く
VagrantfileにホストOSとゲストOSのポート紐付けを行えば、ゲストOS上のアプリをホストブラウザで表示できる
これで監視系をゲストOSで起動してブラウザで見たりを普通にやってる
仮想マシン上では開発以外のことは基本的にしない
仮想マシン上のものはすべてGitHubでリポジトリ管理している
つまりvagrant destroyしてもいつでも再取得できる
よっていつでも捨てられるものしか仮想マシン上に存在しない
ホストOSには大事なものはあるが、ゲストOSには存在しない
クリップボードコピー
どうやって選択したら良いんだろう、と思ったらShiftキー押しながらマウスで選択すればよかった
余談
Vagrant provisionを使ってスクリプトで上記リポジトリを落としてきてシンボリックリンクをはっている
コード管理できるし
環境何度でも作り直せるし
追記