はじめに
最近ようやく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\bin
C:\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でのターミナル環境に困っている方がいれば,参考にしてもらえると幸いです.