Tauri と Pixoo-64 でオンラインミーティングのカメラの映り込みリスクを軽減する

こんにちは、リモートワークしてますか?私は週7家にいます。エンジニアの岡田です。

この記事はカンム Advent Calendar 2024の24日目です。1 23日目は teshiken さんの「成果を出しつづけるための行動として意識していること」でした。 adventar.org

さて、カンムはフルリモートを導入していまして2、自分はもうかれこれ4年ほどずっと家で仕事をしています。 ミーティングではカメラを ON にすることもままあるのですが、家族も家で仕事をしているので、お互いカメラへの映り込みに注意して生活しています。 ただ、お互いにミーティングの予定は何らかの形で共有しているものの、突発的なミーティングもあったりするので、つい意識せずにフラっと映り込んでしまいそうになることも稀によくある状態です。

…ということで、今回はこのフラっと映り込みリスクを軽減することを目指して、ちょっとした仕組みを作った話をしようと思います。

先人の知恵にのっかる

当然のごとく同じようなことを考えている方がいました。 yoshiori.hatenablog.com

とてもシンプルで良さそうだったので、この考え方にのっかって以下の方針とすることにします。

  • カメラの ON / OFF を検知する
  • カメラの ON / OFF に連動して何か表示する

ただ、記事内のカメラ ON / OFF 検知方針だと、自分の環境の MacBook でうまくいかなかったので、そこはまた以下の知見にのっかって回避することにしました。 ON / OFF のイベントログを監視するだけなので、現在の使用状況まではリアルタイムでわかりませんが、常駐監視する前提ならいったんはこれでも十分そうです3

stackoverflow.com

log stream --predicate '(eventMessage CONTAINS "AVCaptureSessionDidStartRunningNotification" || eventMessage CONTAINS "AVCaptureSessionDidStopRunningNotification")'

つくる

先人とまったく同じものでは面白みが薄いので、少しだけアプローチを変えてみます。

我が家にはピクセルアートフレームの Divoom Pixoo-64 がある4ので、これを活用することにします。 Pixoo-64 には API もあるのでちょうど良さそうです。

また自分以外の家族が使うことを想定して GUI を提供することにします。メニューバーに常駐するアプリだとそれっぽいですし。

そして、せっかくなので使ったことないものをってことで、今回は Tauri を使ってみることにします5。 ついでに初めての Rust 体験もできるので一石二鳥です。

v2.tauri.app

ということで、方針を以下のように定めることにします。

  • カメラの ON / OFF を検知する
  • カメラの ON / OFF に連動して Pixoo-64 にそれっぽい GIF を表示する
  • メニューバーに常駐するアプリとして提供する (Tauri で実装する)

そして、できあがりがこれです。 github.com

つかう

こんな感じで動きます6

カメラをONにすると海苔巻文鳥がON AIRに切り替わります

部屋に入った瞬間に目に飛び込んでくるので、疲れていてもカメラの存在に多少気付きやすくなったんじゃないでしょうか7

ドアをバーンしました

おわりに

久しぶりに個人でそれっぽいものを作った気がします。 家でいつも目にするもの、動きがダイレクトに返ってくるものはやっぱりいいですね。

Rust も今回完全に初めて触ったのですが、そこそこ楽しく開発することができました。 公式ドキュメントをろくに読まず、AIのひねり出すコードに質問しながら知識のつまみ食いをしつつ実装してしまったので、次はちゃんと公式ドキュメントを読んで Rust らしさを学んでからコードをリファクタしていこうと思います。

趣味プログラミングはいいですね。

おわり


  1. 完全に遅刻しました。やっちまいです。
  2. https://team.kanmu.co.jp/8de05f77ac8d487e8cf44f0e74da2c23
  3. 改めて調べてみると Objective-C 経由で検知する方法もありそうなので、objc2 クレートを使ってワンチャンもっと良い感じにできるかもしれません。というか最初から Swift で作っとけばよかった説まであります。
  4. 2台あります。購入数ヶ月で液晶に縦線が入ってしまい、新品交換 & 故障品返送不要となって手元に2台が残りました。故障品には縦線が入っているだけなので普通に使っています。
  5. 他の選択肢として Electron / React Native macOS / Swift でふつうのアプリ開発、もしくはワンチャンExpoもいけたりするかな…とか考えてはいたのですが、初めて度が一番大きいやつが Tauri (w/Rust) だったので、テンションが上がるか否かだけで選びました。
  6. 本当は「ワシじゃよ」な某博士が「カメラがオンじゃよ」と語りかけてくる感じの GIF を作りたかったのですが、諦めて Divoom コミュニティ内に公開されている ON AIR アニメーションを使いました。
  7. 実際は複数人で使用するとたぶんうまく動きません。カメラの ON / OFF イベントオンリーでのトリガーかつ状態の同期をしていないので、複数台で同時にカメラを使っていると、1人がカメラを OFF にすると残りの人がカメラ ON のままでも GIF が表示されなくなってしまいます。…が、めったにないのでいったん気にしないことにします。