あしたのチーム Tech Blog

はたらくすべての人に「ワクワク」を届けるべく、日々奮闘するエンジニアの日常をお伝えします。

フットスイッチでリモートワークが少し快適になった話

もうすぐ発売される ELDEN RING が待ち遠しい @snaka です。 今回は連載企画とは全然別のリモートワークに関するガジェットネタです。

リモート会議におけるマイクミュートの切り替え問題

近頃ではリモート会議が当たり前の日常ですが、個人的にリモート会議で地味にストレスに感じる点が1つありました。

それは、マイクミュートの ON/OFF の切り替えでした。

f:id:snaka72:20220202090953p:plain
リモート会議では発言時以外マイクミュートが基本

リモート会議のマナーとしてよくあるのが、自分が発言しない間は基本マイクをミュートした状態で、発言するときだけミュートを解除するというものだと思います。

他の人が発言しているとき(このときマイクミュートしている)、ブラウザやエディタを開いてメモをとったり関連資料を参照してたりする最中に話を振られると...

  • まず Discord のウィンドウを探し *1
  • マイクミュートのボタンの位置を探し
  • ボタンにカーソルをあわせ
  • クリックする

そして、ミュートが解除されたのを確認して話し出す。という一連の操作が必要になります。

たったこれだけのことですが、話を振られてから発言するまでに数秒のタイムラグが発生します。相手が見えないという状況もあって話を振った方や参加者には僅かな反応の遅れが小さなストレスになったりすることがあります。

キーボードショートカットを使えばいいのでは? というのもありますが、アプリケーション毎に異なるショートカットを状況に応じて使い分けるというのも個人的には辛いものがあります。

f:id:snaka72:20220202090622p:plain

ショートカットがなかなか覚えられない...
(画像はイメージです)

フットスイッチというソリューション

あしたのチームのエンジニア組織では隔週くらいのペースで、「ビアバッシュ」と称して最近話題のIT系のニュースや気になる技術などについて(オンラインで)集まって話をしたりする会を開催しています。

ある日のビアバッシュで、キーボードやトラックボールなど入力装置がテーマの回があり、そこでフットスイッチの話題があがってきました。(以下の勝間和代さんのブログが話題に)

katsumakazuyo.hatenablog.com

私は当時、MacBook にで US 配列キーボードを使用する場合の日本語入力切り替え問題をいい感じに解決する方法を模索していた時期でもあり、フットスイッチを試してみようと以下の商品を購入してみたのでした。

www.edikun.co.jp

試してみた結果、日本語入力の切り替えという用途にはしっくりこないという結論になってしまいましたが、Discord のマイクミュートのON/OFFの切り替えに使ってみると、なかなかいい感じだということがわかりました。

設定してみた

とりあえず「いい感じ」になった私の設定を晒してみようと思います。

①フットスイッチの設定

まず、フットスイッチ側でペダルの1つに キーパッド Insert を割り当ててます。

f:id:snaka72:20220202100447p:plain
「エジクンフットスイッチ」の設定アプリの画面

キーパッド Insert とした理由は、後述の Karabiner-Elements でキーイベントを差し替えるときに、普通にキーボードで入力した時のイベントと明確に区別したいからです。

MacBook にはそもそもキーパッド(テンキー)というものが備わっていません。 そのため、 キーパッド Insert が押されたというイベントはフットスイッチ側からしか入力されない、ということが保証されます。 それによって、意図せずキーイベントが差し替わってしまって混乱することを避けることができます。

Karabiner-Elements

Karabiner-Elements は macOS 上でキーバインディング等をカスタマイズするための定番アプリケーションです。

karabiner-elements.pqrs.org

私の場合 Karabiner-Elements で、フットスイッチでのペダル入力 キーパッド Insert を一度マウスの button10 に割り当てています。 さらに、そこから「Discord がアクティブな場合」かつ「 button10 の長押し」したときに Discord のマイクミュート切り替えキーである cmd + shift + m を押したというイベントを発行する設定を行っています。

少し複雑なので図にします。

f:id:snaka72:20220204092138p:plain
エジクンフットスイッチと Karabiner-Elements のコンビネーション

ここで、「なぜ キーパッド Insertbutton10 に割り当て直す必要があるのだろう?」と疑問に思うかもしれません。 理由は、誤ってペダルを踏んでしまったときに意図せずアクティブなアプリケーションへ文字が入力される *2 のを避けるためです。 利用している入力デバイスに「実在しないボタン」に割り当てることで誤爆を回避しています。

キーパッド Insert をマウスの button10 に差し替える

以下は Karabiner-Elements の Simple modification でフットスイッチに割り当てたキー ( キーパッド Insert ) を マウスのボタン ( button10 ) に差し替える設定です。

f:id:snaka72:20220202104856p:plain
キーパッド Insertbutton10 に差し替える設定

ここでちょっとややこしいのですが、フットスイッチ側の設定で割り当てた キーパッド Insert ですが、 Karabiner-Elements 側ではそのキーを keypad_0 として認識します。 上の図で keypad_0 となっているものは キーパッド Insert と同じキーを指していますのでご注意ください。

③ Discord がアクティブな場合に button10 の長押し(n秒以上) を cmd + shift + m に差し替える

複雑な条件でキーマッピングを設定したいときは complex_modifications という設定を利用します。

Karabiner-Elements では ~/.config/karabiner/assets/complex_modifications に格納されている JSON を設定ファイルとして読み込むことができます。

私の場合、以下のファイルを discord.json という名前で格納しています。

{
  "title": "フットスイッチでミュートのOn/Offを切り替える",
  "rules": [
    {
      "description": "Discord 使用中: 左ペダル(英数)を押しっぱなしでマイクミュートをトグルする",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "pointing_button": "button10"
          },
          "to_if_alone": [
            {
              "pointing_button": "button10"
            }
          ],
          "to_if_held_down": [
            {
              "key_code": "m", 
              "modifiers": [ "left_command", "left_shift" ],
              "repeat": false
            }
          ],
          "conditions": [
            {
              "type": "frontmost_application_if",
              "bundle_identifiers": [ "^com\\.hnc\\.Discord$" ]
            }
          ]
        }
      ]
    }
  ]
}

上記のファイルを格納したあと Karabiner-Elements の Complex modifications タブで [Add rule] すると上で定義したルールが追加できます。

ルールを追加すると以下のようになると思います。

f:id:snaka72:20220202142115p:plain
Karabiner-Elemens - Complex modification

また、どのくらいの長さ押しっぱなしにする必要があるかという「しきい値」は Karabiner-Elements の設定パネルから設定できます。(デフォルトは 500 ミリ秒)

f:id:snaka72:20220203084910p:plain
Karabiner-Elements の設定パネル (しきい値の設定)

設定ファイルの記述方法については公式リファレンスなどを参考にすると良いでしょう。

karabiner-elements.pqrs.org

設定は以上です。

使ってみて感じたメリット/デメリット

メリット

この設定を導入したことで、マイクミュートからミュート解除して発言するまでの操作が

  • Discord のウィンドウを探しアクティブにする
  • フットスイッチのペダルを踏む

という感じで操作がシンプルになり導入前より数秒反応が速くなりました。

デメリット

フットスイッチなので定位置に着席している場合にしか使えないという点はあります。 たとえば、ワイヤレスヘッドセットで端末から離れた場所で会議に参加している場合には当然使えません。

とは言っても、そもそも発言するためにはアーム付きのマイクのある端末の前まで移動しなけばいけないセッティングというのもあるので、フットスイッチによるデメリットというものでは無い気はしてます。

さいごに

今回はリモートワークをちょっと便利にするガジェットを紹介してみました。

ここ2年ほどリモートワークを続けてみて感じているのは「仕事をするための環境」という点ではオフィスはとても恵まれていたんだな... ということです。

私のリモートワーク環境もまだまだ改善すべき点が多く「俺が考えた最強のリモートワーク環境」を目指し、これからも改善していけたらと考えています。

それではまた 👋

*1:拡張デスクトップでデスクトップを切り替えながら作業してたりもするのでウィンドウ迷子になりがち...

*2:後述してますが、フットスイッチの設定画面上は "Insert" ですが実際は "0" (ゼロ) が入力されている