エクスプローラーに
「ここでWindows Terminalを起動」を登録してみる
Windows Terminalは、UWPアプリケーションだが、「アプリ実行エイリアス」という機能でwt.exeという起動コマンドファイルを持つ。wt.exeは、ユーザーフォルダーの下となる
%userprofile%¥AppData¥Local¥Microsoft¥WindowsApps¥wt.exe
にあるが、サイズゼロで実体はここにはない。
Windowsは、UWPをスタートメニューやタスクバーなどから起動することができるが、アプリ実行エイリアスは、アプリ自身が登録した実行ファイル名を使う。URLによる起動と似たところがあるが、従来のWin32アプリをUWP置き換えたとき、従来通りの方法で起動するための方法だ。ただし、このアプリ実行エイリアスは開発時に組み込む機能であり、どのUWPアプリでも利用できるというわけではない。また、開発者が任意に名前を付けるものであるため、場合によっては、他のアプリと衝突する可能性もある。このため、「設定」→「アプリ」→「アプリ実行エイリアス」でアプリごとにオンオフすることが可能だ。
ユーザープロファイル以下にあるということは、ユーザーごとに起動パスが異なるということを意味する。このため、レジストリに登録するときにはちょっと面倒になる。というのは、レジストリ値の文字列型(REG_SZ)は、%userprofile%といった環境変数を自動では展開してくれないからだ。このときには、展開可能文字列型(REG_EXPAND_SZ)を使う必要がある。
エクスプローラーの右クリックメニューへの登録は、レジストリキーの既定値(名前がなくキー作成時に自動的に作られるレジストリ値)で行う必要があるのだが、レジストリエディターは、既定値を文字列型でしか作成できない。このため、レジストリの登録をregコマンドを使ってコマンドラインからする必要がある。
もちろん簡易な方法として、どうせ自分しか使わないのだから、wt.exeのフルパスを指定してしまうという方法もある。この方法でよければ、レジストリエディタを使って、通常のエクスプローラー右クリックメニューの登録のように
HKEY_CLASSES_ROOT¥Directory¥Background¥shell¥
にWindows Terminal用のキーを適当に作り、その下にcommandキーを置いて既定値でコマンドラインを指定してやればよい。
たとえば、Windows Terminal用にWTキーを作ったら以下のようなレジストリ登録をすればよい。ただ、ちょっと「負けた」感がある。
キー:HKEY_CLASSES_ROOT¥Directory¥Background¥shell¥WT¥command 名前:既定値
種類:文字列値
データ:C:¥USERS¥自分のユーザー名¥AppData¥Local¥Microsoft¥WindowsApps¥wt.exe new-tab -p "cmd" -d "%V."
もし、データの部分を「%userprofile%¥AppData¥Local¥Microsoft¥WindowsApps¥wt.exe new-tab -p "cmd" -d "%V." 」と汎用的に指定したいなら、以下のコマンドラインを使ってregコマンドから登録する。
reg add HKCR¥Directory¥Background¥shell¥WT3¥command /ve /t REG_EXPAND_SZ /d ^"%^userprofile^%¥AppData¥Local¥Microsoft¥WindowsApps¥wt.exe new-tab -p ¥"cmd¥" -d ¥"%V.¥"^"
かなり「おまじない」っぽいが、コマンドラインからだと%userprofile%が解釈され変換されてしまうため、このように^と¥でエスケープする必要があるからだ。コマンドラインでの解釈で、^によるエスケープが消える。%の部分にも^があるため、コマンドラインは%userprofile%を解釈せず、^だけを除去する。これをregコマンドが受け取るが、これをWindowsのAPIを介してレジストリに登録するとき、Windowsが-dオプション以下で¥のエスケープを処理する。
おそらく疑問に思うのは、"%V."のピリオドだろう。%Vは、エクスプローラーがこのレジストリ値を使ってコマンドを起動するときにカレントディレクトリに置き換えるもの。ダブルクオートでくくってあるのはスペースなどを含むパスが渡される可能性があるからだ。
しかし、何も付けない"%V"のままだとcmd.exeがエラーになる。%Vで渡されるフォルダ名の最後に¥があり、これがCMD.EXEに渡るときに後ろのダブルクオートを喰ってしまい、ダブルクオートが閉じていない状態となりエラーになると推測している。"."を付けることで意味を変えずに末尾を¥以外にできる(パス指定でのピリオドは現在のディレクトリを表す)。
★
Windows Terminalは、今年4月の完成を目標としており、機能の実装という点ではかなり最終版に近くなってきた。コマンドラインが実装されたことで、スタートメニューやタスクバーへの登録も便利になり、たとえば、CMDとPowerShellあるいはBashを使い分けるのも簡単になった。wt.exeに対するショートカットを作り、引数にプロファイルを指定することでさまざまなシェルを起動できるようになる。
たとえば、Visual Studioには、コマンドラインを使った開発用の環境設定をするバッチファイルが付属する。これを起動しないと、開発ツールへのパスや環境変数による設定が行われない。Visual Studioに付属のバッチファイルでは、conhost.exeによる従来のコンソールウィンドウが起動してしまうが、wt.exeへのショートカットを使えば、Windows Terminal内でこれを起動し、コンソールベースのエディタなども同時に起動しておける。コマンドラインを使うユーザーには、「朗報」といえるだろう。
なお、冒頭で紹介したようにWindows Terminalはまだプレビュー版の段階にある。このため、仕様どおりでないことや挙動に不安定な部分もある。これらを意識し、ご利用はご自身のリスクでお願いしたい。
この連載の記事
-
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 -
第449回
PC
WSLはプレビュー版でGUIでの設定が加わった! リリース2.3.xの新機能を見る - この連載の一覧へ