• 作成:
  • 更新:

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 zshに変えました

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

Home · bmatzelle/gow Wiki

とか書かれているがそれは罠です。

Windowsとの相性問題を引き起こさないようにmsys2のpacmanでインストールするものは最小限にして、なるべくscoopでインストールすると良いでしょう。例えばGitなんかはmsys2でインストールすると実行権限の誤検知をしてしまいます。

PowerShellを使うべきでは?

PowerShellをカスタムして使うべきかは結構悩みました。

ただ、私の人生でWindowsを使うことは数割だと思うので、そのためだけにPowerShellのカスタムに情熱を割くことは出来ませんでした。

また、 PowerShellの補完インターフェイスとかがあまり好きではないなどの理由もあります。

シンボリックリンク1つ作るのにコマンド長すぎでしょみたいな、コマンドレットの思想への反発もあります。

Windowsをガッツリ使うことが増えてきたり、 PowerShellが魅力的になってきたらまた考えます。