Windows TerminalでGoogle日本語入力の問題と多数のコンソールを同時表示

2023/11/2追記

 本件ですが、ちょっとリリースが見つからなかったのですが、

GoogleJapaneseInput-2.29.5268.100+24.11.9
Windows Terminal 1.18.2822.0

の組み合わせて、Windows Terminal起動時に入力モードが_Aになる現象が解決しているようです。
 追記終わり。

 会社のほうでもぼちぼちWindows 11を使い始めています。
 アイコンやメニューのデザインなどは、なれの問題かと思うのですが、どうにもできない問題が2点ほどありました。ひとつはWindows Terminalで問題が発生し、別の問題はWindows Terminalで解決した話題です。
 まずはPowerShellコマンドプロンプトWindows Terminalアプリに集約されたのですが、Google日本語入力を使っていると、Windows Terminal起動時にIMEの半角英数字入力、_Aの状態になる問題です。普通にIMEオフでWindows Terminalを起動するとIMEオフのままが通常動作と思うのですが、なぜか強制的にIMEオンかつ半角入力となり、コマンド入力時にIMEの変換確定が必要になります。
 ネットを調べてみますと、すでに問題は以下のように把握されていますが、根本原因はMicrosoft側とのことで、現状、どうしようもないみたいです。

  • Windows Terminal 起動時の 入力方法 に関する不具合

support.google.com
 Windows Terminalのソースは公開されていますので自力でなんとかできる方はどうぞなんですが、自分はそこまでの手間はかけたくないのでGoogle日本語入力の使用はあきらめてアンインストールしてWindows付属のMicrosoft IMEに戻しました。変換効率はGoogleのほうが自分に合っているんですけどね。そうそう、Google日本語入力は開発版を使用していました。

 次にこれは自分的には大問題の、Windows 11においてウィンドウを左右に並べて表示、機能がなくなったことです。
 Windows 10ならばタスクバーを右クリックしてウィンドウを左右に並べて表示を選択して今オープンしているアプリをずらっとデスクトップ一面にタイル状に並べることができました。これ自分はどういうときに使うかというと、管理PCから管理している多数のWindowsクライアントにPsExecを使ってリモートアクセスして作業バッチファイルなどを実行するんですが、以下のようなPowerShellスクリプトを使っていっせいに対象PCの数だけPowerShellを起動して同時に行っていました。

$REMOTECMD = "cmd.exe /c \\srv\share\work.bat"
$PCLIST = @("\\PC01", "\\PC02", "\\PC03")
$PSEXE = "C:\PSTools\PsExec64.exe"
$PSEXEOP = "-u ADMIN -p PASSWORD -i"

foreach ($c in $PCLIST) {
    $arg = "-NoExit -Command ${PSEXE} ${c} ${PSEXEOP} ${REMOTECMD}"
    Start-Process powershell.exe -WindowStyle Normal -ArgumentList $arg
}

 このスクリプトで$REMOTECMDのコマンドが台数分PowerShellのコンソールが開いて実行されます。そしてWindows 10では、ウィンドウを左右に並べて表示を実行して画面いっぱいに並べたコンソール画面で経過を観察できていたわけです。
 Windows 11にで同じように上記スクリプトを実行したところ、10と同様に台数分のWindows Terminalがそれぞれ重なった状態で起動して、ここから簡単に全部を見渡す方法がないです。かろうじてタスクビューをクリックすると実行中のアプリが一覧されるのですが、縮小表示のためコンソールの内容を雰囲気でしか確認できません。
 このWindows 11でウィンドウを左右に並べて表示をするにはどうすればと調べると、OSの流儀的にスナップレイアウトという機能を使えということみたいです。しかしこのスナップレイアウト、デスクトップに分割して並べられるウィンドウの数が最大4つに制限されるんですよね。こちらは10とか20ぐらいのウィンドウをタイル状に並べたいので、この機能は使いものになりません。
 あと付随した問題ですが、それぞれのStart-Processで立ち上がるWindows Terminalの起動が遅いです。各ループで数秒待たされて、ほんとにマルチタスクのOSで実行しているのかと疑問になるぐらいの遅さ。
 英語でWindows 11のShow windows side by side、で調べてみると以下のページがありました。
answers.microsoft.com
 やはり複数のコンソールを並べる需要に対してですが、回答はここでもSnap Layoutsを使えと。いやいや新しい仕組みを導入するのはいいけど、以前できていたことをできなくするって意味がわからないよ。
 なんかそういう要望を実現するサードパーティのソフトがありそうと思ったのですが、なるべくならWindows標準搭載の機能でなんとかしたいです。そこでふと上記のWindows Terminalにタブ機能があって、さらに画面を分割できるペイン機能があることに気づきました。複数のWindows Terminalを起動するのではなく、ひとつのWindows Terminalに必要なだけペインを作れば目的は達せられます。
 ペインの作成なんですが、分割でしかペインを作成できません。ペインの作成を普通に繰り返すと1/2のペイン、次の作成でその半分、つまり1/4のサイズ、さらに1/8と入れ子的に小さいペインの作成になります。ほしいのはすべてのペインが同じサイズに分割されたWindows Terminalです。さらにこれをWindows Terminalの外の環境、PowerShellスクリプトから操作する必要があります。すなわち外からのコマンドでWindows Terminalのフォーカスを移動して分割、そしてコマンドの実行ができるかどうか。
 Windows Terminalのドキュメントおよびコマンドラインからwt --helpで表示されるヘルプを参考になんとか以下のスクリプトで希望に近いものができました。

$REMOTECMD = "cmd.exe /c \\srv\share\work.bat"
$PCLIST = @("\\PC01", "\\PC02", "\\PC03")
$PSEXE = "C:\PSTools\PsExec64.exe"
$PSEXEOP = "-u ADMIN -p PASSWORD -i"
$WTID = [string] (Get-Date -UFormat "%s")

$psexecmd = "${PSEXE} $($PCLIST[0]) ${PSEXEOP} ${REMOTECMD}"
wt.exe --window $WTID --maximized cmd.exe /c $psexecmd

for ($i = 1; $i -lt $PCLIST.Length; $i++) {
    Start-Sleep -Milliseconds 200
    wt.exe --window $WTID move-focus nextInOrder

    Start-Sleep -Milliseconds 200
    $psexecmd = "${PSEXE} $($PCLIST[$i]) ${PSEXEOP} ${REMOTECMD}"
    wt.exe --window $WTID split-pane cmd.exe /c $psexecmd
}

 まずは最初のwt.exeの実行で一意のIDを指定してコマンドを実行。同時に--maximizedオプションで最大化して起動しています。
 次に残りリスト向けにforループに入って同じIDを指定してmove-focusコマンドで、フォーカスをnextInOrder、すなわち次のペインに移動しています。ここが今回の重要なところで、ドキュメントにはフォーカスを移動する方向、up、down、left、rightの説明しかなく、最初はこの方向によるフォーカス移動で分割しようと考えていました。そのためペインの数が増えると、分割するペインへ移動する方向と回数を考えて、とても難しいアルゴリズムになります。これはめんどうだぞと挫折しかけた中、ほかにmove-focusの指定方法でなにかいい方法はないのかと

wt.exe move-focus --help

で見られるヘルプ文書を見ると、移動方向だけでなく、topやpreviousなどペインの番号順に指定も可能とのこと。この中からnextInOrderによりフォーカスの当たっている次のペインに移動して、split-paneでペイン分割とコマンドの実行を繰り返しで思うような分割にできそう。nextInOrderの順番ですが、作成した順ではなくて今ある場所からの配置順になっているようです。ともかくこの方法できれいにWindows Terminalを分割して各ペインでコマンドが実行できるようになりました。下図のような感じですね。

 ただしうちの環境ではwt.exeを実行する前にちょっとだけsleepを取らないと正しく実行されませんでした。sleepなしではフォーカスが移動しなかったり、思っていたのと違う分割したりします。
 また実行指示したコマンドが終了すると自動的にペインが閉じられて、それは望む動作でないので、Windows Terminalの詳細設定のプロファイルの終了動作を自動的に閉じないに設定しましたけど、これはこれで副作用がありますね。$REMOTECMDで実行するバッチファイルの最後にpauseを追加するなど対策が必要です。あるいは終了時に閉じないプロファイルをWindows Terminalに追加しておいて、起動時にこのプロファイルを使うようにするとか。
 あと分割されたペインの順番が画面でとびとびになるので、並びが$PCLISTの順番と違って見づらいのは仕様です。
 ちなみにうちの環境のWindows Terminalのバージョンは1.16.10262.0となっています。将来の仕様変更があるかもしれませんが、とりあえずこれで問題解決となりました。