目次

MSYS2でEmacs環境とUNIXライク環境を作る

試した環境

MSYS🤔MSYS2😧MinGW😰Mingw-w64😇

Windows上にUNIXライクな環境を構築するソフト群は、歴史的経緯により、MSYS, MSYS2, MinGW, Mingw-w64 と似たような名前のものが存在している。組み合わせて使われることが多いが、それぞれ独立で動くソフトウェアパッケージである。

当方も詳しくはないので間違ってるかもしれないが、簡単にまとめるとこんな感じ。

各ソフトの機能や動作環境を表にするとこんな感じ。

ソフト シェル コンパイラ 動作環境 開発ターゲット
x86 x64 x86 x64
MinGW - ×
MSYS - - -
Mingw-w64 -
MSYS2 ×

実の所、Mingw-w64はMSYS2のパッケージリストに含まれていたりする。

MSYS2にはEmacsやOpenSSH、PuTTYにPythonなど多数のWindows向けバイナリパッケージも含まれているので、64ビット環境ならMSYS2を使う事で簡単に統合的なUNIXライクな環境を作ることができる。MinGW, MSYS, NTEmacs, PuTTYあたりを個別にインストールし頑張って連携させ、それぞれの更新も手動で行っていた頃と比べると隔世の感がある。

インストール

MSYS2

まずはMSYS2をインストールする。

公式サイトからインストーラを取ってきて、これまた公式サイトのスクリーンショット付き解説の通りに進める。といっても、基本は「次へ」ボタンを押してくだけ。最後に「今すぐMSYS2 64bitを実行します。」にチェックを入れて「完了」ボタンを押す。

MSYS2が起動するので、MSYS2のコアシステムとパッケージデータベースを更新する。

$ pacman -Syu

コアシステムに更新があればMSYS2を再起動し、再度パッケージを更新する。

$ pacman -Su

ホームディレクトリのマウント設定

OpenSSHのようなホームディレクトリを頑なに'/home/ユーザー名'でアクセスするソフト用に、fstabでマウント設定を行う。

$ notepad /etc/fstab

メモ帳でfstabファイルが開くので、「d:/path/to/home/username /home/username」の1行を追加する。

C:/Home/Decomo /home/Decomo

一度手動でマウントしないと自動マウントされないっぽい?

$ mount /home/Decomo

MSYS2のターミナルを再起動して、正しくマウントされるか確認する。

$ mount
C:/Home/Decomo on /home/Decomo type ntfs (binary,posix=0,user) ★この行があればOK
U:/msys64 on / type ntfs (binary,noacl,auto)
U:/msys64/usr/bin on /bin type ntfs (binary,noacl,auto)
C: on /c type ntfs (binary,noacl,posix=0,user,noumount,auto)

mingw32?mingw64?

pacmanでアプリを入れる際、mingw32, mingw64, msysのプレフィックスが付いた同名アプリが出てくることに気付くだろう。例えばemacsならこんな感じで。

$ pacman -Ss emacs
mingw32/mingw-w64-i686-emacs 27.1-1
    The extensible, customizable, self-documenting, real-time display editor (mingw-w64)
mingw64/mingw-w64-x86_64-emacs 27.1-1
    The extensible, customizable, self-documenting, real-time display editor (mingw-w64)
msys/emacs 26.3-1 (editors)
    The extensible, customizable, self-documenting, real-time display editor (msys2)

これらの意味の詳細は見つけられてないが、少なくともmingw32とmingw64はそれぞれ32ビット版、64ビット版を示しているようだ。その後のmingw-w64はビルドに使ったツールチェインの事と思われる。

とりあえずはmingw64の方を使っておけば大丈夫かと。

Emacs

みんな大好きEmacsをインストール。vim?知らない子ですねぇ…

パッケージ名はmingw64/より後ろを書いてやればよい。

$ pacman -S mingw-w64-x86_64-emacs

MSYS2の環境でイイ感じい使うための設定。

; MSYS2の実行パスを通す。Windowsの環境変数で通していれば不要。
(setenv "PATH" (format "U:/msys64/usr/bin:%s"  (getenv "PATH")))
; bashを指定
(setq shell-file-name "U:/msys64/usr/bin/bash.exe")
(setq explicit-shell-file-name shell-file-name)
; NULLデバイスの設定。標準ではWindowsの"NUL"になっており、MSYS2のバイナリで上手く扱えない。
(setq null-device "/dev/null")

ssh

いわゆるsshコマンドはmsys/opensshパッケージに含まれる。

$ pacman -Ss openssh

PuTTYも準備されているのでお好みで。

$ pacman -Ss mingw-w64-x86_64-putty

参考サイト