Keyboard Maestroの「Macro Debugger」で複雑なマクロのデバッグを行う方法

Keyboard Maestroのマクロが複雑になるほど、想定通りの挙動にならないときに「どこでうまくいっていないのか」「何が原因なのか」が分からなくなります。
そんなときのために、Keyboard Maestroにはデバッグ機能が用意されています。
私自身いままでデバッグ機能を使わずに何となくでやってきましたが、原因の切り分けや複雑なマクロ作りをラクにするためにも、使い方やどんなことができるか理解しておいた方がいいなと思いました。
そこで、今回はKeyboard Maestroのデバッグ機能についてまとめます。
Macro Debugger
Macro Debuggerの起動
デバッグは「Macro Debugger」というウインドウを開いて行います。
起動方法は2種類あります。
- メニューバーから起動する方法
- アクションを使って起動する方法
まず、メニューバーのKeyboard Maestroアイコンから[Start Debugging]を選択すると、Macro Debuggerが開きます。

もしくはアクションから起動する方法もあります。
[Debugger]カテゴリに[Debugger Start]があるので、それを実行して開けます。

Macro Debuggerは下記のような表示になっていて、左上には「Pause New Macros(マクロを一次停止させる)」チェックボックスと、右上には変数の表示・非表示を切り替えるボタンがあります。

Macro Debuggerでアクションを順番に実行
Macro Debuggerが表示された状態でマクロを発火させると、実行したアクションが表示されます。
しかし、アクションが一瞬だけ表示されてすぐ消えてしまいます。
その場合は左上にある「Pause New Macros」にチェックを入れることで、マクロを一気に実行せずにアクションを1つずつ止めてデバッグできます。
試しに「Pause New Macros」にチェックを入れた状態で、下記の「Google Chromeで開いているURLを指定プロファイルに切り替えて開き直すマクロ」を実行してみました。

すると、Macro Debuggerに実行したマクロ名と1つ目のアクションである「Set Variable “URL” to Text “%ChromeURL%”」が表示されました。

そしてアクションの表示の左にツールボックスのような表示があります。
これらのボタンをクリックして、停止したアクションが次にどう実行していくのか選んで操作していきます。
アイコンしか表示されていないので分かりにくいですが、全部で下記5種類です。

- Continue:続行(次のブレークポイントまで進める)
- Pause:一時停止
- Step Over:ネストしたアクションをまとめて進めて次のアクションで一時停止
- Step In To:ネストしたアクションの中に入って一時停止
- Step Out Of:「Step In To」で入ったアクションから外に出るまで進めて次のアクションで一時停止
これらを活用してアクションをステップ実行し、挙動を確認していきます。
ちなみに右側にある「鉛筆」アイコンをクリックするとKeyboard Maestroのエディタが開き、「×」アイコンをクリックすると実行中のマクロがキャンセルされます。
Step 〇〇系の挙動を理解する
Continue(続行)とPause(一時停止)は分かると思いますが、Step 〇〇系が理解しにくいと思います。
これらはネスト(階層化)したアクションの中までステップ実行するかどうかが変わってきます。
例として、下記の「Group」アクションで「Display text」をネストしたマクロを用意しました。

「Step Over」を実行すると、アクションが1つずつ順番に実行されますが、「Group」内のアクションはまとめて実行されます。

もし「Group」まで来たタイミングで「Step In To」を使うと、Group内の最初のアクションに入って一時停止します。
ネストされたアクションまで細かく見るか、そこはスキップして上位のアクションだけPauseしながら見て回るかを使い分けられます。
そして「Step Out Of」は、すでにGroup内などのネストしたアクションでPauseしている状態で使います。
現在の階層にある残りのアクションを実行し、その階層を抜けたところでPauseします。

ちなみに「Execute Macro」アクションを使って別マクロを実行している場合も同様で、「Step In To」を使うと別マクロ内のアクションを1つずつ実行できます。
変数の表示設定
Macro Debuggerの右上にある「x」のボタンをクリックすると、変数の表示・非表示を切り替えられます。
どちらが表示状態か分かりにくいですが、色が濃いグレーになっていれば変数が表示されます。
変数を代入したあとに「変数名 = 値」の形式でMacro Debuggerに表示されるようになります。

変数の値が意図通りになっているか確認できるので、こちらはオンにしておいた方が良さそうです。
ブレークポイントを設定する
「Pause New Macros」にチェックを入れて1つずつアクションを見ていってもいいですが、それだと長いマクロの場合に面倒です。
そこで活用するのが「ブレークポイント(Breakpoint)」です。
設定したい箇所にアクションを追加しておくことで、その位置でマクロを止められます(長いマクロでブレークポイントを活かしたいなら、Macro Debuggerの「Pause New Macros」は外しておいた方が分かりやすいです)。
「Debugger Breakpoint」のアクションは3種類ありますが、基本的には「Debugger Breakpoint This Macro」を使うことになります。

「Continue」を押せばブレークポイントの位置まで一気に進み、そこから細かく見たい場合は「Step Over」や「Step In To」でステップ実行していきます。
ステップ実行の注意点
Macro Debuggerを使えばアクションをステップ実行できて、なにが起こっているのかを把握するのには非常に便利です。
しかしステップ実行はアクション間に遅延が入るため、マウスクリックやUI操作を含むマクロは通常実行時と挙動が変わることがあります。
例えば、ボタンをクリックしてからメニューが表示されるまでにタイムラグがある場合、ステップ実行では問題なく動くのに通常実行では失敗する可能性があります。
ステップ実行だと問題ないのに普通に実行するとうまくいかない場合、遅延の差を疑って「Pause」アクションを追加するなどしてみてください。
Debugger関連のアクション一覧
基本的にデバッグ関連のアクションは「Debugger Breakpoint This Macro」を使って、それ以外はあまり使う機会がなさそうですが、念のためDebuggerカテゴリのアクションを整理しておきます。
| アクション | 内容 |
|---|---|
| Debugger Start | Macro Debuggerを起動する |
| Debugger Finish | Macro Debuggerを終了する |
| Debugger Toggle | Macro Debuggerの起動・終了を切り替える |
| Debugger New Macros Paused | 新しく実行するマクロを一時停止した状態で開始する |
| Debugger New Macros Run | 新しく実行するマクロを停止させずそのまま実行する |
| Debugger Breakpoint This Macro | 現在のマクロを一時停止 |
| Debugger Breakpoint All Other Macros | 他のすべてのマクロを一時停止 |
| Debugger Breakpoint All Macros | すべてのマクロを一時停止 |
| Debugger Step Over Other Macros | 一時停止中の他のマクロをStep Overで1つ進める |
| Debugger Step Into Other Macros | 一時停止中の他のマクロをStep Intoで1つ進める |
| Debugger Step Out Other Macros | 一時停止中の他のマクロをStep Outで抜けるまで進める |
| Debugger Continue This Macro | 現在のマクロの実行を再開する |
| Debugger Continue All Macros | 一時停止中のすべてのマクロの実行を再開する |
デバッグを便利にするために、Macro Debuggerの起動やContinueなどの操作にショートカットキーを割り当てたい場合に使えそうです。
「All Macros」や「Other Macros」系は、マクロの実行中に別のマクロがトリガーされて干渉しているケースなどで使います。
その他のデバッグ方法
変数の監視(Value Inspector)
変数の値が原因でマクロがうまく動かないことも多いです。
Value Inspectorを使うと、変数の値をリアルタイムで確認できます。
Keyboard Maestroエディタを開いてメニューバーの[Window]→[Value Inspector]から開けます。
ウインドウ左下にある「+」ボタンから監視対象の変数を追加し、あとはマクロの実行で値が変わるたびにリアルタイムで反映されます。

Macro Debuggerを使う場合は変数表示をオンにしておけば問題ないので、わざわざこちらも使う必要はないのかもしれませんが、複数の変数を常に表示して監視したいときに便利です。
Display Textアクションで変数を表示する
無理矢理な方法ですが、「Display Text」アクションを使うと変数の値をポップアップで表示できます。
Value Inspectorを開くのが面倒なときなど、とりあえず変数の値を表示したいときにこの方法を使うときがあります。
| 表示方法 | 内容 |
|---|---|
| Display Text In a Window | テキストをOKボタン付きのウインドウに表示 |
| Display Text Briefly | 通知として一時的に表示(数秒で消える) |
| Display Text Large | テキストを画面中央に大きく表示 |
私の場合は「Display Text In a Window」をよく使っています。
OKを押すまでマクロが一時停止してくれるので、値をゆっくり確認できます。
ログファイルを確認する
マクロが原因不明で止まる場合は、ログファイルを確認すると詳細なエラー内容が確認できます。
メニューバーの[Help]→[Open Logs Folder]からログフォルダを開けます。~/Library/Logs/Keyboard Maestro/Engine.logにアクションの失敗やエラーの詳細がタイムスタンプ付きで記録されています。
また、「Log」アクションをマクロに追加すれば、メッセージをログファイルに書き込むこともできます。変数の値をログに記録しておけば、あとから実行の流れを振り返ることもできます。
正直ここまでする必要があるほど複雑なマクロを作ったことがありませんが、AppleScriptやシェルスクリプトを多用する場合などに役立つかもしれません。
まとめ
Keyboard Maestroのマクロは便利な反面、複雑になると原因の切り分けが大変です。
デバッグの流れとしては、まずMacro Debuggerでステップ実行して処理の流れを追い、怪しい箇所周辺の変数の値を重点的に確認していきます。
シンプルなマクロなら不要ですが、複雑なことをする方は覚えておくと役に立つかもしれません。

連絡先.appを活用して他人のメールアドレスなどの情報を管理する方法
macOS Mojaveに移行したタイミングでPathFinder8にバージョンアップしました
Gmailでとりあえず最初にしておくと便利な設定
アクティビティモニタで「kernel_task」の暴走を落ち着かせるためには、CPU温度を下げる必要がある
Dashの環境設定やスニペットのバックアップ・同期方法
PC作業をする上でのちょっとした小技 #1日1Tips – 2019年6月
Alfredで特定のフォルダ内だけを検索するWorkflowを作成する方法
AlfredでFigmaのチーム・プロジェクト・ファイルを素早くの検索ができる「Alfred Figma Workflow」
SNS・ウェブサービスへの保存系Chrome拡張機能
macOS Mojaveのスクリーンショット機能についてまとめる
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Obsidianで整理した知識をAnkiで定着させる方法
Figma × Keyboard Maestroでどこまで効率化できる?
マウス操作の完成度が高いウインドウリサイズアプリ「Magnet」
Macで複数ディスプレイを使っている場合に便利な設定集
AppCleanerでMacアプリを関連ファイルごと完全に削除する
操作に没頭できる!Firefox版 Arcのようなブラウザ「Zen Browser」
chezmoi(シェモア)で始めるdotfiles管理
GitHubの通知を見逃さない!通知に特化したアプリ「Gitify」
Keyboard Maestroの変数基礎
Neovimを使い始める最初の一歩として便利な「LazyVim」