初めに
こんにちは、本書をご覧になっていただき、ありがとうございます。
今回はCLIには必須なターミナルの設定です。
対象の読者
以下のような方々のお役にたてれば幸いです。
- ソフトウェア開発、特に製造や評価などに関わる人
- Windows用のアプリやツールをコマンドから使いたい人
- Windows用のアプリやツールをスクリプト化して処理したい人
# ターミナル
Wikipedia(日本版)によると、ターミナルとは、「 端末とも呼ばれ、コンピュータへのデータ入出力に用いる電子式あるいは電気機械式のハードウェア。」となっており、それに関連して「端末エミュレータとは、 上記機器の動作をエミュレートするソフトウェア」となっている。
昔のコンピュータ(IBMのホストシステムなど)は演算を実行する本体とは別に、入出力や中継・変換などの機器を接続して使用する構成になっていた。もともとは「紙カードリーダー」や「紙テープリーダ」、「テレタイプ」などの機械式装置であったが、やがてキーボードとモニターを備えた装置が主流となり、扱える情報も英数文字だけから、制御文字、グラフィックへと進歩した。現在では専用装置は使わず、ソフトウェアとしてのターミナルを仮想的に使っている。
要は、入出力を行う機能がターミナルであり、特にコマンドラインで主に文字の入出力を行うものを、そう呼んでいる。cmd.exeやpowershellで表示されるものもターミナルの1種であり、Linux系OSでは、Xterm, GNOME Terminal などがターミナルである。Linux系では、ターミナルそのものと、ターミナル内で動くとシェルとは分離されていて、組合わせて使うことができる。Windowsの素の状態では、ターミナルとシェルは一体化しており、細かい設定がやりずらい。例えば扱う言語ごとにパスを変えたりとか、背景色や文字色、プロンプトなどを変えたりとか、フォントフェースやサイズを切り替えて使うとか、、、特にパスの設定や環境変数の指定がbashなどに比べるとやりにくい。複数開いた画面をタブでまとめて表示することもできない。この点を補助してくれるのが高機能ターミナルであり、Windows Terminal やCmderなどがある。
ターミナルのいろいろ
cmd.exe
MS-DOSの時代から継承されたMicrosoftのCLI環境、「COMMAND.COM」の後継。COMMAND.COMは、16ビットアプリであり、Windows-NTからは、cmd.exeと共存となり、64ビット版Windowsでは削除されて、「cmd.exe」だけとなった。
powershell
コマンドレットを利用してWindowsの管理をスクリプトベースで実行できる環境。Coreの出現でマルチ言語の扱いが改善され、マルチプラットフォームで動作するようになった。
mintty
Cygwin,MSYSでのターミナル。(画像はCygwinから起動したもの)
Cmder
タブによるマルチ画面を扱え、bash的機能も内蔵した高機能ターミナル。(画像では2つ開いている)
RLogin
SSHなどのリモートログイン用ターミナル。PuTTYやTeraTermなどと類似。
WindowsTerminal
今回インストールするターミナル。(画像では、PowerShell7, cmd.exe, PowerShell, AzureCloudShellを開いている)
WindowsTerminal
Wikipedia(日本版)では、「マイクロソフトによるWindows 10向けの端末エミュレータ。MITライセンスの下で公開、コマンドプロンプト、PowerShell、WSL及びSSHに対応。」となっている。オープンソースで開発されており、リポジトリはGitHub1にある。
Microsoft Store の説明:
Windows ターミナルは、コマンド プロンプト、PowerShell、WSL などのコマンドライン ツールおよびシェルのユーザーのための、高速、効率的、強力な、生産性を向上させる最新のターミナル アプリケーションです。主な機能には、複数のタブ、ウィンドウ、Unicode および UTF-8 文字のサポート、GPU アクセラレータによるテキスト レンダリング エンジン、カスタマイズできるテーマ、スタイル、構成が含まれます。
特徴(詳細は省略)
- タブで複数画面の切替ができるインタフェース
- ANSIエスケープシーケンス(英語版)のサポート:文字や背景の色付けなど
- UTF-8及びUTF-16のサポート (CJK統合漢字及び絵文字を含む)
- テーマ(英語版)のサポート
- JSONによる設定ファイル
インストールの準備
1) PowerShell 7 を起動(PowerShell,cmd.exeでもよい)
2) Bucketの更新
scoop update
3) パッケージ検索
scoopで「terminal」を含むパッケージを検索。見つからない場合は対応するBucketを追加する。
scoop search terminal
現時点(2021年睦月)では、「windows-terminal (1.5.10271.0)」が「extra」Bucketで見つかった。
その後、2021年弥生には1.6および1.7プレビューが公開された。2
2022年葉月では、1.14および1.15プレビューがBucketに存在している。
インストール
4) Scoopにてインストール
scoop install windows-terminal
ショートカットとして「Windows Terminal.exe」が、shim3として「WindowsTerminal」「wt」が作られていることがわかる。
5) 確認
コマンドが有効になっているかを確認してみる。
- PowerShell系
get-command WindowsTerminal
get-command wt
- cmd.exe
where WindowsTerminal
where wt
scoopの管理下にインストールされていることがわかる。
6) WindowsTerminalの起動
wt
Windows-Terminalの1.14系パッケージでは、起動時にエラーになることがある。その場合は、章末の補足を参考にしていただきたい。
複数のシェルを起動
7) タブ横の下向きアングルをクリック
8) コマンドプロンプトを選択する
9) WindowsPowerShellを選択する
設定
設定を選択する
settings.jsonがデフォルトのシステムエディタで開かれる。
プロファイル
複数のシェルがメニューに載っていたが、これもjsonで定義されていて、自分で追加することもできる。以下に設定の一部を載せておくが、全体設定(default)ではFont指定を、個別設定(list[{},{},,])ではstartingDirectory指定を、それぞれ追加している。
なお、Fontは「scoop install hack-font」で入れたもの。
"defaults": // 共通シェル設定
{
"fontFace": "Hack",
"fontSize": 14
},
"list":
[
{
// Make changes here to the powershell.exe profile.
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"name": "Windows PowerShell",
"commandline": "powershell.exe",
"startingDirectory" : "c:\\home",
"hidden": false
},
{
// Make changes here to the cmd.exe profile.
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
"name": "コマンド プロンプト",
"commandline": "cmd.exe",
"startingDirectory" : "c:\\home",
"hidden": false
},
{
"guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}",
"hidden": false,
"name": "PowerShell",
"startingDirectory" : "c:\\home",
"source": "Windows.Terminal.PowershellCore"
},
{
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
"hidden": false,
"name": "Azure Cloud Shell",
"startingDirectory" : "c:\\home",
"source": "Windows.Terminal.Azure"
}
]
タスクパーにピン留め
詳細設定などは省略
他にいろいろな記事が出ているので、参照して試してみるとよい。
例えば、【Windows Terminal Tips】4とか、【Windows Terminal でも Cmder を使う方法】5とか。
親記事:WSL2とVSCで作るWindowsでのDocker内開発環境(2021年睦月)
補足: トラブル治療室
xxx.dll が見つからないため、コードの実行を続行できません。 (2022-08-14)
wtの実行時にエラーダイアログが表示され、Terminalが起動しない。
前提
発生条件:
- アプリなどが入っていない素の状態に近いWindows10
- Scoopを入れ、sudo,pwsh,をインストール
- Windows-Terminalをインストール
現象
起動時にエラーダイアログが表示され、以下の2つのDLLが見つからないと報告される。
- VCRUNTIME140.dll
- MSVCP140.dll
原因
「alacritty」というパッケージがscoop install で同じ現象を発生させていた。これは、DLLが必須の依存関係になっていないためであり、独自にインストールすればよいとのこと。
alacritty depends on MSVCP140.dll and VCRUNTIME140.dll.
治療
理由が分かれば対処は簡単で、必要なランタイムをインストールすればよい。ただし、「VCRUNTIME」「MSVPC」で検索してもscoopのパッケージには見つからない。上記の記事にあるように「vcredist」で検索する必要がある。
PS C:\Users\cintake> scoop search vcredist
Results from local buckets...
Name Version Source Binaries
---- ------- ------ --------
vcredist-aio 0.61.0 extras
vcredist 14.32.31332.0 extras
vcredist2005 8.0.61001 extras
vcredist2008 9.0.30729.6161 extras
vcredist2010 10.0.40219.473 extras
vcredist2012 11.0.61030 extras
vcredist2013 12.0.40664 extras
vcredist2015 14.0.24215.1 extras
vcredist2017 14.16.27027.1 extras
vcredist2019 14.28.29914.0 extras
vcredist2022 14.32.31332.0 extras
14系での最新版が2022なので、これをインストールする。(無印のvcredistも同じバージョン)
PS C:\Users\cintake> scoop install vcredist2022
Updating Scoop...
Updating 'extras' bucket...
. . . . .
Scoop was updated successfully!
Installing 'vcredist2022' (14.32.31332.0) [64bit] from extras bucket
VC_redist.x64.exe (24.1 MB) [=================================================================================] 100%
Checking hash of VC_redist.x64.exe ... ok.
VC_redist.x86.exe (13.1 MB) [=================================================================================] 100%
Checking hash of VC_redist.x86.exe ... ok.
Linking ~\scoop\apps\vcredist2022\current => ~\scoop\apps\vcredist2022\14.32.31332.0
Running post_install script...
'vcredist2022' (14.32.31332.0) was installed successfully!
Notes
-----
You can now remove this installer with 'scoop uninstall vcredist2022'
scoopはインストーラをインストールして実行するだけなので、パッケージは不要となる。
PS C:\Users\cintake> scoop uninstall vcredist2022
Uninstalling 'vcredist2022' (14.32.31332.0).
Unlinking ~\scoop\apps\vcredist2022\current
'vcredist2022' was uninstalled.
結果と予防
Windows-Terminalがきちんと起動するようになった。Bucketの開発で依存関係を分かりやすくしてもらいたいものだ。
-
Windows Store にて公開されている。1.7からは多くの設定変更をGUIで行えるようになった。json直接編集もできる。 ↩
-
Shimとは部品の隙間を埋める「埋め木」や「調整板」のことから、ソフトウェアの隙間を埋めるスクリプトやアプリのことを指している。 ↩