はじめに
最近ようやくWindows Terminalを導入してターミナル回りの環境を整理したのでその内容をまとめます.
メインとなるWindows上のターミナル環境はCmderを使っています.Cmder(Clink)を使うとコマンドプロンプトに補完や履歴機能,カラーリングが対応されたターミナル環境を使うことができて便利です.またMSYS2/MinGWでPOSIXのコマンドやGCCなどを使えるようにしています.
今回はこれにghqやpecoといったツールを利用して,さらに快適な環境になるようにまとめてみました.

またWindows Terminalでは,他にも様々な環境をタブページやペイン分割で動かすことができます.下の画像ではCmderとPowerShellとWSL2(Debian)とDcokerコンテナ(Ubuntu)が表示されています.

Windows Terminalのセットアップ
Windows TerminalはMicrosoftがOSSで開発している新しいターミナルアプリ(端末エミュレータ)です.
Windows Terminalのインストール
Windows TerminalはMicrosoft Storeに公開されています.通常のWindows Terminalの他にPreview版もありますが,今回は通常版をインストールしています.

インストール後にWindows Terminalを起動すると,初期状態ではPowerShellあたりが起動すると思います.実行ファイル名はwt.exeになります.

Windows Terminalの簡単な操作
マウス操作なら画面上部のボタンからタブページの追加を行うことができます.この後の手順で,ここでCmderが選択できるように設定します.

またWindows Terminalはコマンドパレットを使うことができます.こちらを使うとキーボード操作でやれることが増えて便利です.コマンドパレットはCtrl+Shift+Pで表示することができます.コマンドの一覧が表示されますがキーボード入力することでインクリメンタルサーチで項目を絞り込んでいくことができます.

新しいタブページの作成New Tabやペイン分割の作成Split Paneと,タブページの移動Nex Tabやペイン分割の移動Move focus xxxなどの操作に慣れると使いやすくなるともいます.またこれらはショートカットキーが割り当てられているものも多いので,よく使う操作はそちらで操作するとよりよいです.ショートカットキーもコマンドパレットから確認できます.
Windows Terminalのカスタマイズ
Windows TerminalはJSON形式の設定ファイルsettings.jsonを編集することでカスタマイズが可能です.例えば上記で説明したショートカットキーなども独自に設定することができます.詳しくは下記のドキュメントを参照してください.settings.jsonはCtrl+,で表示されます.
https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/global-settings
細かな設定は実際に使いながら必要に応じてカスタマイズしていけばよいかと思いますが,まずはじめに配色を好みのものに変更してみるのもよいです.デフォルトでも数パターン用意されていて,上記のドキュメントを参考に簡単に変更できます.
また下記のサイトからより多くのテーマを取得することができるのでおすすめです.お気に入りのテーマが見つかったらGet themeボタンを押すと配色の設定がクリップボードにコピーされます.その内容をsettings.jsonの中のschemesに追加することでそのテーマが使用できます.
https://windowsterminalthemes.dev
下図はGit BushにHybridというテーマを設定している例です.このように動かす環境ごとにテーマを変えると冒頭のイメージのように見た目で分かりやすくなります.

Cmderのセットアップ
CmderはConEmu,CLink,Git for Windowsなどを組み合わせて作られたターミナル環境になります.コマンドプロンプトにUNIXライクな機能が追加された感覚で使用することができます.また見た目もきれいでかっこいいです.
Cmderのインストール
Cmderは本家のサイトかGitHubのリリースページからダウンロードできます.ダウンロードしたzipを任意の場所に解凍します.
https://cmder.net
解凍したら中にあるCmder.exeを実行するとターミナルが立ち上がります.初回起動時には設定ファイルが数ファイル展開されます.
ただし今回はこれをこのまま使うのではなくWindows Terminalから起動して使えるように後ほど設定します.個人的にはコマンドパレットからの操作感でWindows Terminalのほうが好みでした.

Cmderの簡単な操作
基本的な操作は通常のコマンドプロンプトと同じように使用することができますが,入力の補完機能や履歴管理が強化されています.
コマンドの入力やcdなどでのパスの入力時にはTabキーで補完を行ってくれます.毎回すべてを入力するのではなく有効に補完機能を使うことで,ターミナル操作の効率が上がると思います.
またhistoryと入力すると,コマンド入力の履歴を確認することができます.

Ctrl+Rでコマンド履歴の検索reverse-i-searchを使用することもできます.

Cmderのカスタマイズ
Cmderの簡単なカスタマイズとして,プロンプトの変更とエイリアスの設定について紹介します.
プロンプトは初期状態でλが表示されます.ただ後述するVSCodeのターミナルでCmderを使用したときに,カーソルの位置がずれて表示されることがあります.プロンプトにマルチバイト文字が使用されていることが原因のようで,$などに変更しておくとこの問題が解消されます.
cmder\vendor\clink.luaの51行目あたりにlambdaという変数にプロンプトに使用する文字が定義されているので,ここを修正するとプロンプトの文字を変更することができます.
- local lambda = "λ"
+ local lambda = "$"
エイリアスの設定はcmder\config\user_aliases.cmdで行います.(このファイルは一度Cmderを起動しないと存在しません.)初期設定でいくつかのエイリアスが登録されているので,それらの記述を参考にしてエイリアスの設定を追加することができます.
Cmderではホームディレクトリに簡単に移動する方法がないので,cd~でホームディレクトリ(ユーザフォルダ)へ移動するエイリアスの指定を,例として紹介しておきます.
cd~=cd %HOMEPATH%
Windows TerminalでCmderを使用する設定
Windows TerminalとCmderのそれぞれの準備ができたので,次はWindows TerminalでCmderを動かすための設定を行います.
GUIDの発行
まずPowerShellを使ってGUIDを発行します.下記の例だとd4a9485e-29c1-490a-b668-6e0ed5eda2baがGUIDになります.
PS C:\> [guid]::NewGuid()
Guid
----
d4a9485e-29c1-490a-b668-6e0ed5eda2ba
Windows TerminalにCmderを追加
Windows TerminalでCmderを動かすための設定も前述しているsettings.jsonで行います.profilesの中のlistに次のようにCmderの設定を追加します.
"list": [
{
"guid": "{d4a9485e-29c1-490a-b668-6e0ed5eda2ba}",
"hidden": false,
"name": "Cmder",
"icon": "%USERPROFILE%\\cmder\\icons\\cmder.ico",
"startingDirectory": "%USERPROFILE%",
"commandline": "cmd.exe /k %USERPROFILE%\\cmder\\vendor\\init.bat",
"colorScheme": "Monokai Cmder"
}
]
guidには事前に発行していたものを{}で囲って記述します.
commandlineがメインの設定で,このように設定するとWindows TerminalでCmderのシェルを動かすことができます.
その他,iconを指定しておくとタブ表示などにアイコンが表示されます.startingDirectoryは起動時のディレクトリを指定します.colorSchemeも個別に指定しておくと動かしている環境が分かりやすくておすすめです.

また,settings.jsonの上のほうにdefaultProfileという項目があるので,ここにCmderのGUIDを指定しておくと,Windows Terminalを起動したときにデフォルトでCmderが起動するようになります.Cmderをメインに使っていく場合は指定しておくとよいです.
"defaultProfile": "{d4a9485e-29c1-490a-b668-6e0ed5eda2ba}"
ghqとpecoの導入
ghqとpecoを使ってGitのリポジトリに簡単に移動できるようにします.どちらもGo製のコマンドラインツールになります.
- ghqはGitリポジトリの管理を行ってくれるツールです.
- pecoは入力内容をインクリメンタルサーチでフィルタリングして選択できるツールです.
この二つを組み合わせて,Gitリポジトリに簡単に移動できる環境を用意します.
ghqとpecoのインストール
それぞれGitHubのリリースページから実行ファイルをダウンロードして,環境変数のPATHが通ったディレクトリに配置すると使えるようになります.Go製のツールなのでワンバイナリで動くのでお手軽です.
下記のように入力してバージョンが表示されればOKです.
$ ghq --version
ghq version 1.1.5 (rev:f5ac3e5)
$ peco --version
peco version v0.5.8 (built with go1.14.2)
リポジトリ管理するディレクトリの設定
ghqを使って管理されるディレクトリはデフォルトで%USERPROFILE%/ghqとなりますが,設定で変更することもできます.
下記のようにgit configで指定するとghq rootでパスが設定されたことが確認できます.
$ git config --global ghq.root /path/to/dev
$ ghq root
/path/to/dev
Gitリポジトリのクローン
ghqを使ってGitリポジトリをクローンします.クローンはどのディレクトリから実行してもghq rootに指定したディレクトリにクローンされます.またこの時にクローするURLに合わせたディレクトリ階層が自動的に作成されて,そこにクローンされます.
$ ghq get git@github.com:/path/to/repo.git # github.com/path/to/repoというディレクトリ階層が作成される
Gitリポジトリの一覧表示と移動
ghq list -pとすると,Gitリポジトリの一覧が絶対パスで表示されます.これとpecoを組み合わせてリポジトリを選択しcdに渡すことで簡単にGitリポジトリに移動することができます.
次のようなbatファイルを用意して,PATHの通ったディレクトリに配置するかCmderのエイリアスを使って呼び出しやすいようにしておくと便利です.
for /f "tokens=*" %%x in ('ghq list -p ^| peco') do (
cd %%x
break
)
このような感じに使うことができます.どこからでも簡単にGitリポジトリに移動できて便利です.

その他いろいろ
最後にここまでで紹介していないWindows Terminalの設定,pecoの別の活用法,VSCodeでCmderを使う方法,MSYS2/MinGWのセットアップ方法を紹介します.
Windows Terminalのその他の設定
フォントの設定に以下のようなものがあります.お好みで設定をするとよいです.
-
fontFace:フォント名 -
fontSize:フォントサイズ -
fontWeight:フォントの太さ
フォントはデフォルトではCascadia Monoが使われています.Microsoftがターミナルやプログラミング用テキストエディタでの使用を想定して開発したフォントです.Cascadia Codeの合字を外したものがCascadia Monoになります.
https://docs.microsoft.com/ja-jp/windows/terminal/cascadia-code
ウィンドウの背景を透過することもできます.こちらもお好みで設定をしてください.
-
useAcrylic:透過(true/false) -
acrylicOpacity:不透明度(0~1)
カーソルの形もお好みで指定できます.
-
cursorShape:"bar","vintage","underscore","filledBox","emptyBox"
このあたりの設定は動かす環境ごとにprofiles.listの中で個別に指定してもいいですが,defaultsの中で指定すると共通の設定内容を指定することができます.
"profiles": {
"defaults": {
"comment": "SETTINGS TO APPLY TO ALL PROFILES"
},
"list": [
{
"comment": "PROFILE OBJECTS"
}
]
}
また,実用性はあまりありませんがCRTディスプレイ風に文字を表示する機能もあります.気分転換にどうぞ.
-
experimental.retroTerminalEffect:レトロ表示(true/false)
pecoでコマンド履歴検索
pecoはghqとの組み合わせの他にも便利に使うことができます.ここではhistoryとの組み合わせを紹介します.historyの結果には先頭に番号が振ってあるのでsedでそれをはずしてからpecoに渡すようにしています.また逆順で表示するほうがよければtacを使用するとよいです.
set history=%CMDER_ROOT%/vendor/clink/clink history
for /f "tokens=*" %%x in ('call %history% ^| sed -e "s/^ *[0-9]\+ \+\(.\+\)$/\1/g" ^| tac ^| peco') do (
%%x
break
)
また,選択したコマンドを直接実行するのではなく,いったんクリップボードにコピーしたほうがよければ,次のようにするとよいです.
set history=%CMDER_ROOT%/vendor/clink/clink history
for /f "tokens=*" %%x in ('call %history% ^| sed -e "s/^ *[0-9]\+ \+\(.\+\)$/\1/g" ^| tac ^| peco') do (
set /P ="%%x"< nul | clip
break
)
VSCodeのターミナルでCmderを使う方法
CmderはVSCodeのターミナルでも使用することができます.VSCodeの設定で下記のように指定すると動きます.CMDER_ROOTにはCmderを配置したパスを指定します.
{
"terminal.integrated.shell.windows": "cmd.exe",
"terminal.integrated.env.windows": {
"CMDER_ROOT": "${env:HOMEPATH}\\cmder"
},
"terminal.integrated.shellArgs.windows": [
"/K",
"%CMDER_ROOT%\\vendor\\bin\\vscode_init.cmd"
]
}
このような感じにCmderのシェルをVSCodeのターミナルで動かすことができます.

MSYS2/MinGWのセットアップ
MSYS2/MinGWでPOSIXのコマンドやGCCなどの環境をインストールしておきます.MSYS2のインストーラを取得してインストールしてください.
https://www.msys2.org
MSYS2の環境を扱うには,同梱されているターミナルを使ってもいいですが,MSYS2のインストール場所を環境変数のPATHに追加するとCmderからでも扱うことができます.
C:\msys64\mingw64\binC:\msys64\usr\bin
PATHを設定するとpacman(パッケージマネージャ)を扱うことができます.pacmanを使って必要なパッケージをインストールします.
$ pacman -Syuu
$ pacman -S base-devel msys2-devel mingw-w64-x86_64-toolchain
例えばls,mv,cp,rm,cat,grepなどが使えるほかに,gcc,makeなどの開発用のコマンドも使えるようになります.pacman -Syuuでインストール済みのパッケージを一括で更新できるのでおすすめです.
おわりに
Windows TerminalとCmderとghqとpecoを使って,そこそこ快適なターミナル環境をWindowsでも作ることができたのではないかと思います.WSL2やDockerが普及してWindowsでもターミナルを使いたいシーンは増えてくると思います.Windwosでのターミナル環境に困っている方がいれば,参考にしてもらえると幸いです.
