Windowsはクソ!という方に贈るWindowsターミナルの設定


ターミナル(黒画面)は好きですか?

賛否両論あるかと思いますが、
ターミナル(Windowsのコマンドプロンプト)、嫌いな人多いと思います。

なんでもかんでもGUIで済まそうとするおじさんもいるのも事実。
まあマウス使うからわかりやすいんですよね。

今回はその逆で、Windowsでターミナルを活用する方法を語っていきたいと思います。

Linux/Unixを触ったときに思うこと

みなさんは、Dockerを使うのにも関わらずWindowsを強要されてつらい思いをしたことありませんか?

MacやSolarisをはじめとするUnixも、Linuxも、どちらもターミナルの機能が強すぎてGUIがおまけみたいなところがあります。

それに、黒画面のターミナルがとてつもなくカッコよく映ります。
それが使いこなせるんだからもうイキっちゃいよね。

「もうぜんぶコマンドでよくね?」

みたいに思うはずです。

え?そんなことない?

Mac -> Windowsでつらいこと

なんでもかんでもGUI。
まあ便利ではあるんだけどね。

というかHomebrewが便利すぎる。
Ubuntuはapt、RedHat系はyum(今はdnf)もあるし。

コマンドたたけばいろんなものがそろうのに対し、Windowsはブラウザを開きダウンロードしてインストールする。

まあまあ面倒である。

Windowsは総じてクソ?

Windowsは初心者向けなんです!
同じ知識で初心者から上級者まで使うことができる最強のOSなんです。

というわけで、今回はWindowsのターミナルを活用するための方法を紹介していきます。

ターミナルを考えなおす

MacやLinux使いがコマンドプロンプトを使うと、
まずls -> dirのようにコマンドが違うところでつまずきます。

まずはコマンドプロンプトを捨てましょう。
コマンドプロンプトは下位互換のために残された、いわばIEのような存在です。

まずは、Win+Rでcmdと打つのをやめるところから始めましょう。

ここで実施するのは2つです。

Windows Terminalの導入

Microsoftの新しい端末アプリであるWindows Terminalを導入します。

Windows Terminal - Microsoft Store

以降は、Win + R から「wt」と打ち込んでWindows Terminalを使うように心がけましょう。

PowerShellの最新を使う

コマンドプロンプトではなくPowerShellを使いましょう。
PowerShellを使うだけでもQoLが爆上がりします。
特に、新しいバージョンを使うことでさらによくなります。
(なぜかInsiderPreviewだと標準のPowerShellが文字化けしたので入れなおした)

PowerShell 7.x

なお、PowerShell7は後述の方法でもインストールできるので、後回しでもOKです。

これだけでも見た目がだいぶ変わります。これでマカーにダサいとは言われない。はず。
lsもcdもclearも使えます。これだけで価値あるんじゃね?

Windows TerminalはWSLのターミナルもまとめて表示できますので、複数のWSLを使っていたりする場合はさらに便利になります。

Homebrewの代替を探す

マカーにマウントとられる最大のポイント、それがHomebrew。

Windowsにはそんなものない?

???「あるよ」

Windows Package Manager(通称winget)というものが公開されました。

winget-cli

これで完璧である。

Windows Terminalから、以下の感じで実行できれば準備完了。

> winget -v
v0.2.2521 プレビュー

wingetの使い方

検索

> winget search <パッケージ名>

例えば、.NET Coreは以下のように検索できる。
4系は多分ライセンスの問題もあるのか入っていない模様

> winget search dotnet
名前                        ID                                バージョン                 一致
-------------------------------------------------------------------------------------------------
.NET Core                 Microsoft.dotnet                  3.1.402               Moniker: dotnet
.NET Core Preview         Microsoft.dotnetPreview           5.0.100-rc.2.20479.15 Command: dotnet
reko                      uxmal.reko                        0.9.1.0               Tag: dotnet
Unity Hub                 UnityTechnologies.UnityHub        2.4.0.0               Tag: dotnet
Stride                    Stride.Stride                     5.0.1                 Tag: dotnet
Smallbasic                Microsoft.SmallBasic              1.2                   Tag: dotnet
Ironpython 2              Microsoft.Ironpython2             2.7.10                Tag: dotnet
.NET Core Runtime         Microsoft.dotnetRuntime           3.1.8.29220           Tag: dotnet
.Net Framework            Microsoft.dotNetFramework         4.8                   Tag: dotnet
Jchem .NET api            ChemAxon.jchemdotnetapi           20.19.0               Tag: dotnet
Powershell Preview (msix) microsoft.powershell-preview-msix 7.0.2                 Tag: dotnet

名前かIDを入力することで、そのパッケージをコマンドからインストールできる。

.NET Coreは名前にスペースが入っているので、IDを使う方法しか見つからなかった。

> winget install microsoft.dotnet

なお、wingetがあれば PowerShell7も入れられるようなので、以下のコマンドでも幸せになれたみたい。

> winget install microsoft.powershell-preview-msix

入れておきたいアプリたち

必要に応じて足していきますが、ひとまず思いついたものを列挙。

> winget install git
> winget install Microsoft.VisualStudioCode
> winget install slack
> winget install 7zip
> winget install docker

git for Windowsは改行コードの問題があるので、

Windowsのみしか使わなければ特に考えなくてもいいとは思いますが、以下のほうが確実みたいです。

> git config --global core.autocrlf input

インストール済みのパッケージ一覧と削除

なんと、内部的にはインストーラのダウンロードと実行をしているようなので、
アンインストールは既存の方法でしかできない模様。
そこばかりは我慢するしかないかな・・・

v1.0.11451の時点でアンインストールコマンドが実装されています。

インストール済みの一覧取得

winget list

アンインストール

winget uninstall <アプリ名>

Vimの導入

次に大事なのがvimです。
これがないとターミナルとは言えないですよね。

先駆者 がいらっしゃったので、それに倣って進めていきます。

Emacs使いの皆様向けの手順はあるようですが、ガチ勢はおとなしくWSL使ったほうがよげですね。

インストール

wingetでさくっとインストールします。

> winget install vim

しかし、このままではvimはつかえません。(パス通ってないので)

> vim
vim : 用語 'vim' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを
確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。
発生場所 行:1 文字:1
+ vim
+ ~~~
    + CategoryInfo          : ObjectNotFound: (vim:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

ps1の実行権限変更

PowerShellファイルの実行は標準で無効化されているので、
さくっと変更をしてしまいます。
(InsiderPreviewとかははじめから使えるぽい)

> set-executionpolicy remotesigned
> get-executionpolicy
RemoteSigned

RemoteSignedと出ていればOK。

プロファイルを確認

> $profile
C:\Users\XXXXXXXX\OneDrive\ドキュメント\PowerShell\Microsoft.PowerShell_profile.ps1

なぜOneDriveなのかは不明だが(たぶん連携したせい)、
ひとまずそこにあるそうなのでファイルをいじる。

エイリアスを設定することで、powershellからvimが使えるようになります。

Microsoft.PowerShell_profile.ps1
set-alias vi 'C:\Program Files\Vim\vim82\vim.exe'
set-alias vim 'C:\Program Files\Vim\vim82\vim.exe'

さいごに、書き込んだprofileを反映します。(sourceコマンドと同等)

> . $profile

設定が終わったら、以下のコマンドを打ちこんで動くことを確認しましょう。

> vim $profile

うまくいきました。あとは:q!で終了しましょう。

su / sudo

windowsでターミナルを使う際に、いつも面倒なのが管理者権限で実行。

あそこまでとは言わないけど、簡単に管理者で実行したい。

というわけで、この神記事を参考に作業開始。

powershell7 previewはエイリアスがpwshなので、
それに合わせた版を使用します。

> cd
> git clone -b feature/wt-pwsh7 https://github.com/hikaruright/sudo.git

その後、以下を環境変数に追加。

(コマンドでやると変なことになったので、PowerShellがPreviewのうちは、GUIで操作したほうがよさそう)

%USERPROFILE%\sudo

この状態でWindows Terminalを起動し、suと打つと管理者権限でwindows terminal(+PowerShell7)が新しく起動します。
sudoを使えばGUIを管理者権限下で実行することも可能。これで怖いものはない。

さいごに

まだまだ発展途上とはいえ、Windowsのターミナルでもやれることは増えてきています。

Windowsが嫌いな人も、Docker使うときにコマンドプロンプトを使う程度の方も、
Windowsでターミナルを使いこなしてドヤッてはいかがでしょうか。