概要
オンラインミーティングが多数入っていると、会議と会議の間の切り替えが忙しくなったり、作業に集中していて「あ!忘れてた!」となって急いでカレンダーを開いたり、みたいなことが多々あるので、ボタン一発で次の会議を開けるようにしたいと思いました。
前提
- Mac
- 会議予定は Google カレンダーに登録されている
- 会議は Google Meet か Zoom (統一してくれ)
- ボタンは Stream Deck(じゃなくてもいい)
やりかた
1. Google カレンダーと Mac のカレンダーを同期させる
まずは Mac 上にカレンダーの予定を持ってこなくてはいけないので、Google カレンダーと連携します。
2. Mac のショートカット機能を使う
ショートカットキー1発で予定の中のリンクにアクセスしたいです。何らかのツールを使えばもっと簡単にできそうですが、会社のPCなので利用できるツールに制限があります。そこで Mac にデフォルトで入っているショートカット機能を使います。
これがめちゃくちゃ癖のある機能で、最終的に以下のような超複雑なワークフローになりました。ほぼプログラムです。
やっていること
-
入力の受け取り
- これはホットキー一発でこのショートカットを呼び出すようにしているだけです
-
カレンダー予定の検索
- 以下の「すべて」の条件を満たすカレンダーの予定を最大20件検索します。
- 開始日:が「今日である」
- カレンダー:が「tomohiro.sakai@...」と等しい
-
自分の状況:が「不参加」と等しくない(参加または未定の予定)
- ここで「参加」にしているものだけ拾いたいと思ったが、「自分の状況」=「参加」の条件にすると「自分が作った予定」はこれに含まれないため、逆転させた条件にしている。
- 検索結果は、開始日が「古い順(時間が早い順)」に並び替える
- 以下の「すべて」の条件を満たすカレンダーの予定を最大20件検索します。
-
各予定に対する繰り返し処理
- 取得したカレンダーの予定それぞれについて、以下の処理を順番にループ実行します。
-
時間の判定
- 「現在の時刻」と予定の「開始日」の間の時間を「分」単位で取得します。
- 「日付間の時間」が -10 より大きい場合(※開始10分前以降、または既に開始している予定である場合)に、以下の処理へ進みます。
-
テキスト情報の結合とURLの正規表現抽出
- 予定の「位置情報」と「メモ」を「改行」で結合します。この後の処理でURLを取得するため単一のテキストにしたいというわけです。
- 結合したテキストの中から、正規表現を用いて Google Meet(
https://meet.google.com/...)または Zoom(https://*.zoom.us/...)の会議URLに一致する部分を検索します。
-
URLの抽出と実行
- 一致したURLのリストから「最初の項目(1件目)」を取得します。
-
「テキスト(抽出したURL)」に任意の値が存在する場合、以下の処理を行います。
- 抽出されたURL(リストからの項目)をブラウザで開きます。
- URLを開いた直後に 「このショートカットを停止」 を実行し、ワークフロー全体を終了します(複数の会議を同時に開かないためのストッパー)。
-
終了処理
- 条件に合致しない場合(時間外、またはURLが見つからない場合)は、次の予定のループへと移ります。
ハマりポイント
- 直近の予定1件だけ取れればシンプルな実装で済むが、カレンダーの絞り込みで「終了日」「が次より前」=「現在日付」にすると、時間では日付だけで判定されてしまい、今日の予定が全て過去のものと判定されてしまう。なのでやむを得ず全件予定をとってきてループしてif文で終了判定している
- 自分が作った予定は「参加」状態になっていない
- Google Meet の URL は「メモ」に入っている
- ちなみに Zoom の URL は「位置情報」に入っている(というか入れている人が多い)
ショートカット機能自体の癖の強さと、Google カレンダーと連携したときのややこしさが合わさって、非常に難しかったです。
3. stream deck のボタンに割り当てる
先ほどのショートカットにホットキーを割り当てておき、stream deck の中の1つのボタンに割り当てます。
ボタン1発で次の会議に飛べるようになりました!

