雑記: bt-manage とかいうのをつくった

github.com

端的にいえば、複数の macOS PC を切り替える際に、使用している Bluetoothバイスを再接続するためのツールです。

モチベーション

年末に、テーブルの配線を整理した際に、キーボードと、Magic Trackpadにそれぞれ USB Type-Cケーブルが伸びているのが邪魔だったため、ケーブルを外しました。

これまでキーボード、Magic Trackpadともに有線接続でしたが、これ以降は、キーボードのみ有線接続、Magic Trackpad は無線接続としたところ、PC切り替え時にMagic Trackpadの切り替えがうまくいかないことに気がついてしまいました。
macOS同士であればユニバーサルコントロールなどで操作可能なシーンはしばしばありますが、社用PCと私用PCのため、これを利用できないなどの背景があります。

Magic Trackpad は有線接続されていると、そのペアリング情報が優先されるため、これまでは特に問題ありませんでした。しかしケーブルを外して無線運用にした結果、

  1. 切り替え先の Mac でペアリング情報を削除
  2. Trackpad をペアリング待ち状態にする(電源入れ直しが必要なことも)
  3. 再ペアリング

という手順を毎回踏む必要が出てきました。

特に Mac Studio へ切り替える場合は、切り替え先では Trackpad が未接続のため、GUI 操作すらできずかなり不便です。 仮に Trackpad を有線接続に戻し、代わりにキーボードを無線にすれば GUI で再接続操作も可能ですが、毎回 GUI で再ペアリングするのは地味に手間でした。

元々、似た用途で、イヤホンの接続を雑に行うための bt-connect / bt-connected という関数をdotfilesに置いていたのですが、これをもう少し汎用的にしようとすると、Bash スクリプトではつらそうだったため、「いっそ専用ツールにしよう」と思ったのが動機です。

ref: github.com

できること

基本的なBluetoothバイスむけの操作、として以下のパターンに対応しています。 対話的な絞り込みや再ペアリング操作を CLI 化し、blueutil の wrapper という形になっています。

  • ペアリング済みデバイスへ未接続状態からの接続 (connect)
  • 接続済みデバイスの切断(disconnect)
  • ペアリング状態・接続状態の一覧 (list)
  • 新規ペアリング (pair)
  • 既存ペアリング情報の削除→ペアリング対象検索→再ペアリング (repair)
(bt-manage): bt-manage -h
Switch Bluetooth device connections on macOS

Usage:
  bt-manage [flags]
  bt-manage [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  connect     Connect to a Bluetooth device
  disconnect  Disconnect a Bluetooth device
  help        Help about any command
  list        List Bluetooth devices
  pair        Pair and connect to a Bluetooth device
  repair      Unpair and re-pair a Bluetooth device
  version     Print version information

Flags:
  -c, --connected       (list) Show connected devices only
  -d, --disconnected    (list) Show disconnected devices only
  -f, --format string   (list) Output format (tsv|json) (default "tsv")
  -h, --help            help for bt-manage
  -N, --names-only      (list) Print device names only (one per line)
  -H, --no-header       (list) Do not print header (tsv only)
      --paired          (list) List paired devices (default) (default true)
  -v, --verbose         Enable verbose logging to stderr

Use "bt-manage [command] --help" for more information about a command.

versionコマンドとかいうのを作ったものの、goreleaser などを利用しておらず、git tag を打っただけのリリースなので ↓のようになるというバグ(?)っぽい感じになっています。気が向いたら治します。

(bt-manage): bt-manage version
dev

p.s. Go CLI ツールを作る、というのをちゃんとやったことがなかった気がします、なんかそれっぽいものが出来上がってしまった。AIにざっくりの要件を渡した状態でそれっぽく仕上がるのを眺める年始でした。