まず、マシンの**仮想化**(Virtualization)とは物理的なハードウェア(CPU、メモリ、ディスクなど)をソフトウェア的に再現する技術のことです。
**仮想マシン**(Virtual Machine、VM)とは仮想化技術を使って作られたマシン・コンピュータのことです。
![Image from Gyazo](https://i.gyazo.com/d9e609148b5d8d9133c7eb5e6fc4a7d1.png)
**仮想マシン**にとっては自分につながっているCPUやメモリ・ディスクなどが本当に物理的に存在しているのか、それともソフトウェアによって作られたものなのか区別がつきません。ある意味コンピューターを騙して動かしているわけですが、それによって大きなメリットが得られます。
![Image from Gyazo](https://i.gyazo.com/3f771a82c06cc2d26c079b93c34557ef.png)
仮想マシン=マトリックスみたいなもんですね🤭
## 仮想マシンのメリット
### コスト削減
物理的に1台のマシンに複数のコンピューターを入れることができるのでサーバー用途などでコスト削減になります。
### 管理が楽
ファイルのように作成したり削除したりが簡単なので物理的にマシンを用意したり破棄したりするのに比べて管理が楽です。
### 別のOSが使える
Windowsを使っていたとしてもその中に仮想マシンを作り、LinuxをインストールすればLinuxを使うことができます。開発者としてはこのメリットが一番大きいです。
## ホストOSとゲストOS
[![Image from Gyazo](https://i.gyazo.com/3cf408616e3f28e8bf86ebfe145c912e.png)](https://gyazo.com/3cf408616e3f28e8bf86ebfe145c912e)
ホスト=もてなす人、ゲスト=お客さんって感じです。
ベースになるOSがホストOS、仮想マシンにインストールされるOSがゲストOSです。
## 仮想化技術の種類
現在使われているのは主に2です。
### ホスト型
[![Image from Gyazo](https://i.gyazo.com/c8d89bd640663965a4832e73dfd6a29b.png)](https://gyazo.com/c8d89bd640663965a4832e73dfd6a29b)
WindowsやmacOS、Linuxなどをホストとし、そこに仮想化ソフトウェアを入れてそれを使って仮想マシンを作る形式。
手軽に導入できる反面、全ての処理がホストOSを経由するのでパフォーマンスが低下するデメリットがあります。
代表的なソフトにはVirtualBox、VMWare Fusion、Parallels Desktopなどがあります。
### ハイパーバイザー型
[![Image from Gyazo](https://i.gyazo.com/bf6905e72cde0994fa10b69335f8e737.png)](https://gyazo.com/bf6905e72cde0994fa10b69335f8e737)
物理マシンにWindowsなどの一般的なOSをインストールせず、直接インストールする形のソフトウェアです。OSを経由せずに直接ハードウェアを扱うのでパフォーマンスが高い反面、仮想環境専用のマシンとして使うことになるので敷居が高いことがデメリットです。用途としても大規模なサーバー環境や大企業のクライアントとして使われることが多いです。
代表的なソフトにVMware ESX、XenServerなどがあります。
ブログ