前回、WindowsでLinuxコマンドを実行する方法として「MSYS2」を使う方法を取り上げた。Windowsには、Linuxコマンドを実行する方法がWSL/WSL2や仮想環境を使う以外にもいくつか用意されている。初期から存在しているのは、ライブラリを介してLinuxコマンドを実行するという方法で、「Cygwin」が一番有名ではないかと思う。

似たような仕組みを採用したものはほかにもあるのだが、そのなかから前回は開発が活発、かつ”モダン”ということでMSYS2を取り上げた。そこでも説明したように、MSYS2のインストールは簡単だ。次のようにWinget (Windows Package Manager)でインストールするだけでよい。

winget install MSYS2

MSYS2は、C:\msys64\にインストールされる。このMSYS2を使うために、環境変数PATHやHOME、LC_TYPEなどを次のような値に設定しておく。

環境変数 内容
HOME C:\Users\ユーザー名
LC_CTYPE ja_JP.UTF-8
Path C:\msys64\usr\bin
C:\msys64\mingw64\bin

インストール後は、まず次のコマンドを実行する。

pacman -Syu

これにより、パッケージのメタデータとパッケージそのもののアップデートが行われる。MSYS2は、Windowsで実行できるLinuxコマンドの集まりのようなものだ。パッケージのインストールやアンインストールはpacmanコマンドで実施する。WindowsをLinuxのように使うことができる便利なプラットフォームなのだ。

MSYS2のパッケージ管理システムの使い方

MSYS2は、最初にインストールした段階でC:\msys64\usr\binに400個以上のコマンドが収められている。いずれもWindowsでネイティブに動作するLinuxコマンドだ。つまり、このパスが環境変数PATHに含まれていれば、PowerShellでもコマンドプロンプトでも、これらのコマンドをネイティブなコマンドとして実行できるわけだ。

MSYS2のコマンドを実行しているところ

また、初期インストールの時点でいくつかのパッケージもインストールされている。インストール済みパッケージは「pacman -Q」で確認できる。

MSYS2の初期インストール済みパッケージ

これらのパッケージによってC:\msys64\usr\bin\にインストールされているコマンドは、次の通りだ。

C:\msys64\usr\bin\のデフォルトコマンド
[.exe, addgnupghome, agetty.exe, applygnupgdefaults, arch.exe, ash.exe, autopoint, awk.exe, b2sum.exe, base32.exe, base64.exe, basename.exe, basenc.exe, bash.exe, bashbug, blkid.exe, brotli.exe, bsdtar.exe, bunzip2.exe, bzcat.exe, bzcmp, bzdiff, bzegrep, bzfgrep, bzgrep, bzip2.exe, bzip2recover.exe, bzless, bzmore, c_rehash, cal.exe, captoinfo.exe, cat.exe, cfdisk.exe, chattr.exe, chcon.exe, checkupdates, chgrp.exe, chmod.exe, chown.exe, chroot.exe, chrt.exe, cksum.exe, clear.exe, cmd, col.exe, colcrt.exe, colrm.exe, column.exe, comm.exe, core_perl, cp.exe, csplit.exe, curl.exe, cut.exe, cygcheck.exe, cygpath.exe, cygwin-console-helper.exe, dash.exe, date.exe, db_archive.exe, db_checkpoint.exe, db_deadlock.exe, db_dump.exe, db_hotbackup.exe, db_load.exe, db_log_verify.exe, db_printlog.exe, db_recover.exe, db_replicate.exe, db_stat.exe, db_tuner.exe, db_upgrade.exe, db_verify.exe, dd.exe, dep-search, df.exe, dir.exe, dircolors.exe, dirmngr-client.exe, dirmngr.exe, dirname.exe, dnsdomainname.exe, du.exe, dumper.exe, dumpsexp.exe, echo.exe, egrep, env.exe, envsubst.exe, expand.exe, expr.exe, factor.exe, false.exe, fdisk.exe, fgrep, file.exe, find.exe, findfs.exe, flock.exe, fmt.exe, fold.exe, fsck.cramfs.exe, fsck.minix.exe, ftp.exe, gapplication.exe, gawk-5.1.0.exe, gawk.exe, gdbm_dump.exe, gdbm_load.exe, gdbmtool.exe, gdbus.exe, gencat.exe, getconf.exe, getent.exe, getfacl.exe, getopt.exe, gettext.exe, gettext.sh, gettextize, gio-querymodules.exe, gkill.exe, glib-compile-schemas.exe, gobject-query.exe, gpg-agent.exe, gpg-connect-agent.exe, gpg-error.exe, gpg-wks-server.exe, gpg.exe, gpgconf.exe, gpgme-json.exe, gpgme-tool.exe, gpgparsemail.exe, gpgscm.exe, gpgsm.exe, gpgsplit.exe, gpgtar.exe, gpgv.exe, grep.exe, groups.exe, gsettings.exe, gunzip, gzexe, gzip.exe, hardlink.exe, head.exe, hexdump.exe, hmac256.exe, hostid.exe, hostname.exe, iconv.exe, id.exe, info.exe, infocmp.exe, infotocap.exe, install-info.exe, install.exe, ipcmk.exe, isosize.exe, join.exe, kbxutil.exe, kill.exe, ldd.exe, ldh.exe, less.exe, lessecho.exe, lesskey.exe, link.exe, ln.exe, locale.exe, locate.exe, logger.exe, logname.exe, look.exe, ls.exe, lsattr.exe, lzcat.exe, lzcmp, lzdiff, lzegrep, lzfgrep, lzgrep, lzless, lzma.exe, lzmadec.exe, lzmainfo.exe, lzmore, makepkg, makepkg-mingw, makepkg-template, mcookie.exe, md5sum.exe, minidumper.exe, mintheme, mintty.exe, mkdir.exe, mkfifo.exe, mkfs.bfs.exe, mkfs.cramfs.exe, mkfs.exe, mkfs.minix.exe, mkgroup.exe, mknod.exe, mkpasswd.exe, mkswap.exe, mktemp.exe, more.exe, mount.exe, mpicalc.exe, msgattrib.exe, msgcat.exe, msgcmp.exe, msgcomm.exe, msgconv.exe, msgen.exe, msgexec.exe, msgfilter.exe, msgfmt.exe, msggrep.exe, msginit.exe, msgmerge.exe, msgunfmt.exe, msguniq.exe, mv.exe, namei.exe, nano.exe, nettle-hash.exe, nettle-lfib-stream.exe, nettle-pbkdf2.exe, ngettext.exe, nice.exe, nl.exe, nohup.exe, nologin.exe, nproc.exe, numfmt.exe, od.exe, openssl.exe, p11-kit.exe, paccache, pacdiff, paclist, paclog-pkglist, pacman-conf.exe, pacman-db-upgrade, pacman-key, pacman.exe, pacscripts, pacsearch, pacsort.exe, pactree.exe, passwd.exe, paste.exe, pathchk.exe, peflags.exe, peflagsall, perl.exe, perl5.32.1.exe, pg.exe, pinentry-w32.exe, pinentry.exe, pinky.exe, pkcs1-conv.exe, pldd.exe, pr.exe, printenv.exe, printf.exe, ps.exe, psl-make-dafsa, psl.exe, ptx.exe, pwd.exe, rankmirrors, rcp.exe, readlink.exe, realpath.exe, rebase.exe, rebaseall, recode-sr-latin.exe, regtool.exe, rename.exe, renice.exe, repo-add, repo-elephant, repo-remove, reset.exe, rev.exe, rlogin.exe, rm.exe, rmdir.exe, rnano.exe, rsh.exe, runcon.exe, script.exe, scriptlive.exe, scriptreplay.exe, sed.exe, seq.exe, setfacl.exe, setmetamode.exe, setsid.exe, sexp-conv.exe, sfdisk.exe, sh.exe, sha1sum.exe, sha224sum.exe, sha256sum.exe, sha384sum.exe, sha512sum.exe, shell, shred.exe, shuf.exe, site_perl, sleep.exe, sort.exe, split.exe, ssp.exe, start, stat.exe, strace.exe, stty.exe, sum.exe, swaplabel.exe, sync.exe, tabs.exe, tac.exe, tail.exe, talk.exe, taskset.exe, tclsh.exe, tclsh8.6.exe, tee.exe, telnet.exe, test.exe, testpkg.exe, tftp.exe, tic.exe, time.exe, timeout.exe, toe.exe, touch.exe, tput.exe, tr.exe, true.exe, truncate.exe, trust.exe, tset.exe, tsort.exe, tty.exe, tzselect, tzset.exe, ul.exe, umount.exe, uname.exe, uncompress, unexpand.exe, uniq.exe, unlink.exe, unlzma.exe, unxz.exe, unzstd.exe, update-ca-trust, updatedb, updpkgsums, users.exe, uuidd.exe, uuidgen.exe, uuidparse.exe, vdir.exe, vendor_perl, vercmp.exe, watchgnupg.exe, wc.exe, wget.exe, whereis.exe, which.exe, who.exe, whoami.exe, wipefs.exe, xargs.exe, xgettext.exe, xmlcatalog.exe, xmllint.exe, xsltproc.exe, xz.exe, xzcat.exe, xzcmp, xzdec.exe, xzdiff, xzegrep, xzfgrep, xzgrep, xzless, xzmore, yat2m.exe, yes.exe, zcat, zcmp, zdiff, zdump.exe, zegrep, zfgrep, zforce, zgrep, zic.exe, zless, zmore, znew, zstd.exe, zstdcat.exe, zstdgrep, zstdless, zstdmt.exe

パッケージの検索には、いくつかの手段が用意されている。まず、「pacman -Ss パッケージ名」で名前による検索が可能だ。また、「pacman -Fx ファイル名」で、指定したファイル名にヒットするファイルが含まれるパッケージを探すことができる。パッケージ名が不明な場合は、こちらのほうが使いやすいだろう。そしてインストールは「pacman -S パッケージ名」だ。

パッケージの検索とインストール

例えば、本連載で以前紹介したエディタの「Vim」も、次のように簡単にインストールできる。

インストールしたVimの実行例

MSYS2には豊富な数のパッケージが収録されており、よく使われるツールは大抵用意されていると考えてよいと思う。これが、MSYS2を使う大きなメリットだ。

人気のあるツールが簡単に導入できる

pacmanはArch Linuxで使われているパッケージ管理システムだ。Ubuntuを使っているユーザーにはなじみのないコマンドだろう。しかし、このコマンドは結構扱いやすく、慣れてしまえば便利なことこの上ない。pacmanでよく使うコマンドの組み合わせをまとめておくので、参考にしてもらえればと思う。

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

Wingetを補ってあり余るMSYS2

Windows 10にWingetが導入されたことで、Windowsにおけるアプリケーションの導入は格段に簡単になった。aptがWindows 10で動作するようになったと想像するとわかりやすいだろう。

しかし、Wingetはまだまだ生まれたばかりで発展途上にある。そのため、欲しいソフトウエアがWingetに登録されていないということがよくあるのだ。Wingetが充実してさまざまなソフトウエアが登録されることが好ましいのだが、今はまだその段階ではないし、Linux系コマンドはいつまで経っても登録が増えないかもしれない。

MSYS2は、それを解決してくれるプラットフォームなのだ。使いたいLinux系コマンドがMSYS2経由であれば簡単にインストールでき、そしてWindowsでネイティブに動作する。WSL2のように仮想環境で動作するわけではないし、もちろん仮想環境で動作するLinuxのようにWindowsから分断されてもいない。WindowsでネイティブにLinux系のコマンドが使えるのだ。

WSL2に押され気味のように見えるが、やはり依然としてMSYS2は魅力的なプラットフォームである。このプラットフォームの本質は開発環境にあるのだが、コマンドを使う目的でも便利なのだ。ぜひとも一度、お試しいただきたい。