🔌

リモートワークでDiscordからの抜け忘れを防ぐため両方を起動すると通知を出す

2024/04/24に公開

概要

私の会社では、リモートワークでのコミュニケーションに際して複数のチャットツールを利用しています。
特に開発系のメンバーは以下の目的でツールを使い分けています。

  • Google Meet: 特定の時間に開催される、または非開発系メンバーとのミーティング用
  • Discord: 常時ボイスチャットにログインして、任意タイミングでの質問や雑談に答えられるようにする用

課題

しかしミーティングによってツールを切り替える際、 マイクを切り忘れて片方(特にDiscord)からの抜け忘れが発生し、音声が筒抜けになってしまうことがあります。
Discordに残ったメンバーがその場で教えてくれることもあれば、メンバーがDeafenにしてしまい、戻ってきてから逆に声をかけられないということも。

ベタープラクティスとしては「そもそもマイク切り替えよりも安全なアプリケーションのシャットダウンをするべき」とも言われています。
しかしそれでも、頻繁にミーティングがあると忘れてしまうのは同じなのです💧

これをどうにかシステム的に解決したいと思いました。

前提

  • DiscordはMacのデスクトップアプリを利用
  • Google MeetはVivaldi(Google Chromeも同)のPWAアプリを利用

したがって、 Macのプロセス上で両アプリケーションの起動状態を知ることが可能な状態でした。

解決策

完成図

  1. 特定のアプリケーション(ここではDiscordとGoogle Meet)が起動しているかをチェックしてステータスを返す関数を定義
  2. watch コマンドでそれを監視
  3. 2つ以上のアプリケーションが起動していたらApple Scriptで通知と音を出す

詳細

まず適当な場所に以下のようなスクリプトを設置します。
ここでは ~/Desktop/exclusive_voice_chat.sh とします。

#!/bin/zsh

# DiscordとSafari(Meet)を同時に起動しない
function exclusiveVoiceChat() {
  # 起動している指定のアプリケーションのプロセスを数える
  app_count=$(ps x | grep -E "(\/Applications\/Discord\.app\/Contents\/MacOS\/Discord|Google\sMeet\.app)" | wc -l)
  if [ $app_count -gt "1" ]; then
    osascript -e 'display notification "DiscordとMeetが同時に起動しています" with title "チャットアプリ" subtitle "排他的に起動して下さい" sound name "Bottle"'
    return 1
  else
    return 0
  fi
}

exclusiveVoiceChat

grep の表現を変更/追加すればZoomやTeamsなどのアプリケーション起動も監視することが可能です 👀

続いて watch コマンドを使って exclusiveVoiceChat を監視します。

$ watch -g ~/Desktop/exclusive_voice_chat.sh

こうすると指定のアプリケーションが複数立ち上がった場合に通知の表示と音を鳴らしてくれます。
注意点としては

  • watch はデフォルト2秒おきの監視のため、片方を落とさない限り2秒おきに通知が鳴り続けます。間隔を開けたい場合は -n 5 などのオプションで調整。
  • watch プロセスはバックグラウンドにはできないため、iTermやtmuxを使っている場合は別のウィンドウやセッションで起動しておきましょう。
  • なお通知の表示は、Macのシステム設定で許可しておく必要があります。アプリケーション個別の設定に加え、仕事モードなどでも通知の表示を許可するようリストにアプリケーション(この場合はスクリプトエディタ)を追加しておく必要があります。

アプリケーションごとの通知許可 仕事モードでの通知許可

まとめ

かなりアドホックな対策ですが、これでDiscordからの抜け忘れにすぐ気づくことができるでしょう。

情報漏洩や無関係な会話の垂れ流しによる音害の防止に便利なマイクロハックでした 😉

Discussion