「パソコンが何台もあって机がごちゃごちゃ」とか、「同じ作業をするのにサーバーが何十台も必要でコストがやばい」って状況、社会人になったら意外とよく聞く話だよ。でも実は、仮想化っていう技術を使えば、1台のコンピュータで何台分もの仕事ができちゃうんだよね。AWSとかクラウドって言葉を聞いたことがあるなら、その裏側にある技術がまさにこれ。この記事を読めば、「仮想化ってなんとなく聞いたことある」から「あーそういうことか!」に変わるよ。
- 仮想化とは、1台の物理コンピュータの中に 複数の仮想マシン(VM) を作り出す技術のこと
- ハイパーバイザー というソフトウェアが仮想マシンを管理・制御する司令塔の役割を担っている
- AWSなどの クラウドサービス も仮想化技術の上に成り立っており、私たちの生活に深く関わっている
もうちょっと詳しく
仮想化を裏で支えているのが「ハイパーバイザー」というソフトウェア。つまり、物理的なコンピュータのリソース(CPUやメモリ)を複数の仮想マシンに分け与えて管理する、司令塔のようなプログラムのこと。代表的なものにVMwareやVirtualBoxがある。各仮想マシンはそれぞれ独立したOS(WindowsやLinuxなど)を持ち、お互いの存在を意識しないで動く。だから1つの仮想マシンが問題を起こしても、隣の仮想マシンには影響が出ない。この「独立性」こそが仮想化の強みで、安全性や管理のしやすさに直結しているんだよ。企業のシステム管理者にとっては、まさに夢のような技術といえるよね。
ハイパーバイザーには「タイプ1(ハードウェア直接制御型)」と「タイプ2(OS上で動くアプリ型)」の2種類がある!
⚠️ よくある勘違い
→ 仮想化は性能を生み出す魔法ではなく、1台のコンピュータのリソースを分け合う技術。性能自体は変わらない。
→ 余っているCPUやメモリを無駄にせず使いきれるから、結果としてコスパが良くなるんだよ。
[toc]
仮想化ってそもそも何のこと?
「仮想化」という言葉、なんとなく聞いたことはあるけど意味はよくわからない、という人は多いよね。まず「仮想」という言葉から整理しよう。「仮想」とは、つまり「実際には存在しないけれど、存在するように見せている」ということ。だから「仮想化」は、本物じゃないコンピュータをソフトウェアの力で作り出す技術のことだよ。
もっとわかりやすく言うと、マンションのたとえが使えるよ。1棟の大きなマンション(物理的なコンピュータ)があるとして、その中には101号室、102号室、103号室…っていうふうに、それぞれ独立した部屋(仮想マシン)がある。住んでいる人それぞれは「自分の家」として使っているけど、建物自体は1つだよね。仮想化はまさにこのイメージで、1台の大きなコンピュータの中に、複数の独立した「仮想コンピュータ」を作り出す技術なんだよ。
「物理的なコンピュータ」と「仮想マシン」の違い
物理的なコンピュータ(フィジカルマシン)っていうのは、本物のハードウェアのこと。つまり手で触れる本物のパソコンやサーバー機のことだよ。一方「仮想マシン(VM:Virtual Machine)」は、ソフトウェアで作られた「ニセモノのコンピュータ」。でも動作は本物と変わらなくて、OSをインストールしたり、アプリを動かしたりできる。外から見ると本物のコンピュータと区別がつかないくらい、しっかり動くんだよね。
仮想化が生まれた背景
昔のIT現場では、1台のサーバーに1つの役割しか持たせないのが普通だった。「Webサーバー用」「データベース用」「メール用」などと、それぞれ別のコンピュータを用意していたんだよ。でもそれだと各コンピュータのCPUやメモリが余りまくって、すごく非効率。たとえば深夜にアクセスが少ない時間帯は、コンピュータがほとんど仕事せずにただ電気を食ってるだけ、なんてことも珍しくなかった。この無駄を解消するために生まれたのが仮想化技術だよ。
仮想化の仕組みを知ろう
仮想化の仕組みの核心にあるのが「ハイパーバイザー」と呼ばれるソフトウェア。つまり、物理的なコンピュータのリソース(CPUの処理能力、メモリ、ストレージなど)を複数の仮想マシンに分配して管理する、司令塔のようなプログラムのことだよ。
ハイパーバイザーの2つのタイプ
ハイパーバイザーには大きく分けて2種類あるよ。
- タイプ1(ベアメタル型):OSを介さず、ハードウェアの上に直接インストールされるタイプ。VMware ESXiやMicrosoft Hyper-Vがこれにあたる。企業のデータセンターで使われることが多くて、性能が高いのが特徴。
- タイプ2(ホスト型):WindowsやmacOSなどの普通のOSの上にインストールするタイプ。VirtualBoxやVMware Workstationがこれ。個人が開発環境を作るときとかに便利だよ。
仮想マシンの中身はどうなってる?
1つの仮想マシンは、次のような要素でできている。
- 仮想CPU:物理コンピュータのCPUの処理能力を分けてもらったもの
- 仮想メモリ:物理メモリの一部を割り当てたもの
- 仮想ストレージ:実際のハードディスクの一部を使うもの(ファイル1つで表現されることが多い)
- 仮想NIC:ネットワークカードをソフトウェアで再現したもの
これらが組み合わさることで、「1台の独立したコンピュータ」として動けるようになる。仮想マシンはハイパーバイザーによって「自分専用のハードウェアがある」と思わされて動いているんだよ。まるでゲームのキャラクターが「自分は本当に生きている」と思って動いてるみたいなイメージ、というのはちょっと例えが変かな(笑)。でもそれくらい、仮想マシンは自分が「本物のコンピュータ」だと認識して動いているんだよね。
仮想化が使われているリアルな場面
仮想化は、実は私たちのすぐそばで当たり前のように使われている技術だよ。「どこで使われてるの?」って思った人のために、具体的な場面を紹介するね。
クラウドサービス(AWS・GCP・Azure)
AWSやGoogle Cloud、Microsoftのクラウドサービスの根っこには全部、仮想化技術がある。これらの会社は世界中にある巨大なデータセンター(サーバーがぎっしり詰まった巨大な建物)のサーバーを仮想化で分割して、ユーザーに「あなた専用のサーバー」として貸し出しているんだよ。月額料金を払うだけで、どこにいてもネット越しに自分のサーバーが使えるのは、この仮想化技術のおかげだよ。
開発環境の構築
プログラマーがソフトウェアを作るとき、「本番環境(実際に公開されてる環境)と同じ環境」でテストしたいことが多い。でも本番サーバーでいきなり試すのは危険。そこで、手元のパソコンに仮想マシンを作って、本番と同じ環境を再現してテストするんだよ。これならもし何か壊してしまっても、仮想マシンを消して作り直せばいいだけ。安全に開発できる!
VDI(仮想デスクトップ)
最近増えてるのが「VDI(Virtual Desktop Infrastructure)」つまり仮想デスクトップ基盤と呼ばれるもの。会社のサーバー上に仮想マシンを用意して、社員は手元の端末(薄型のパソコンやタブレットでも可)からそこに接続して仕事をする仕組みだよ。データはすべてサーバー側にあるから、端末を紛失しても情報漏洩のリスクが低い。テレワークとの相性もバッチリ!
仮想化のメリットとデメリット
仮想化にはたくさんのメリットがある一方、気をつけないといけないデメリットもあるよ。両方しっかり理解しておこう。
メリット①:コストと省スペース
一番大きなメリットはやっぱりコスト削減。10個の役割のために10台のサーバーを買う代わりに、高性能な1台のサーバーに10個の仮想マシンを作れば、購入費・電気代・スペースが全部節約できる。企業のデータセンター運営コストを劇的に下げた功績は、仮想化技術の最大の功績と言っても過言じゃないよ。
メリット②:柔軟な管理と高速復旧
仮想マシンはソフトウェアで作られているから、設定をファイルとして保存できる。「スナップショット」つまり仮想マシンのある時点の状態を丸ごとバックアップしておく機能を使えば、何か問題が起きてもその時点に即座に戻せる。本物のコンピュータが壊れたら修理に時間がかかるけど、仮想マシンなら別のサーバーに移してすぐ再起動、なんてことも可能だよ。
メリット③:独立性によるセキュリティ
各仮想マシンは基本的に互いを「見えない」状態で動いている。だから1つの仮想マシンがウイルスにやられても、隣の仮想マシンには影響が出にくい。サンドボックス(つまり砂場のように、その中でだけ遊んで外に影響を出さない隔離された環境)として使えるのも、セキュリティの観点から重宝されているよ。
デメリット:性能のオーバーヘッド
仮想化のデメリットとしてよく挙げられるのが「オーバーヘッド」つまりハイパーバイザーが仮想マシンを管理するために使うリソースの無駄のこと。物理コンピュータに直接インストールしたOSと比べると、どうしても仮想マシンの方が少し処理が重くなる。ゲームやリアルタイム処理のような高速性が命のアプリには向いていないこともあるよ。
仮想化の発展形「コンテナ」って何?
仮想化技術をさらに進化させたのが「コンテナ」技術。DockerやKubernetesって聞いたことがあるかもしれないけど、あれがコンテナ技術の代表格だよ。仮想マシンとコンテナは似てるようで、根本的に違う点がある。
仮想マシンとコンテナの違い
仮想マシンはそれぞれが独立したOSを丸ごと持っている。一方でコンテナは、ホスト(元となる)のOSを共有しながら、アプリケーションとその実行に必要な最低限のものだけをまとめて「箱」に入れる技術。つまりコンテナとは、アプリを動かすための最小限のセットを箱に詰めたもの、のことだよ。
- 仮想マシン:建物(物理サーバー)の中に、それぞれ完全に独立したアパート(仮想マシン)がある。各アパートにはキッチン・お風呂・トイレ(=OS)が全部ある。
- コンテナ:建物の中に、キッチンやお風呂は共用で、各住人は自分の部屋(アプリとその設定)だけを持っているシェアハウス。
コンテナのメリット
OSを丸ごと含まないコンテナは、仮想マシンに比べてずっと軽くて起動が速い。「開発環境と本番環境で動作が違う」という昔からのエンジニアの悩みも、コンテナを使えば「同じ箱ごと持ち運べる」ので解消できる。「自分のパソコンでは動いたのに、サーバーに載せたら動かない!」という悲劇を防げるんだよ。今のWebサービス開発の現場では、コンテナ技術は当たり前のように使われているよ。
仮想化とコンテナは敵じゃない
仮想化とコンテナは「どっちが上」ではなく、用途によって使い分けるもの。実際には「仮想マシンの上でコンテナを動かす」なんて構成も普通にある。クラウドのサーバー(仮想マシン)の上で、Dockerコンテナを動かしてWebアプリを走らせる、というのはまさに現代のWebサービス開発の定番構成だよ。仮想化はコンテナの土台となっているんだよね。
