ターミナル(黒画面)は好きですか?
賛否両論あるかと思いますが、
ターミナル(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が文字化けしたので入れなおした)
なお、PowerShell7は後述の方法でもインストールできるので、後回しでもOKです。
これだけでも見た目がだいぶ変わります。これでマカーにダサいとは言われない。はず。
lsもcdもclearも使えます。これだけで価値あるんじゃね?
Windows TerminalはWSLのターミナルもまとめて表示できますので、複数のWSLを使っていたりする場合はさらに便利になります。
Homebrewの代替を探す
マカーにマウントとられる最大のポイント、それがHomebrew。
Windowsにはそんなものない?
???「あるよ」
Windows Package Manager(通称winget)というものが公開されました。
これで完璧である。
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 <アプリ名>
サイレントインストール
インストール時にGUIが出てうざい場合には、-h
オプション
winget <アプリ名> -h
MS Storeの対応によるソース選択
ストアアプリからのインストールに対応したことで、次のようなエラーが出る場合があります。
> winget install microsoft.powershell
複数のパッケージが入力条件に一致しました。入力内容を修正してください。
名前 ID ソース
-----------------------------------------------
Microsoft Envision 9NBLGGH5PB0S msstore
PowerShell Microsoft.PowerShell winget
その場合は、次のように明確にインストールのソースを指定すると良いです。
> winget install microsoft.powershell -h -s winget
-s
を引数ととることで、 winget
かmsstore
を明示的に選択できます。
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が使えるようになります。
set-alias vi 'C:\Program Files\Vim\vim90\vim.exe'
set-alias vim 'C:\Program Files\Vim\vim90\vim.exe'
※インストールするvimによってパスが変わりますので注意しましょう!
さいごに、書き込んだprofileを反映します。(sourceコマンドと同等)
> . $profile
設定が終わったら、以下のコマンドを打ちこんで動くことを確認しましょう。
> vim $profile
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でターミナルを使いこなしてドヤッてはいかがでしょうか。