Windows GitBash から GUI に通知を出す方法3選

Windows GitBash (Git SDK) を使って長めのバッチ作業をすることがあった。バッチ作業が終わった時に気付きを得たいので、Windows の GUI 上に通知を出したいと考えた。

今回は3つほど実現方法を見つけたので紹介する。

目次

標準搭載の msg.exe コマンド

Windows 10 Pro に標準搭載されている msg (C:\Windows\System32\msg.exe) というコマンドを使う方法。

コマンドプロンプトや PowerShell では次のようにコールすれば良い。

msg * "ココにメッセージ"

コマンドを実行すると、画面中央にアラート的なプロンプトウィンドウが表示される。「【ユーザ名】からのメッセージ 【日時】」というウィンドウタイトルで、「OK」ボタンのみのプロンプトだ。

時間がかかる処理を、同じく Windows 標準搭載の timeout コマンド (C:\Windows\System32\timeout.exe) で再現すると、こんな感じ。

@rem 3秒後に完了メッセージを出す
timeout /t 3 /nobreak && msg * "Finished"

第1引数の * 部分は、メッセージ送信先のユーザ名を指定するようだが、自分自身のユーザ名を指定するのも面倒なので、アスタリスクで済ませている。

コレを GitBash (Git SDK) で呼び出すには、次のようにする。Msys・Cygwin 系の Bash 環境から Windows コマンドを実行するには、cmd /c を使ってコマンドプロンプト上で起動させてやれば良いワケだ。

$ cmd /c 'msg * "ココにメッセージ"'

GitBash に標準搭載されている sleep コマンドを使って再現すると、こんな感じで使えるだろう。

$ type sleep
sleep は /usr/bin/sleep です

$ sleep 3 && cmd /c 'msg * "Finished"'

メッセージの表示形式を細かく指定することはできないが、Windows 標準搭載のコマンドであり、他に何もインストールせずとも使えるのがメリット。

BurntToast を使う

BurntToast という PowerShell 製のフリーソフトを使うと、Windows 10 でよく見る、画面右下に表示されるモダンな通知メッセージが表示できる。

最近の PowerShell に標準搭載されている Install-Module というコマンドレットを使うと、PowerShell Gallery からモジュールとしてインストールできる。Linux でいう aptdnf コマンド的な感じかな。

# 以下のようにインストールする
PS> Install-Module -Name BurntToast
続行するには NuGet プロバイダーが必要です
PowerShellGet で NuGet ベースのリポジトリを操作するには、'2.8.5.201' 以降のバージョンの NuGet プロバイダーが必要です。
NuGet プロバイダーは 'C:\Program Files\PackageManagement\ProviderAssemblies' または 'C:\Users\【ユーザ名】\AppData\Local\PackageManagement\ProviderAssemblies' に配置する必要があります。
'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force' を実行して NuGet プロバイダーをインストールすることもできます。
今すぐ PowerShellGet で NuGet プロバイダーをインストールしてインポートしますか?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): y

信頼されていないリポジトリ
信頼されていないリポジトリからモジュールをインストールしようとしています。
このリポジトリを信頼する場合は、Set-PSRepository コマンドレットを実行して、リポジトリの InstallationPolicy の値を変更してください。
'PSGallery' からモジュールをインストールしますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): y

# インストールできた。適当に通知してみる
PS> New-BurntToastNotification

# メッセージは以下のように指定できる
PS> New-BurntToastNotification -Text 'ココにメッセージ'

PowerShell 製のツールなので、GitBash から実行する際は cmd /cではなく powershell から起動してやると良い。

$ powershell 'New-BurntToastNotification -Text "ココにメッセージ"'

$ sleep 3 && powershell 'New-BurntToastNotification -Text "ココにメッセージ"'

オプションでアイコンやサウンドなども指定できる。PowerShell 標準の Install-Module コマンドレットから簡単にインストールできるのでよかろう。

Notifu を使う

Notifu という古くからあるツールを使う方法。

本稿執筆時点での最新版である v1.7.1 は以下からダウンロードできた。

Zip ファイルを解凍すると、notifu.exenotifu64.exe というファイルが出てくる。notifu64.exe の方が 64bit 版のようなので、このファイルを notifu.exe にリネームし、PATH の通っているところに配置する。

コマンドプロンプトで使う場合はこんな感じ。/m オプションでメッセージ本文を指定するのは必須。/d 5 が通知の表示秒数で、この時間が経過するか、バルーンを触って閉じるまでプロンプトが戻らないところが特徴。/i notifu.exe はバルーンに表示するアイコンの指定 (省略可)。

notifu /p "タイトル" /m "ココにメッセージ" /d 5 /i notifu.exe

Windows XP や Windows 7 時代はよく見かけた、タスクトレイに表示されるバルーンアイコンからフキダシの形で通知が表示される。コマンド実行後に %ERRORLEVEL% 変数を確認することで、通知をどのように扱ったのかが確認できる。

GitBash から実行する際は cmd /c を使えば良い。

$ sleep 3 && cmd /c 'notifu /m "ココにメッセージ" /d 3'

exe ファイルを自分で配置する原始的なフリーソフトで、少々手間。Windows XP 風のバルーン UI に愛着がなければわざわざ選ばなくても良いかも。w

以上・ついでに Sleep 系コマンドまとめ

他にも、Windows Vista あたりまでは標準搭載されていた net send コマンドを使って通知メッセージを表示する方法もあって、コレは自分も使った経験があるのだが、Vista 以降の OS では使えないらしく、Windows 10 Pro で試しても net send コマンドは存在しなかった。そこで代わりに見つけたのが msg.exe だった、というワケ。

GitBash から Windows コマンドを実行する際は cmd /c ないしは powershell で OK。ようやく覚えた。

ついでに、調査の中で「指定の秒数だけ待機するコマンド」を環境別に整理したので、以下に書いておく。いずれも「3秒待機する」例で記載している。

cmd> timeout /T 3 /NoBreak
PS> Start-Sleep 3
PS> sleep 3
$ sleep 3

以上~。色々試したけど、自分は画面中央に表示される msg が一番良いかなと思った。BurntToast は画面右下になってしまうのと、インストールが必要なので、そこまでせんでもええかな、という気分。