「僕と契約してVMオヂサンになろうよ」


「僕と契約してVMオヂサンになろうよ」

はじめに

これは 限界開発鯖 Advent Calendar 2020 の15日目の記事です
14日目はフライさんのNotionをオラオラする術
16日目は(未投稿)です

👇お前だれという方はこちら

何だおまえ
らみん(laminne33569)です.
(Arch/Alter)Linux/Ruby/Python/Dockerを少ししてる松江高専一周目です.

[検閲により削除]

⚠️注意⚠️

この記事は仮想化関連超素人のぼくが†卍投稿日前日の夜の2時卍†寝ながら書いたものです.

そしてこの記事にはWindowsユーザには全く関係ない部分が多い(動作要件がLinuxが多い)ですごめんなさい(筆者は実機環境を手に入れるまでArchの仮想マシンをWin上に建ててました)

色々間違ってたりtypoしてたりするかもしれませんが許してください......

そもそもVM#とは

※この記事でのVMはハードウェアVMのことを指します
VMとはVirtualMachine(仮想機械)の略でコンピューターの動作をエミュレートするソフトウェアのことです.(語弊が多い)

Spoilor
言ってしまえばVMはコンピューターを多重人格化させるソフトウェアです.コンピューターの人格に相当するOSを複数起動できるためです.

こんな時に便利です

  • PCに他のOSを入れたい(後述)
  • 別のアーキテクチャでの動作をエミュレートしたい
  • できるだけ環境を汚したくない

最近だとArmアーキテクチャでの動作検証みたいなのをしたっていうツイートをよく見ます

何が便利なのか

PCに別のOSをインストールしたいとき

仮想化ソフトウェアが存在しない世界線ではいちいちインストールのやり直しや新規インストールをしなければいけません.

更に一台のPC上で動作するOSは一つと限られているため同時に作業がしたいといった場合は他にPC機を用意する必要があります.

そんなことしてたら大変ですよね?HDDやSSDの寿命はともかくインストールにかかる時間が洒落になりません....

別のアーキテクチャ用のOSやプログラムを動作させたいとき

皆さんがいまこの記事を読んでいる端末の殆どはx86(x86_64)かarmだと思います(逆にそれ以外のCPUを積んだマシンでアクセスされることは本当に少ない).

もし,あなたがi386(32bit)用のプログラムを書いたとしましょう.
ただ、手元にはx86_64機しかありません.

こういうときにi386(や他のCPUアーキテクチャや実行環境)の環境をエミュレートしてくれるVMは非常に便利です.いちいち物理マシンを用意する必要がないのです.しかも導入コストもそこまで高くありません(個人の感想)

VM生活を始めよう

皆さんのお持ちの開発用コンピューターの中身はきれいでしょうか?
いろんな言語がいろんなバージョンで動いていたりするはずです.
環境を汚したくないときにもVMは役に立ちます.

Windowsでは動かすのが大変でもLinuxではかんたんに動くものも存在します. e.g)Docker,Rails

いろんなOSを試すこともできます.

やり直しが何回でもきくのでインストールが比較的難しいArch Linuxなどのインストール練習をすることもできます.(ちなみに私もこの方法です)

"やり直し"が効きます

仮想マシンの中で何があってもーたとえ,なにかの間違いで# rm -rf /を実行してしまったとしてもー スナップショットという仮想化ソフトの機能を使えば、短い時間でもとに戻すこともできます

その環境,あなたと共有しません?

あと、多くの仮想化ソフトは一つのファイルの中にVM内部の情報を保存しているのでそれをUSBに入れたり他人と共有することによって開発環境を揃えることもできます.
...最近はDocker(コンテナ型仮想化ソフト)に置き換えられていますが.

仮想化ソフト(オススメ順)

ホストOS型

Hyper-V(Microsoft)

普通.何から何まで普通.
どちらかというと使いにくいがVMが強制終了サれたりといったことはない.かなり安定した仮想化ソフト.
Winのみ.

VirtualBox(Oracle)<-オススメ

普通.扱いやすくて情報量が多い.
macOS,Windows,Linuxのほとんどの環境に対応している.
Vagrantと相性がいい.

VMware(VMware)

色々良くわかっていない仮想化ソフト(私が触ったことがない).
有料版を使っているとドヤれるらしい.
対応OS不明.(調べてない)

QEMU(OSS)

どちらかというとCPUのエミュレートに使われるもの.
x86でない環境でwineを動作させたり,組み込み機器向けのクロスコンパイルに使える(らしい).
Win,macOS,Linux,BSD

KVM(OSS)

みんな大好きKVMサン.
Linuxカーネルをハイパーバイザ化するための仮想化モジュールという位置づけ.
Linuxで仮想マシンと言ったらだいたいこれというイメージ.
もちろんLinuxでしか使えません.

仮想化ソフトをかんたんに扱うためのGUIソフト

触ったことのある人はわかると思いますが、KVMとQEMUにはGUIのフロントエンドが存在しません.
なので,ほかのソフトをインストールするという方法でKVMやQEMUとおしゃべりしてVMを操作するわけです.

virt-manager(Red HatのOSS)

ちょっと触るのにコツの要る中級者以上向けフロントエンド.
XenやKVM,QEMUをあやつることができる.
メモリの仕様状況等を見やすく表示してくれるので非常に便利.

GNOME Boxes(OSS)

GNOME(Linuxのデスクトップ環境)のアプリケーションの一つ.
※GNOME以外のVMでもインストールすれば使えます
簡単に扱えるのでさっとVMを立てて壊す,といった用途に向いてる.
QEMU,KVM,libvirtに対応.

...さいごに

内容がペラッペラで申し訳ないです....まるで僕の腕のよう

VM以外にも仮想化の技術はいっぱいあるのでそういうのも勉強してはいかがでしょうか.

明日はSouさんでゲーム制作のTips集 ~ DXRubyを添えてです!