Windows Terminalでmsys2のzshをscoopのPATHを有効化しつつ使う
Windows Terminal良いですね。やっとWindowsにも標準的に使える、まともなターミナルが出てきたかと感無量です。
PowerShellとかシェル部分は面白かったのに、ターミナルエミュレータがつらすぎて使う気になりませんでしたからね。
ただ標準設定でmsys2には当たり前ですが対応してないのでちょっと躓きました。後から考えると冷静にヘルプを見るだけなのですが、ちょっと詰まったのでメモついでに書いていきます。
参考文献
現在の設定
{
"guid": "{9af7737e-1359-41f2-ad1f-baa2b00843ec}",
"name": "msys2 zsh",
"commandline": "cmd.exe /c set MSYS=winsymlinks:nativestrict && C:%HOMEPATH%/scoop/apps/msys2/current/msys2_shell.cmd -defterm -no-start -full-path -shell zsh",
"icon": "C:/msys64/msys2.ico"
},
msys2_shell.cmd
にコマンドラインオプションを渡すことで実現可能でした。
MSYS=winsymlinks:nativestrict
:ln
でコピーではなくシンボリックリンクを作る-mingw64
: デフォルトのmsysでも良い気もしますが、開発ツールへのパスがあってもそこまで困らなさそうなので追加-defterm
: minttyを使わないことを明示-no-start
: これがないとminttyが立ち上がってしまう-full-path
: scoopが設定したパスなどを受け継ぐ-shell zsh
: シェルにzshを使う
scoopのものならmsys2.cmd
を呼び出せばある程度引数は入っているのですが、変更が怖いのでなるべく根本のものを使いました。
予めpacman -S zsh
でzshを入れておきましょう。
なんでWSL(2)を使わないか
WSLで行う作業は基本的にWSL内部に作用します。私がWindowsを使っている時は、 Windowsでしか出来ないことを行いたい時なので、 WSL内部の環境を弄っても仕方がないことが多いです。
Linux向け開発環境としては当然WSLの方が良いのでしょうが、私は普段デスクトップLinuxを使っているので、そういうことをする時は素直にLinuxを使います。
なんでmsys2を使うか
本当はScoopで完結したくて、色々ランタイムが引っ付いてくるmsys2を使いたくは無かったのですが、 Request: zsh · Issue #3053 · lukesampson/scoop を見ると分かるように、 scoopでzshはインストールできません。
ちなみにgowではインストールできません。
Shell scripting: bash, zsh
とか書かれているがそれは罠です。
Windowsとの相性問題を引き起こさないようにmsys2のpacmanでインストールするものは最小限にして、なるべくscoopでインストールすると良いでしょう。例えばGitなんかはmsys2でインストールすると実行権限の誤検知をしてしまいます。
PowerShellを使うべきでは?
PowerShellをカスタムして使うべきかは結構悩みました。
ただ、私の人生でWindowsを使うことは数割だと思うので、そのためだけにPowerShellのカスタムに情熱を割くことは出来ませんでした。
また、 PowerShellの補完インターフェイスとかがあまり好きではないなどの理由もあります。
シンボリックリンク1つ作るのにコマンド長すぎでしょみたいな、コマンドレットの思想への反発もあります。
Windowsをガッツリ使うことが増えてきたり、 PowerShellが魅力的になってきたらまた考えます。