vagrantでWindowsにLinux仮想環境を簡単にセットアップしよう


2024/09/13

# vagrantでWindowsにLinux仮想環境を簡単にセットアップしよう

## 目的
- コマンド一つでLinux環境を構築したい。
- アプリの開発やミドルウェアの設定に集中したい。

## 前提
- 2024年のWindowsについての手順です。
- vagrant、VirtualBoxの使い始めるまでを少し丁寧めに説明します。

:::note info
パソコン自体の調達や、パソコンの初期設定に関して情報が必要な場合は以下を確認してみてください。
:::

https://qiita.com/kubo4ka/items/aaab0029cf88c9838dc7

https://qiita.com/kubo4ka/items/96484112f1ed745bf141

## 手段
- 仮想環境の提供はVirtualBoxを利用します。
- VirtualBoxに入れるゲストOSの設定自動化にvagrantを利用します。

## 言葉の整理  
私は文系学部卒で、「OSって何それおいしいの？」って感じだったので、この手の登場人物の多い話は、当初じゃ全然理解できなかったと思います。
取り敢えずは、言葉の整理を簡単にして、理解はできなくても写経はできた、動くには動いた、というところまで行ければ、一歩前進なのかなと思います。

今回についての取り敢えずのイメージですが、
マリオコレクションとか、任天堂スイッチのファミコンとかスーファミができる、あれとかのイメージです。違うハードのゲームできるって凄いですよね。

### 仮想化とは
物理的でなく論理的に何かを用意する、くらいに思ってもらえれば良いと思います。
仮想化の対象は色々あるのですが、今回は物理的にパソコン買ってきて用意するのが大変なので、その辺を仮想化すると思ってください。

パソコン辺りから仮想化する方法は、大きく以下のような選択肢があると思ってください。
- ハイパーバイザ型　ESXiなど
- ホスト型　VirtualBoxなど
- コンテナ型　Dockerなど

今回は、パソコンの中にパソコン作る、という感じの、VirtualBoxを利用します。

お手元のパソコンと、中に仮想的に作るパソコンの関係を整理してみます。

1. 「物理サーバ（仮想ホストとも）」に、「ホストOS」が載っています。
今回の場合はお手元のパソコンが物理サーバで、
WindowsがホストOSです。
マリオコレクションで言えば、スーファミが物理サーバで、マリオコレクションの物理的なカセットがホストOSです。どのマリオのゲーム遊ぶか選択できる状態になりますよね。

2. ホストOSの上に、「仮想サーバ（仮想マシン、VMとも）」を作成します。
先ずは仮想のパソコンを作る感じです。
中身がない状態のパソコンってあんまり考えたことないかもですが、電源入れてもログイン画面にならず、OS見つからないよ、って感じのメッセージが出るだけの状態です。

3. 仮想サーバの上に、「ゲストOS」を載せていきます。
今回のゲストはLinuxにしようと思います。
centos、ubuntuなど選択肢は色々ありますが、今回紹介するの
はubuntuにしてみます。これでようやくログイン画面が出ます。
マリオコレクションで言えば、USAとかが選べる状態です。
ゲストOSを入れる前は、USAとかの選択肢がない、何も遊べない状態と思ってください。
スイッチでゲームボーイが遊べるあれも、最初は遊べるカセット少ない感じでしたが、徐々に追加されていると思います。あれが、ゲストOSをどんどん追加しているイメージです。

これで、取り敢えずは、手元のパソコンから、仮想環境のLinuxを構築する、ということのイメージトレーニングができたかなと思います。

### 自動化とは
上記のステップは必要かも知れないけど面倒だ、と感じたでしょうか？
一度VirtualBoxについて、GUIで手作業で任意のOSを一つインストールする手順を調べてやってみると良いかと思います。

私はとても面倒だと思います。
自分のやりたいことはインストール作業ではない、CPU何個にするとかタイムゾーンの設定とかどうでも良い。良い感じにやっといてくれ、という感じです。
Linux上で、コマンド試したり、アプリの動作確認したり、目的は別にある。そっちに集中したい。

という時に、時短、冪等性の担保、品質の担保などのためにも、自動化を検討しましょう。

VirtualBoxに対して、仮想マシン設定、ゲストOSインストール、必要ならゲストOS上で任意の設定実施を自動化してくれるツールとして、vagrantという便利なアプリがあります。

https://www.vagrantup.com/
```
Vagrant is a tool for building and managing virtual machine environments in a single workflow.
```

自動化の具体的な方法は、何らかの指示を何らかのフォーマットで用意しておく、というものが一般的だと思います。
vagrantの場合は、Vagrantfileという平文で、rubyの書き方で指示を書いておくと、仮想マシン、ゲストOSを自動で用意してくれます。便利ですね。

## 構築手順

では実際に構築して行ってみましょう。

### windows updateを実行する。
任意ですが、お作法として記載しておきます。
powershellまたはGUIで、OSに対して更新プログラムを適用しましょう。

https://atmarkit.itmedia.co.jp/ait/articles/2405/24/news030.html

### chocolateyでWindowsにアプリを幾つかインストールする。
これも一つの自動化です。
Windowsにアプリをインストールする、というと、公式サイトに行って、exeをダウンロードしてきて、ダブルクリックして、ウィザードに従って操作する、、、という、GUIのイメージが一般的かと思いますが、コマンド一発で終わるように自動化のツールがOSSで提供されているので活用しましょう。
「パッケージマネージャ」という用語となるもので、Windowsに関しては選択肢はいくつかあるのですが、今回は「chocolatey」というものを使って行きましょう。

公式サイトに従いchocolatey自体をインストールしましょう。
オプションのユーザ登録は不要です。
管理者権限PowerShellでワンライナー実行のはず。

https://chocolatey.org/install

chocolatey自体のインストールが終わったら、以下のコマンドで幾つかアプリをインストールする。
```powershell
choco install -y virtualbox vagrant cmder
```

Chocolatey installed xx/xx packages.
といった感じのメッセージが出て、問題なければ上記アプリが利用可能になっているはずです。

### cmderを起動する。
コマンドプロンプトは画面閉じてしまうと前回のコマンド履歴が見れない。powershellはコマンドが長くて慣れない。WindowsではそもそもLinuxっぽいコマンドが使えない。
という点に対して、いくつかLinuxっぽい、つまりbashっぽいターミナルアプリがありますが、今回はcmderというものを使ってみましょう。

以下をダブルクリックしてcmderを起動してみましょう。
```
C:\tools\Cmder\Cmder.exe
```
起動したら、タスクバーのcmderアイコンを右クリックし、「タスクバーにピン留めする」を選んでおくと、次回以降の起動に便利です。

### 作業ディレクトリを作成する。
以下を実行し、作業ディレクトリを作成します。
```
mkdir vagranttest
cd vagranttest
pwd
```

手順とおりであれば、「C:\tools\Cmder\vagranttest」と表示されているのではないでしょうか？
ここで試しに、Windowsキー＋R→cmdでエンターして、コマンドプロンプトを起動して、「pwd」を実行してみてください。
そんなコマンドはないよ、と言われるはずです。

また、cmderの方で、以下を実行してみてください。
```
history
```
過去に実行したコマンドが表示されるはずです。
以前実行したことと同じことをしたい場合、キーボードの上矢印、下矢印で履歴を移動できるので便利です。

また、Ctrl＋Rとしてから「cd」と打ってみてください。
履歴から近い順に検索してくれるので、「cd vagranttest」と表示されるはずです。
Ctrl＋Rを押した回数遡ってくれるので便利です。

## vagrantを利用する準備をする。

cmderの紹介は一旦以上として、vagrant関係の作業に移ります。

vagrantは、放浪するみたいな意味のようですが、簡単に環境を作ったり壊したりできる、ということで何となく納得できるネーミングです。大まかには以下の3ステップです。

1. vagrant について box add hashicorp/bionic64
2. vagrant について init hashicorp/bionic64
3. vagrant について up

先ずは利用するOSのイメージファイルをダウンロードすると思ってください。今回は公式サイトに記載のあった「hashicorp/bionic64」というイメージにしてみました。
次に、作業ディレクトリでvagrantとしてのinit、詰まりイニシャライズ、初期処理をします。
これを実行すると、Vagrantfileを作成してくれます。
先ほどダウンロードしておいたOSのイメージファイルを指定しておくと、Vagrantfileにそれを書いておいてくれます。
Vagrantfileはrubyの書き方で書かれたただのテキストファイルですので、好きに自動設定してほしいことを記述できるのですが、今回は取り敢えずそのままで利用してみましょう。
最後にvagrantについて起動するようにupとコマンドすると、色々と動き始める、、、という感じです。
では、コマンドとしては以下で実行していきましょう。

今、cmderは、「C:\tools\Cmder\vagranttest」にいるはずです。違う場所にいる場合は移動しておきましょう。
```
vagrant box add hashicorp/bionic64
vagrant box list

vagrant init hashicorp/bionic64
ls -l
head Vagrantfile

vagrant status
vagrant up
vagrant status
```
いくつか状態確認のコマンドを行っていますが、上記説明した3ステップを実行しています。
vagrant box addではproviderの確認があるはずなので、VirtualBoxを選択してください。
vagrant box addとvagrant upで、そこそこ時間はかかるはずです。インターネット接続速度やマシンスペックによるので、取り敢えずは放置して大丈夫です。
ただ、vagrant upの際は、VirtualBoxアプリを見ていると、自動で色々動いていく様子が見えると思うので、最初のうちはcmderとVirtualBoxアプリの画面を並べてみてください。

## vagrantで起動したゲストOSにログインする。

vagrant statusの結果で、runningとなっていれば、パソコンの中にパソコンができて、電源が入っている状態になります。
今回は「hashicorp/bionic64」という名前で書かれていたイメージのOSを入れてあるはずです。
```
vagrant ssh
```
ログインできたでしょうか？

以下のような感じになっているかと思います。

```
C:\tools\Cmder\vagranttest
$ vagrant ssh
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-58-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri Sep 13 16:19:27 UTC 2024

  System load:  0.1               Processes:           91
  Usage of /:   3.1% of 61.80GB   Users logged in:     0
  Memory usage: 15%               IP address for eth0: 10.0.2.15
  Swap usage:   0%

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge

298 packages can be updated.
238 updates are security updates.


vagrant@vagrant:~$
```

これで、手元のパソコンで、Linuxを操作できるようになりました！

## vagrantを利用した参考記事
以下で色々なVagrantfileを紹介しているので、どんな使い方ができるのか、参考にしてみてください。

- 「プロビジョニング」という、便利な方法を使って、tomcatをインストール、起動させています。

https://qiita.com/kubo4ka/items/142573fb8d5bb7fa1eb4

- postgresのレプリケーションを試しています。
2台の仮想マシンを立ち上げ、「プロビジョニング」でpostgresの設定を行ったりしています。

https://qiita.com/kubo4ka/items/51599e32a5ae2af2d437

- 3台のサーバを立ち上げ、httpsアクセスを確認をしています。

https://qiita.com/kubo4ka/items/5cfd2d3522e8d18fa146

これで、簡単にLinuxを利用して確認したいことを確認できるようになったはずです。アプリ開発やミドルウェアの設定など、集中したいことに対して時間を有効活用しましょう＼(^o^)／

以上