実は、”WindowsでLinuxする(Windows上でLinuxを使う)”方法は、複数存在する。MicrosoftがWSL/WSL2の開発に取り組み始めたことでWSL/WSL2が有力な第一候補になっているが、それ以外の方法も以前から存在しているのだ。
プロセッサのパワーが十分高くなった時期、または、プロセッサに仮想化支援機能が入り始めた時期から、「仮想環境でLinuxを実行する」というアプローチが取られるようになった。PCを変えることなくWindowsもLinuxも使えるのが利点だ。MacOS上でLinuxを使うこともできるし、逆にLinux上でWindowsを実行することもできる。この技術が普及したことで、Linuxの利用は以前よりも簡単になった。
しかし、WindowsでLinuxする方法はそれ以前からも存在している。最も代表的なものは「Cygwin」と呼ばれるソフトウエアだ。これを使う場合、”Linuxする”というと語弊があるのだが、CygwinはGNUのソフトウエアやLinuxで使われることの多いオープンソースソフトウエアをWindowsで実行できるようにしたものだ。Linuxカーネルを実行したりプロセッサの仮想化技術を使っているわけではないので、WSL2や仮想化アプリケーションとは違う。詳しい説明は省くが、まずは「Linuxのコマンド群をWindowsで使えるようにしてパッケージングしたもの」、と考えておいていただきたい。
似たようなものに(と言っても、厳密に言えばそれぞれ特徴や目指すところは違うのだが)、「MSYS2」「Chocolatey」「Scoop」などがある。ほかにもあるのだが、現在でも開発が活発に進められており、それなりにユーザー数が多いところをピックアップするとこの辺りになるんじゃないかと思う。
WSL2が使えるのだからこれ以外の選択肢は必要ないのではないかと思うかもしれないが、こうした技術にはそれはそれで需要があるのだ。
WSL2では不満?
WSL2の最大のポイントはMicrosoftが開発しているという点にある。導入は簡単だし、Linuxカーネルとの互換性は100%。Visual StudioやVisual Studio Codeからも利用できる。Linuxを使いたいという要望であれば、WSL2は十分に需要を満たしてくれるのだ。
ではどういった場合にWSL2では不満になるかと言えば、例えばもっと軽く済ませたいときだ。
Linuxには便利なコマンドがたくさんある。こういったコマンドをWindowsでも使いたいということになれば、WSL2でその需要は満たすことができる。しかし、常にWSL2を発動させておかないとならない。それはつまり、常に仮想環境を動かし続けることを意味している。
これは在宅勤務のようにPCに電源を接続しておける環境であれば問題ない。しかし、1日中電源に接続しないで使うような場合、バッテリー消費が気になってくる。いくつかの便利なコマンドを使うためだけにWSL2を使うのは、どうもバッテリーを消費しすぎるように思えるのだ。
例えば、ディレクトリ以下のファイルやディレクトリをツリー表示するtreeコマンド。同名のコマンドはWindowsにもあるが、Linuxで動くtreeのほうが便利だ。WSL2を使えば、「wsl tree」のようにしてWSL2で動くtreeコマンドをWindowsでも使うことができる。ただし、仮想環境が同時に動き、仮想環境からWindows側のファイルシステムにアクセスするためのオーバーヘッドも生じている。WSL2が動作するためのストレージ容量も消費している。treeコマンドを実行するために使われるリソースが大きいのである。
ほかの需要はソフトウエア開発だ。WindowsでLinuxで使われているライブラリなどを活用してソフトウエアを開発する場合である。WSL2はあくまでもネイティブなLinuxだ。WSL2でWindowsのソフトウエアを開発するというのはあまり得意ではない。先ほど取り上げたCygwinやMSYS2といったプラットフォームは、それができるのだ。Linuxで使われる便利なライブラリを使って、Windowsでネイティブに動作するアプリケーションを開発することができる。これはWSL2にはない特徴だ。
MSYS2
候補はいくつかあるのだが、まずそのなかから「MSYS2」を取り上げる。開発が活発に行われており、パッケージ管理システムに「pacman」を採用していて使いやすいのだ。モダンなLinuxディストリビューションに慣れているユーザーが取り組みやすい候補の一つではないかと思う。
MSYS2はWindowsでLinuxで使われているようなライブラリを使ってWindowsでネイティブに動作するソフトウエアを開発するためのプラットフォームと位置付けられている。しかし、それを実現するためにWindowsでネイティブに動作するLinuxのコマンド群を提供しており、Linux環境の代わりとしても使うことができる。Linuxユーザーにも、Windows開発者にも、お薦めできるプラットフォームだ。
MSYS2は、関連するソフトウエアを全て「C:\msys64\」にインストールする。Windowsへの環境汚染が少ないというのも特徴だ。アンインストールで「C:\msys64\」は完全削除が行われるので、いらなくなったらサクッと元に戻るというわけだ。
MSYS2のインストールとセットアップ
まず先に、MSYS2を実行するために3つの環境変数を追加する。次の環境変数だ。
環境変数 | 内容 |
---|---|
HOME | C:\Users\ユーザー名 |
LC_CTYPE | ja_JP.UTF-8 |
Path | C:\msys64\usr\bin |
C:\msys64\mingw64\bin |
MSYS2でインストールされるコマンドは「C:\msys64\home\ユーザ名ー\」をホームディレクトリとして動作する。Windowsにおけるユーザーのホームディレクトリは「C:\Users\ユーザー名\」だ。ホームディレクトリが2つになると結構混乱する。環境変数HOMEに正規のディレクトリを登録して、こちらに統一しよう。
また、何も設定していないとVimなどいくつかのアプリケーションが日本語を適切に使ってくれないので、環境変数LC_CTYPEにja_JP.UTF-8も設定する。
後は、インストールしたMSYS2のコマンドがWindowsから使えるように環境変数Pathに「C:\msys64\usr\bin」と「C:\msys64\mingw64\bin」を追加する。設定できる環境変数はいくつもあるのだが、それらは必要に応じておいおい設定すれば良く、まずは最低限この辺りを設定しよう。
なお、Windowsで環境変数の設定は、スタートメニュー右横の検索フィールドで「PATH」を検索し、表示される候補から「システム環境変数の編集」→「システムのプロパティ」→「環境変数…」を選択し、「環境変数」ダイアログで行えばよい。ユーザーの環境変数として編集しておこう。
MSYS2のインストールはWingetで以下のように行うことができる。Wingetの登場で本当にこういったソフトウエアの導入は簡単になった。
winget install MSYS2
MSYS2のインストールが完了したら、次のコマンドを実行してパッケージのメタデータアップデートと、パッケージのアップグレードを最初に行っておく。
pacman -Syu
先述の通り、MSYS2はパッケージ管理システムとして「pacman」を採用している。pacmanはArch Linuxのパッケージ管理システムだ。aptに慣れているユーザーにはなじみがないかもしれないが、これはこれで使いやすい。
MSYS2をインストールしたばかりの状態でも、最低限必要なLinuxコマンドはインストールされている。次のように、Linuxで一般的に使われるコマンドが実行できることが確認できるはずだ(lsコマンドについては、PowerShellのエイリアスとの衝突を避けるため、「ls」ではなく「ls.exe」のように明示的にMSYS2のコマンドが実行されるようにしてある点に注意)。
MSYSのアンインストールは、Wingetを使って次のように実行すればよい。
winget uninstall MSYS2
MSYS2はインストールもアンインストールも簡単だ。
MSYS2はセットアップが簡単
MSYS2は、仕事で同じ環境を構築する必要があるユーザーと環境セットアップ方法を共有するのも簡単だ。先ほど説明したように、wingetとpacmanコマンドだけでほぼ環境構築を終えることができる。WSL2のようにWSL側の環境に入る必要もなく、Windowsだけで作業を完結することができる。
以降何回かに分けてMSYS2の構造や使い方などを説明していく。ユーザーによってはWSL2でLinux環境を動作させるよりも、MSYS2のほうが目的に合っているということもると思う。かなり扱いやすいプラットフォームなので、ぜひとも試してもらいたい。