皆さんこんにちは。
出社用に Moonlander をもう1枚買ったのですが、思ってたよりかさばってしまうため、持ち運びしやすい分割格子配列キーボードを探している shinespark(yuzu) です。
今日はリモート会議中に家族がうっかり部屋に入ってきてしまうことを防ぐためのアプリをご紹介します。
こんなことってありませんか?
- リモート会議中に、家族が部屋に入ってきて、画面に映り込みそうになる
- リモート会議中に、子どもが帰宅して、帰宅直後のテンションの高い声がマイクに入ってしまう
- 「会議中は気をつけて」と伝えてはいるものの、いつも骨伝導イヤホンを付けっぱなし。家族からは会議中かどうかが分からない(シュレディンガーの猫状態)
いわゆる ON AIRライト が欲しいパターンです。
これまで私自身は困っていなかったのですが、最近社外の方とのミーティングも増えてきたため、自分でもライトを設置したいなと思うようになりました。
要件
自分なりの要件を整理してみました。
- バッテリー管理コストが低い
- 自席からワイヤレスで更新できる
- かさばらない
- 点灯と実態のズレ(点いているけど会議中ではない・点いていないけど会議中)が極力少ない
順にみていきます。
バッテリー管理コストが低い
まずは、市販のON AIRライトの購入を検討したのですが、USB給電式や乾電池式が主でした。
ドア付近に設置するユースケースを考えると、USB給電式はケーブルが煩雑になるのでできる限り避けたいです。
とはいっても、乾電池式やモバイルバッテリーを接続して使うタイプは、電池交換や充電の手間がかかるので、運用コストが悩みどころです。
知らず知らずのうちにバッテリーが切れてた! というパターンも避けたいため、できる限りバッテリー管理が不要なものが望ましいです。
自席からワイヤレスで更新できる
また、リモート会議中であるかどうかは、都度ドア付近に移動して切り替えたりすることは手間なので、ワイヤレスで更新できることが望ましいです。
リモート会議がはじまってから、「あ、点けてなかった」と、ドア付近まで行ってライトを点けることがないようにしたいです。
かさばらない
かさばらないという点も重要です。
自室のドア付近、高所などに設置することを考えると、落下や破損のリスクがあるため、できる限り小さいものが望ましいです。
DIYで設置スペースを頑張って作るという手もありますが、現在進行形で毎日会議が行われているため、できればDIYせずなるはやで設置完了したいです。
点灯と実態のズレが極力少ない
そして、最も重要なのは、点灯と実態のズレが極力少ないことです。
実態との齟齬があると、結局このシステムの信頼性が損なわれます。
うっかりON AIRライトが点きっぱなしになってたことで、晩ごはんに呼ばれないなどのインシデントが発生するリスクもあります。
方針: Philips Hueを使うことにした
E-Inkの値札 をドアに貼ることも検討しました。
が、調べた限りでは、スマホアプリ経由でのタッチで更新するタイプが多く、PC経由でワイヤレスで更新可能なものは個人向けで入手することが難しそう or 高価なため、断念しました。
悩んだ結果、Philips Hueを使うことにしました。
ゲーム用に既にPhilips Hueのライトを複数持っており、Hue Bridge経由でPCやゲーム機からワイヤレスでライトの色を変えることができます。
- Philips Hueのライトが自宅照明として設置済み
- バッテリー管理不要
- かさばらない
- API経由でライトを操作可能
- ワイヤレスで更新可能
- 点灯と実態のズレが少ない
おお、良さそうです。
ということで、Philips Hueを使ったON AIRライトをmacOSアプリとして開発することにしました。
Huemdall: カメラ使用を検知してPhilips Hueを光らせるmacOSアプリ
できたものがこちらです。
Huemdallは、Macのカメラ利用を検知して、Philips Hueのライトを「ON AIR色」(デフォルトは赤)に変えるメニューバー常駐アプリです。
カメラの利用が終わると、ライトを元の状態に復元します。
「カメラを使っているかどうか」だけを見ているので、Zoom, Google Meet, Teams など、アプリを問わず動作します。会議アプリごとの連携設定は一切不要です。
名前の由来は Hue(ヒュー) + Heimdall(ヘイムダル)。
Heimdallは、北欧神話の光の神で、アースガルズの見張り番らしいです。ピッタリ!1
インストール
Releases から最新の Huemdall-<version>.zip をダウンロードして、Huemdall.app をアプリケーションフォルダに入れるだけです。
使い方
使い方はカンタンです。
アプリを起動して、メニューバーのアイコンから「セットアップ...」を開き、
「ブリッジを検索...」からHue Bridgeへ接続します。


Hue Bridgeとのペアリングが完了したら、ON AIR時に色を変えたいライトを選んで、ON AIRの色を選ぶだけです。
(シーンで設定することもできます。)
後はカメラを使い始めると、自動でON AIR色に変わります。
カメラを使い終わると、ライトは元の状態に戻ります。
任意のキーボードショートカットからON AIRにすることもできます。
もちろん、メニューバーのアイコンから手動でON AIRにすることもできます。
ON AIR中かどうかでメニューバーのアプリアイコンが変化するので、自席から離れずON/OFF制御することができます。
その他の実例
Hue ライトはいくつか持っているので、実際に試してみました。
しばらくは室内照明の1つの色を変化させる設定で運用してみる予定です。
カメラの検知技術やアーキテクチャ
ここからは技術の話です。
カメラの使用中を検知する仕組み
カメラの使用中の検知には、macOSのCoreMediaIOのデバイスプロパティ kCMIODevicePropertyDeviceIsRunningSomewhere を使っています。
これは いずれかのプロセスがこのデバイスを使用中か をBoolで返してくれるプロパティです。
デバイスが使用中かどうかしか返さないため、カメラ許可は不要で、実際の映像フレームには一切触れることはありません。
private func isRunningSomewhere(_ device: CMIOObjectID) -> Bool {
var address = Self.propertyAddress(
CMIOObjectPropertySelector(kCMIODevicePropertyDeviceIsRunningSomewhere))
guard CMIOObjectHasProperty(device, &address) else { return false }
var value: UInt32 = 0
// ...CMIOObjectGetPropertyData で value にUInt32を読むだけ
return value != 0
}
監視はポーリングではなく、CMIOObjectAddPropertyListenerBlock によるイベント駆動です。変化した瞬間だけ通知を受け取るため、CPU負荷は少ないです。
外付けのWebカメラなどもあるため、すべてのカメラデバイスのORを取って「いずれかがrunning」ならONと判定しています。
見送り: マイクの使用中の検知
ちなみに「マイク検知」も検討しましたが、見送りました。
リモート会議中に突然家族に入って来られると困るパターンとしては、社外との会議、面談、面接などが考えられます。
私の主観ですが、カメラとマイクの使用中では、カメラの使用中の方が入って来て困るパターンと連動しています。
また、マイクの検知を考慮した場合には、以下のような考慮も必要になります。
- OS側ではなく、マイクデバイス側のミュート機能の考慮
- 音声入力に使われるパターン
- カメラとマイクのどちらを優先してON AIRと判断するか
考慮すべきポイントが格段に増えてしまうため、今回は見送ることとしました。
Claude Code Fable 5 で 5日 で開発
今回はちょうどFable 5が使えるタイミングだったので、大いに活用しました。
Proプランを契約しているのですが、システム自体はシンプルだったため、特に使用制限に引っかかることなく完成まで漕ぎ着けられました。
Hue API v2 の話も書きたいのですが、長くなってきたので別の機会にします。
〆
ということで、本記事ではカメラ使用を検知してPhilips Hueを光らせるmacOSアプリ shinespark/huemdall - GitHub と、macOSでのカメラの検知方法の仕組みについて紹介させていただきました。
Philips Hue はゲームとの相性がよいので、ゲームの没入感を高めたり、スケジュール機能を利用して保育園のお迎えの時間に照明の色を変えてリマインドしたり2など、便利に使っています。
ちなみに、Hue は一般的なE26口金の照明であればそのまま使えるので、興味があればぜひ買って試してみてください。
Huemdallを使ってみて何かあれば、IssueやPRを頂けると嬉しいです。
それでは良いリモートワークライフを!




