MSYS2とWSL2

本連載では、WindowsでLinuxのコマンドを実行する方法として「MSYS2」と「WSL2」という2つの方法を取り上げてきた。どちらも実現するために使っている技術が異なっており、特性も異なる。ユーザーの視点から双方の技術をまとめると、次のようになる。

WSL2 MSYS2
・Windows 10以降に標準搭載
・Hyper-Vの仮想環境でLinuxを実行
・Linuxカーネルをそのまま使っているため100%の互換性あり
・実行速度が高速
・Windowsのファイルシステムもある程度そのまま扱うことができる
・Linuxカーネルが確保したメモリはそのままホストのWindows側からも減るため、LinuxカーネルがI/Oキャッシュを大量に活用するとWindowsホストが使えるメモリが大量に減る
・Windowsでネイティブに動作するLinuxコマンド群
・Windowsと親和性が高い
・実行速度がとても遅い
・メモリの消費性は少ない。

この2つの技術は、「衝突する技術」というよりも、「補完し合う技術」と捉えるほうが良いように思う。

普段使いはMSYS2

普段からLinuxサーバにログインして作業しているなら、ターミナルでの作業に慣れているだろう。Windowsでもターミナルを活用しているのであれば、当然WindowsでもLinuxのコマンドを利用したくなる。ここでお薦めなのはMSYS2だ。MSYS2のLinuxコマンドはWindowsでネイティブに動作するコマンドであり、Windowsとの親和性が高い。Windowsで何気なくLinuxのコマンドを使いたいならMSYS2だ。

現在日本の企業システムでよく使われているLinuxはUbuntu、Red Hat Enterprise Linux、CentOS、Debian辺りだと考えられる。MSYS2はベースとしているパッケージ管理システムがArch Linuxの採用している「pacman」なので、UbuntuやRHELとは大きく異なっている。

しかし、この手のコマンドは慣れの問題も大きく、便利な使い方を押さえておけば特に苦労なく扱えるはずだ。以下に、pacmanコマンドの便利な使い方をまとめておくので参考にしていただきたい。

コマンド 内容
pacman -S パッケージインストール
pacman -Ss パッケージ検索
pacman -R パッケージアンインストール
pacman -Rdd パッケージ強制アンインストール
pacman -Rs パッケージおよびそのパッケージのみが必要としているパッケージをアンインストール
pacman -Rns パッケージおよびそのパッケージのみが必要としているパッケージおよびバックアップファイルをアンインストール
pacman -Fx 指定したファイルが含まれているパッケージを一覧表示
pacman -Fl 指定したパッケージがインストールするファイルを一覧表示
pacman -Q インストール済みパッケージ一覧表示
pacman -Syu メタデータアップデートとパッケージアップグレード

pacman - MSYS2

LinuxやMacでターミナルアプリケーションをよく使っているのであれば、MSYS2はよくなじむと思う。

速度が必要なときはWSL2

Linuxで利用できる便利なコマンドを組み合わせることで、さまざまな作業の自動化ができる。シェルスクリプトに処理をまとめておくのだ。WindowsでLinuxのコマンド群が動くようになると、Windowsでも同じようなシェルスクリプトを作ったり、LinuxやMacで使っていたシェルスクリプトをWindowsで使ったりしたくなるはずだ。

この用途でMSYS2を使おうとすると、やや問題がある。MSYS2はシェルスクリプトで使うコマンド群としては実行速度が遅く、シェルスクリプトが快適な速度では動作しない可能性が高い。スクリプトの組み方を工夫することである程度高速化することはできるものの、それにも限界があるし、そもそも手軽に高度なことができるのがシェルスクリプトの嬉しいところなのに、高速化のために読みにくいシェルスクリプトを書いていては本末転倒だ。

こういうときはWSL2だ。いろいろ実行してみるとわかると思うが、WSL2で動作するLinuxはかなり速い。ある程度まとまった処理をシェルスクリプトで実行するといった場合には、WSL2で実行するというのが良いと思う。インタラクティブな操作もWindows内ではなくLinux内で完結することがほとんどという場合にも、MSYS2ではなくWSL2のほうが適している。

Windowsネイティブアプリ開発時はMSYS2

開発者の目線で言うと、Linux向けのライブラリやプログラムを使ってWindowsでネイティブに動作するアプリケーションを開発する場合にはMSYS2が向いている。Linuxの何が魅力かと言えば、やはり豊富なオープンソースソフトウエアやライブラリが揃っていることだ。

現在のシステム開発においてオープンソースソフトウエアを全く使わないでシステムを構築するというのは、ケースとしてはまれになりつつある。オープンソースソフトウエアはソフトウエア開発において欠かすことのできない存在になっており、依存度の大小はあるものの、知らず知らず使っていることは少なくない。

MSYS2はそもそもWindowsでそうしたLinux向けのソフトウエアを使ってWindowsネイティブアプリケーションを開発できる環境、という側面を備えている。この特性の通り、WindowsでLinux関係のソフトウエアを使ったネイティブプリケーションを開発するならMSYS2が選択肢だ。

Visual Studio CodeでLinuxアプリ開発時はWSL2

こちらも開発目的となるが、Visual Studio CodeでLinuxアプリケーション、特にLinuxサーバで動作するWebアプリケーションを開発するということであればWSL2が適切だ。Visual Studio CodeはMicrosoftが開発を行う統合開発環境・多機能エディタであり、すでにWSL2と連携するための拡張機能が提供されている。WindowsでLinuxサーバアプリケーションの開発を行う環境がすでに整っているのだ。

Visual Studio CodeとWSL拡張機能は、WindowsにおけるLinux系サーバアプリケーション開発に新しい視点を持ち込んだ。Windowsのなかだけでサーバアプリケーションの開発が簡単に完結するのは便利だ。すでにこの開発環境を手放すことができない方も多いのではないかと思う。この拡張機能は今後も重要な開発機能の一つとして存続すると考えられる。

ケースバイケースで使い分けよう

こんな感じでMSYS2とWSL2は特性が異なっているので、それぞれに適した利用シーンが異なっている。どちらかに揃えるのではなく、必要に応じてどちらも使うというのが良いだろう。もちろん、どちらを使うかはユーザーの要望次第だ。必要に応じて選んでいただきたい。

WindowsにおけるLinuxはこの数年間で大きく変わった。WSL1の登場、そして実装系の異なるWSL2の登場は特にそれを特徴づけるものだ。Windowsは世界中のPCで最も普及しているOSであり、そのシステムで簡単にLinuxコマンドが実行できるようになったことの意味は大きい。Linuxをセットアップする手間はほとんど必要ない。すぐに使い始めることができるのだ。

手元にすぐに使えるLinux環境が1つあると、何かと便利だ。ぜひ、こうした機能を活用していただきたい。