Macを起動したのが平日か休日か判定して、起動するアプリを変えるKeyboard Maestroマクロの作り方

仕事のときはStationというチャットサービス統合アプリを使い、プライベートではStackというチャットサービス統合アプリを使っています。
それぞれのアプリで管理しているサービスは下記の通りです。
| アプリ | 主要管理サービス |
|---|---|
| Station | Slack・ChatWork・Skype |
| Stack | Twitter・Facebook Messenger・Todoist |
このように仕事で使うサービスとプライベートで使うサービスを、別アプリで管理しています。
こうすれば仕事をしているときはStationを起動しておけば、プライベートの通知を気にせずに済みます。
逆に、仕事が終わればStationを終了してStackを起動すれば、仕事用の通知は気にせずに済みます。
しかしMacにログインするたびに、StationもStackも両方起動してしまっては本末転倒です。
そこで、Keyboard Maestroを使って、Macを起動した曜日や時間に応じて起動するアプリを変えるマクロを作ってみました。
ログイン用のトリガー
Keyboard Maestroでログイン時に発火するマクロを作るときは「Login Trigger」を使います。

ログイン時の時間と曜日を判定する
次はアクションの作成ですが、考え方は「曜日と時間が指定したものと一致していたらStation、それ以外ならStackを起動させる」なので、その順にアクションを並べていきます。
ログインした時間と曜日の取得
まずは「Set Variable」アクションで「ログインした曜日」と「ログインした時間」を変数に入れます。

LoginDayOfWeek(ログインした曜日)%ICUDateTime%EEE%LoginTime(ログインした時間)%ICUDateTime%HH%これでログインした曜日とログインした時間が取得できました。
判別用の変数の初期化
次に取得した曜日と時間が、条件に一致するか判別するために、「checkDayOfWeek」と「checkTime」という名前の判別用の変数を作成し、中身を「false」にしておきます。

これで時間や曜日が条件に一致している場合は中身を「true」にします。
条件に合致する時間と曜日か判別
次にFor Eachアクションを使って、「Lines In Collection」で「Text」を設定します。
これは記述した行を、指定した変数にいれながらループしてくれるアクションです。
今回の場合は平日かどうか判別したいので、変数は「setDayOfWeek」で中身は「月〜金」を改行して入力します。

あとはIf Then Elseアクションで「LoginDayOfWeek」と「%Variable%setDayOfWeek%」がマッチするかどうか条件分岐をします。
そしてtrueのときは「checkDayOfWeek」の中身を「true」に変更します。
また、1度でも「true」になったら、それ以降はループを回す必要がないのでBreakアクションでループを終了させます。
同じことを「時間」の方でも行います。
アプリの起動
これで時間と曜日の判別は完了したので、最後にアプリの起動部分を作ります。
特に問題ないと思いますが、自分の場合はアプリ起動の前にPauseアクションで15秒ほど時間を空けています(遅延起動も兼ねて)。

If Then Elseアクションを使って「checkDayOfWeek」と「checkTime」の2つの変数がどちらも「true」の場合にActivate a Specific Applicationを使ってStationを起動させます。
それ以外の場合はStackを起動させればOK。
これで完成です。
まとめ
Login Triggerを使えば、Macを起動させるだけでマクロが発火するので面白いですよね。
今回はアプリ1つずつですが、複数アプリの起動もできますし、工夫次第でいろいろできそうです。
- アプリではなく特定サイトを開く(平日は勤怠管理のサイトを開く)
- 曜日ではなく日時で発火させる(毎月1日に目標を管理しているアプリを開く)
- 夜中に起動したら自動で明るさを暗くする

AlfredのWorkflowで新規ファイルを作成する方法
テーブルタグ一式をすばやく・ラクに入力するためのスニペットサンプル
Path Finder 8の一括名称変更機能を使って楽にファイル名を変更する
Jedit Ωの半角・全角変換機能を使って、全角と半角をすばやく変換する方法
「SimpleExtManager」でChrome拡張機能のオン・オフを素早く行う
AlfredでURLをBit.lyで短縮URLにするWorkflow「Bit.ly URL Shorten」
AlfredのCustom Web SearchにDeepL翻訳を追加する方法
Alfredのスニペット機能を便利に使いこなすための管理方法
メールとチャットを一元管理してワークスペースを整理する「Rambox」
1Passwordでパスワード以外に管理しておくと便利な情報
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
1つのノートアプリにすべて集約するのをやめた理由|2025年時点のノートアプリの使い分け
Notionログイン時の「マジックリンク」「ログインコード」をやめて普通のパスワードを使う
AlfredでNotion内の検索ができるようになるワークフロー「Notion Search」
Gitで1行しか変更していないはずのに全行変更した判定になってしまう
Macでアプリごとに音量を調節できるアプリ「Background Music」
Macのターミナルでパスワード付きのZIPファイルを作成する方法
MacBook Proでディスプレイのサイズ調整をして作業スペースを広げる
SteerMouseの「自動移動」機能で保存ダイアログが表示されたら自動でデフォルトボタンへカーソルを移動させる
iPhoneでタッチが一切効かなくなった場合に強制再起動する方法