WSL2難民のためのWindowsのターミナル環境整備(MSYS2)
tags: windows
msys2
はじめに
Windowsで使えるUNIX風シェル環境を用意する方法の一つに、MSYS2があります。
MSYS2の詳しい内容は以下のURLを参照してもらうとして、簡単に言うとWindows上でbashが使えます。
通常、Windows上でLinuxライクな環境を使うならWSL2やVMを使えばよいのですが、昨今はリモートワークでVDI環境などを使うケースが増えました。VDIで仮想化支援機能がオフにされているとこれらの機能は使えません。
Linux開発環境は別に用意されており、find、bash、grep、awkなどのコマンドやWindowsからLinuxへ接続するためのターミナルとして利用できれば問題ないという状況であればMSYS2は良い解決先になると思います。
今回は、備忘録も兼ねてMSYS2とscoopで環境を構築する方法を纏めます。
実施内容
- scoopをインストールし、Windowsにインストールされたコマンドもシェルから呼び出せるようWindowsのPATH設定もMSYS2起動時に引き継ぐ
- Windows Terminalで、MSYS2を利用
- VSCode のターミナルとしてもMSYS2を利用
環境
Windows11 Pro
Scoop (Package Manager)
scoop(https://scoop.sh/)はWindowsのパッケージをコマンドラインでインストール、アンインストール、アップデート、検索などできるツールです。
brew、apt、dnfと同じようなパッケージマネージャで、Windowsで使用できます。
Windowsにはscoopより前に開発されたChocolatey(https://chocolatey.org/)があり、こちらの方が対応パッケージは多いです。
しかし、デフォルトでユーザディレクリ側にアプリケーションをインストールでき、UACのポップアップから解放されるため scoop を採用することにしました。
Scoopをインストールする
Windows Teminal(PowerShell)で以下のコマンドでWindowsをインストールできます。
> Set-ExecutionPolicy RemoteSigned -scope CurrentUser
> iwr -useb get.scoop.sh | iex
scoop を利用する準備
scoopを利用するには git必要なのでままずはgitをインストールします。
また、extraリポジトリに含まれるパッケージも必要なのでbucketを有効化します。
> $ scoop bucket known
main
extras
versions
nightlies
nirsoft
php
nerd-fonts
nonportable
java
games
jetbrains
> scoop install git
> scoop bucket add extras
> scoop status
Scoop is up to date.
Everything is ok!
scoop で必要なパッケージをインストール
> scoop install gh
> scoop install sudo
> scoop install msys2
> scoop install vscode
MSYS2
MSYS2のインストール
scoop経由でインストールすると「C:\Users<ユーザ名>\scoop\apps\msys2\current」へインストールされます。
scoopを使わずインストールする場合は https://www.msys2.org/ のサイトの「Installation」からインストーラをダウンロードしてください。
デフォルトではMSYS2は「C:\msys64」にインストールされます。
Windowsの環境変数PATHの引継ぎ
前述のscoopやその他Windowsでインストールしたアプリケーションを簡単に利用するため、Windowsの環境変数を引継ぎできるようにします。
msys2_shell.cmd で設定する環境変数 MSYS2_PATH_TYPE を inherit に設定します。
C:\msys64\msys2_shell.cmd
rem To export full current PATH from environment into MSYS2 use '-use-full-path' parameter
rem or uncomment next line
set MSYS2_PATH_TYPE=inherit # 先頭のremを消去
各ターミナルの設定方法
Windows Teminalでの設定
MSYS2をWindows Terminalに設定する方法は以下となります。
まずはUUIDを作成します。これは別にどの方法でも問題ありません。
MSYS2
$ uuidgen.exe
4ea22e24-b3c7-4acb-ac66-26d69587eb84
Windows Teminal(PowerShell)
> [Guid]::NewGuid()
Guid
----
60309296-d9ca-472e-9325-52e8ffbefa64
次にWindows Terminalを起動して、「Ctrl+,」を入力。
設定画面が開くので、左のサイドバーの下の方の歯車マークをクリックしてください。
setting.jsonがテキストエディタで開くので以下を追加・編集してください。
- profilesのリストにMSYS2を設定します。
- Windows Terminal起動時にデフォルトでMSYS2を開くよう設定する場合は、defaultProfile にUUIDを設定します。
...(略)...
"defaultProfile": "{<取得したUUID>}",
...(略)...
"profiles": {
"list":
[
...(略)...
{
"commandline": "C:/Users/%USERNAME%/scoop/apps/msys2/current/msys2_shell.cmd -defterm -here -no-start -msys",
"guid": "{<取得したUUID>}",
"icon": "C:/msys64/msys2.ico",
"name": "MSYS2",
"startingDirectory": "C:/Users/%USERNAME%",
"font":
{
"face": "Lucida Console",
"size": 10
},
}
]
Visual Stdio Code での設定
「ファイル」→「ユーザ設定」→「設定」で設定(setting.json)が開きます。
「terminal.integrated.env.windows」の「setting.jsonで編集」から
terminal.integrated.profiles.windows にMSYS2の設定を入れ、
terminal.integrated.defaultProfile.windows を設定し、VSCODEでターミナルを開くときに、MSYS2がデフォルトで起動するようにします。
{
"terminal.integrated.defaultProfile.windows": "Msys2",
"terminal.integrated.profiles.windows": {
"Msys2": {
"path": [
"C:/Users/%USERNAME%/scoop/apps/msys2/current/msys2_shell.cmd"
],
"terminal.integrated.env.windows": {
"MSYSTEM": "MSYS2",
},
"args": ["-defterm", "-msys2", "-no-start", "-here"],
"icon": "terminal-cmd"
},
}
}
おまけ
scoopでインストールしたアプリケーションをアップデートする
scoop updateでscoop自体をまず更新します。
$ scoop update
Updating Scoop...
Updating 'extras' bucket...
Updating 'jp' bucket...
Updating 'main' bucket...
Scoop was updated successfully!
scoop status でアップデート可能なものを表示し、対象のアプリケーションをアップデートします。
$ scoop status
$ scoop update <アプリケーション名>
一気にすべてアップデートする場合は以下となります。
$ scoop update *
scoopにオリジナルのbucketを追加する
bucketはscoopのアプリケーションのレポジトリで実体はGitのリポジトリとjson形式のマニュフェストファイルです。
$ scoop bucket add jp https://github.com/dooteeen/scoop-for-jp
Discussion