雑記: 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にざっくりの要件を渡した状態でそれっぽく仕上がるのを眺める年始でした。

2025買ってよかったもの

2025買ってよかったもの備忘録

ふと amazon の購入履歴を見返したので、ついでにまとめる。順序は買ってよかったと思う順、適当

Shokz OpenDots ONE

ベストバイ、です。これ

もともとBose Ultra Open Earbuds (以降 Earbuds) を 2025/05 に買っていたんですが、結果として半年立たず(2025/09末)でShokz OpenDots ONE(以降 OpenDots)に乗り換えることにしました。うーん。勿体無いですね。 OpenDots の発売日が 6月だったので当時5月時点に買った時としてはまぁ良い買い物ではありました。(※OpenDots 自体はクラファンがあったので、Shokzから情報はでていたはず、残念ながら自分は気がつけなかったらしい)

前提、音質だけで言えば Earbuds の方がいい気がします。耳がめちゃくちゃいいわけではないので、OpenDotsに変えたことによる変化についてはそんなに気にしていません。そもそも音質をこだわるなら open ではないやつの方が良い。それはそう。

イヤーカフ形状のイヤホン自体は Earbuds から始めており、形状や、機能性ではかなり満足していましたが、ヨドバシ店舗で試着してみた時、端的に EarbudsよりOpenDotsの方が耳にあっていました。 Earbudsと耳の形の相性が悪く十二分に満足の行く形で自分の耳にうまくフィットしてなかった、最初はこういうものだと思ってましたが、OpenDotsを試すと、こっちの方が、耳を挟む部分(なんて言うんだこれは)の遊び幅があるため、挟みやすかったです。この遊び幅のおかげで、求めている位置につけることができる、というのがとてもよかったです。 Earbudsの強みである イマーシブオーディオは、おそらく "良い" んですが、先述の理由と、移動中に使うことが多いために、活用しきれてなかった。 店頭で試した時に OpenDots の "しっくりくる" 感に負けてしまった。

そのほかのイヤーカフ系も試したんですが、ちゃんと試したのがこの二つだけなので、この二つについてのみ言及しました。 同じような悩みの人間に届けば嬉しい。

Bose Ultra Open Earbuds: https://www.amazon.co.jp/dp/B0DTKS55KJ Shokz OpenDots ONE: https://www.amazon.co.jp/dp/B0DW3RWMNM

薄いモバイルバッテリー

MATECH モバイルバッテリー マグセーフ 超薄型 小型 軽量(史上最薄6.9mm, 5000mAh): https://www.amazon.co.jp/dp/B0DJ4LVCYD

薄いは正義です。なんか思ったよりよかったので結局2つ買ってしまった。2つ持ち歩いてしまったら薄さ・軽さの旨みが少ない、という弱点がある

小さいスピーカー

オーディオテクニカ AT-CSP1: https://www.amazon.co.jp/dp/B0BF8XNXV1 クラムシェル時にイヤホンをつけるのが面倒になったので買ってみた。思ったより良い

銭湯に行く時の小さいポーチ

トイレタリーバッグ 洗面ポーチ 防水使用なのに内部の蒸れを解消 (ジッパータイプ): https://www.amazon.co.jp/dp/B0D267R5ML サウナとか銭湯に行く時に適当なビニールに入れたりしてたが、拭くのが面倒だった、Twitterでバズってたやつと似たやつを買ってみた。良い

そのほか

  • 長年使ってたモニターアームを ERGOTRONのやつに買い替えた。モニターアームのちょうど良い粗大ゴミ廃棄タイミングがあったのでそれに便乗して買い替え
  • 長年使ってたサブモニターを xiaomi の A27Uiに買い替えた。これもちょうど良い粗大ゴミ廃棄のタイミングがあったので

製品リンクはすべてアフィリエイトリンクではありません。

2020振り返り

例によって例の、年一回の雑な振り返りをね、今年もやっていきたいと思います。 ただ、社会人になったことと、某の影響でプライベートでの外出も極端に減った影響で1年なにしてたっけ???となっています。はい。 まぁでもこう言うの残しとかないと将来的に記憶薄れてなにも覚えてなさそうだし、つらつらと書いていきます。

まずは時系列で、

~3月

この辺は卒業制作とかを慌ててやっていた記憶。

あとは、某vid19とかが流行り出したのがこのくらいですよね。 記憶では2/26とかに政府からなんか大型のイベントの自粛みたいな要請があったような記憶です。(ちょうど2/26はPerfumeのライブにいっていて当日中止になったので日付だけはハッキリと覚えているw)

↑のこともあって2月末、3月に予定していたイベントとかが軒並み中止になってだいぶ悲しくなった記憶がありますね... 2月半ばとかは開催できてたり、あとは、2/25の方のPerfumeのライブは実施できていたのでこれに行けたのは本当に運が良かった...(初めてのPerfumeライブ当選だったこともありいきたい気持ちが強かった)

あとは、プライベート的な話で言うと、引っ越しをしました。後述しますが、この記事を書いている日(12/29)になって出社したのは1日のみだったので、引っ越さなくても良かったのかなぁという気持ちも多少あります. 3月末とかに、内定先(現弊社)より、”研修をフルリモートでやります”との連絡をうけて、あわてて机とか椅子とかをポチった記憶がある

4月~6月

4月からは「株式会社アカツキ」にて働いています。(AdventCalendarに記事を載せたりしているので知ってる人はしってるかもしれませんが、正式に社名はだしてなかったのであるいみ初公開かもね?) 研修のあと配属となり、運営中タイトルの既存コードの改善だったりをしていました。

プライベートでは基本的に引きこもってた。

7月~9月

この辺はなにしてたっけな。。。記憶がないね。

伊藤美来のオンラインサイン会で、見事あたって、サイン入りポストカードがあたったのがこの辺。

オンラインサイン会、2日開催してて、当たった方の日をリアタイ視聴してなかったのが今年1番の後悔です。(まじで悔しいwww)

10月~12月

この辺からまたVにハマり出して(今も)どっぷり沼に入っている まぁこれも一種のエンタメだとおもって業界研究!とか自分に言いきかせていますが、単純に推しができてしまっただけです。 あとは友達とボードゲームとかをよくやってるんですけど、その流れで、麻雀入門をしました。2020になってオンライン麻雀じゃなくてオフライン麻雀で入門するのって珍しいかもねとかいう話をした


なんとなく、やることはやった。なにかおおきな変化があったのかといわれるとあったようでなかった気がする。みたいな1年だったなぁと振り返っています。

1年をまとめて振り返ろうとしてもその頃には記憶がふっとんでいるので、定期的に振り返るなどしたほうが多少マシ(もう少しちゃんとしたもの)になるかなとかおもった。

昨年の目標って何だっけ?

ref: https://fumihumi.hatenablog.com/entry/2019/12/31/230253

来年は業務でなにをするのかに応じて臨機応変に対応したいと思っています。 その時に必要になったことを学ぶでも良し、自分が戦えるなら戦いたいと思っています。

(戦うって何と戦おうとしてるんだ去年の自分は)

仕事では、研修期間をのぞき基本的にRubyを使っていたので新しい挑戦はすくなったものの、以前に比べてテスト/機能開発といった観点のスキルは伸びたんじゃないかなと思っています。 そういったいみでは、当初の目標であった、臨機応変な対応をしつつ、自分の力を試せたのかなという気持ちになりました。(とはいえ、まだまだ未熟な点は多いので引き続き頑張っていきたいところです。)

あとは、社会人になって生活諸々がかわったけど特に大きな怪我/病気もなく過ごせた気がする(なんか一回体調めちゃくずしたけどなんとかなったし。)

来年の自分がコレをみているのか不明ですが、楽しんでいれば今の私的には嬉しいと思います。楽しくないのであれば、今を楽しく感じることを1番に考えてみてはどうだろうか????????俺は今楽しいぞ。と伝えたい。

仕事/プライベートもそこそこ楽しいし問題なさそうだなっておもっている、なんとなく、毎年自分に問いかけたいですね。「今、楽しいですか?って。」

来年の目標とか

  • もうちょっとプライベートの時間を大切にしていきたいなと思っているのと
  • not本業の範囲で技術的なことを何かしらやっていきた(e.g. 副業でも趣味でもなんでもいい)
  • 1つめに近いけど、楽しい1年にしていきたいなという気持ち。 ふわっとしているけどまぁこんな感じかな

まぁこんな感じで振り返りとしてるんですが、相変わらず日本語力は特に上がっていないのが見受けられます。 良いお年を。

一人暮らしで買ってよかったもの、悪かったもの

なんとなく落ち着いて一通りの生活ができるので雑に書く。

買ってよかったもの

  • ゴミ箱(蓋アリ)

    ライクイット(like-it) フタ付きゴミ箱 カフェスタイルスイングダスト深型 ブラウン 25L 日本製 CFS-13 www.amazon.co.jp

実家では蓋なしを使っていたけど(部屋で発生するゴミがそんなにないので)雑多なゴミが生活空間のゴミ箱に入る。匂いがきになるので蓋ありは正義だった。

  • 冷凍のカット野菜

    同期が買っていたのをみて便乗して買ってみたらめちゃくちゃよかった。

    www.amazon.co.jp

  • 氷作るやつ

    お酒は全てを解決してくれるソリューションだとどこかで聞いたので。

    www.amazon.co.jp

    冷凍庫に付属のやつだと細かい氷しか作れなくて大きめの氷作りたいじゃないですか......?

  • 排水溝掃除するためのやつ

    思考停止して掃除(綺麗に)したいので

    www.amazon.co.jp

    排水溝のところの髪の毛とかも溶かしてくれて便利〜〜〜ってなってる。掃除するのちょっと大変じゃないですか。

  • 食器とか

    デザインにこだわりはないのでシンプルでまとまってるやつ。

    一通りあった方がいろいろ使えて便利だよね。

    11年間の一人暮らし生活のすえ、とりあえず必要な食器を考えました!和にも洋にも使える優しい雰囲気の1人用白い食器10点セット www.amazon.co.jp

    ((一枚割ってしまいましたが)

ちょっと後悔してるもの

めちゃくちゃ小さい炊飯器

CHULUX 炊飯器 0.5~1.5合 小型 ミニ ライスクッカー ワンタッチ 簡単コンパクト 一人及び二人暮らし最適 ブラック www.amazon.co.jp

お米を毎食or2食ごとに炊かないといけなくなって、毎回コメをたくのがめんどくさくなってしまって私の性格的にはダメだった。新しくAmazonで大きめのやつを書い直しました。


家電などは↓こっち。

雑記: 引越しをした。 - fumihumiのブログ

雑記: 引越しをした。

初めての引っ越し(一人暮らし)で一週間ほどたったのでいろいろとざつにまとめておく。

次の引っ越しの時の参考にしたり、誰かのためになれば。


22年ほど生きていて、初めて実家をでることになった。

理由は単純に 職場までの移動時間を極限まで減らしたい から。

専門学校にはいり、3年次以降はインターンシップ(アルバイト)等での移動時間が馬鹿にならなくなっていた。とは言え、一人暮らしをするほどの財力があるわけでもないのでいままでは実家から通っていた。

就活をしていたのはちょうど1年ほど前で、内定をいただいた各社にはインターンシップという形で少しの期間(1週間~2週間ほど)働いたりしていた。その時に強く思ったのは、実家から毎日通うことが "通えない距離ではないが、これをずっと続けるのがしんどい"ということ。 Door to Door で1.5 ~ 2時間、場所によってはもう少しかかったりする。

なので就職を機に、引っ越すことにした。

引っ越して一人暮らしにつかれたら実家に戻れば良いという安直な考えで引っ越した。

(実家が神奈川にあるので業者に頼んでもそれなりの金額でさくっと戻れることが気軽に引っ越しに踏み切れる大きな理由なのかもしれない。)


もともと実家にいたこともあり自分の家具/家電みたいなものは特に持っていないので、自宅から運んだもの(大きなもの)はPC用のモニター2枚、座椅子、PS4くらい。あとは、洋服と本類(技術書/漫画/小説),

次のものたちは↓の理由により運んでいない。

  • 以前使っていたデスク/椅子:
    • 昔から使っていたもので長時間作業すると体が痛くなったりするので買うことに。
  • 本棚:
    • 既存本棚はすでに大きくあふれており、平積みされているものが多かったので買い替えることに。
  • ベッド:
    • 新居のスペース的に固定幅をとるベッドより布団の方が(なんとなく)広く使えそうなため

買ったもの


echoを買うか、他のちゃんとしたスピーカーをつかうか。迷っている。 Echo (エコー) 第3世代

ANKERとかBOSEとかよく聞くけど実際コスパとか考えるとどうなんだろう。Spotifyとの連携ができると嬉しい。 PCをクラムシェルで使いたいが音が曇って聞こえるので"今は"開いて使っている、早くスピーカーを用意したい おすすめをおしえてください........!


PCデスクを買おうとしている

  • 昇降式にする?
  • L字デスク?
  • 横幅(120, 140,...etc)

この辺で悩んでおり、まだ購入に至っていない。

同様にオフィスチェア/フローリングを痛めないようにチェアマットこの辺も購入を迷っており、まだ決めかねている。

早くこれを卒業したいが、急いで変なの買う方がしんどそうだし、一旦このままでいいかなと。

追記: 入社直後からリモートワーク(研修)になるとの連絡を受け早急にデスク環境を整える必要になったのでここから次のセクションまで追記している。

以下購入したもの

デスク:

  • 幅120 or 140 で悩んでいたが、友人のデスク環境をみたり今の現状を考えると120だと少し物足りなさそうなので w140
  • 奥行きが60くらいでいいかなと思っていたものの、60だと少し物足りない感があるとのこと(友人より)だった && 今の自分の環境(※1)がJust60を使い切っていたので余裕が欲しくD70で探すことにした。
  • 正直昇降式である必要はないが、w140xD70でさがし && モニターアームがつけやすいことを考慮するとこのデスクがちょうど良さそうだった。昇降式のため多少値段は張るがまぁいいだろうということで購入

    ※1 今の自分の環境: モニターの段ボールにモニターを配置し、その手前にPCスタンドを利用してキーボード(mistel md600)とmagic trackpadを置いている

    検討していたが不採用だったもの

    • LOWYA L字型デスク 幅145cm

      こちらはモニターアームが取り付けにくいとレビュー欄にあったこと。また正直机の下に収納スペースはいらない気がしたため不採用

    • IKEA bekant コーナーデスク

      デザインやサイズが好きなので、正直もともと買おうとしていたのはこのデスクであるが、IKEAオンラインショップでは自宅までの配送をしていないため断念した

椅子:

  • なんとなく昔から気になっていたということ。
  • メッシュのほうが個人的に好きであるということ。
  • レビュー欄に動画があり雰囲気が伝わったこと。

以上の理由で採用

マット:

マットにこだわりはないのであとは適当に選びました。


引っ越しして感じているのは、電車での移動が水面下のストレスになっていたという事実に気がつけたこと。

ここ数日は短い移動(数駅/徒歩40分くらい)は歩くようにしてみた。そうすると想像以上に気分転換になるし、多少の運動になる。

たまに電車にのると、パーソナルスペースが侵されるのはもちろん、空気が悪い。

昨今はcovid19で騒がれていることもあって換気している電車(車両)が多いが、換気されていない電車に改めて乗ると不快に感じることがある。

というか就職して速攻リモートワークになったりでもしたら引っ越しした意味がほとんどなくなってしまうんだよな 追記: 研修を含めリモートになったので早急に自宅環境構築をしないといけないようだ.......


例のものを置いておきます、気が向いたら是非に。

Amazon CAPTCHA

tips: javascriptでnestedObjectでも動的にget,setする

TL;DR nested objectから任意のkeyで動的にget, setしたい時に使えるスニペット


ソースコードはこちらです

gist.github.com

モチベーション

const obj = {
  key1: {
    key2: {
      key3: 'value'
    }
  }
}

上記のようなnested objectがあった時に、

静的にアクセスするのであれば↓のような方法が取れると思います。

  1. object['key1']['key2']['key3']
  2. object.key1.key2.key3

しかし、これを動的に行うとしたらどうしましょう。

lodashという声が聞こえそうですが、彼を入れるとプロジェクトのバンドルサイズがおおきくなるので今回は不採用です。すでに入ってるなら .set, .getを使いましょう。

object[val1][val2]のようにおこなうのでしょう?。これを行うとすると各種変数が存在しない場合を考慮したりしないといけないため少し面倒です。

e.g. getValue(obj, 'key1.key2.key3'), setValue(obj, path, value) のような取得するためのpath(文字列)くらいであればjsでさくっと作成できそうですね。なので今回はこれを目指しました。

ざっと再起やreduce で書いた後に、いやこれ過去に考えた人いるだろうと思って調べるとstack over flowに質問&回答があったのでそれを拝借し↑のコードに至りました。

bashの起動速度を5倍速にしたので褒めて

はじめに

あけましておめでとうございます。気がついたら年が明けていました。本年こそ頑張って技術ブログを更新していきたいものですね。

さてこの記事はクリスマスを迎えるためのカレンダーこと、MakeITアドベントカレンダーの25日目の記事になります。 qiita.com

え?もう1月だって?

Google先生によるとクリスマス - Wikipedia

キリスト教の中でもカトリックの影響の強いイタリア、ポーランド、フランス、スペインなどでは、クリスマスは12月25日に始まり、1月6日の公現祭(エピファニア)に終わる。クリスマスの飾り付けは23日頃に行う。24日はクリスマス・イヴとして夜を祝う。

1月6日まではクリスマスですし、片付けのこととかを考えれば今日も実質クリスマスですよね。なので今日は25日目のブログの日です。(は?)

もともとは別の人担当でしたがまだカレンダーが空いている&&面白いネタができたので変わって私が投稿します。 というわけでやっていきたいと思います。


bashの起動速度をはやくしました

該当PR:

github.com

before

{ fumihumi } (master *) (dotfiles): time source ~/.bashrc
real    0m2.709s
user    0m1.295s
sys     0m1.097s

after

{ fumihumi } (master *) (dotfiles): time source ~/.bashrc
real    0m0.481s
user    0m0.208s
sys     0m0.246s

🎉 なんとびっくり、計測誤差が多少ありますが、平均して4~5倍速に!!! 🎉

はてなって:tada:できないんですね。

そもそもどうしておそかったの

いや気がついたらストレスがたまるくらいには遅くなっていたんですよね。

普段はターミナル立ち上げてから基本的にはtmuxinatorで自動化しているレイアウトを復活させていて、その時にdockerとかを立ち上げたりしてるので生のbashを新規立ち上げたりする機会があまりなく普段使いにはあまり支障がありませんでした。

ただ、年末年始に仕事以外のプロジェクトを触ろうとするとtmuxinatorのconfigがないため手動でいろいろ立ち上げるわけですが、1度なら気にならないがなんどもbashを立ち上げるとストレスを感じるほど遅かったわけです..........

そんな悩みを友人に投げてみると

Image from Gyazo

次の記事を共有してもらいました。

zshrcの中でbrew --prefixしないほうがよい理由 - Qiita

実際にHomebrew側のISSUE等も調べてみるといまだに完全はされておらずbrew --prefixは悪手のように見えてきます。

github.com

なにしたの

そこで、一度 brew --prefixを実行したらそれを変数にいれて実行結果をキャッシュさせるという手段を取りました。

remove 'brew --prefix' command call. by fumihumi · Pull Request #21 · fumihumi/dotfiles · GitHub

brew --prefix ってPCの環境問わずにbrewのpathを出してくれるため環境構築する際のサンプルコードとしてよく出てくるきがしますが、実際にそれを複数回利用したり、自分のように source コマンドを使うために if で調べた後に source するみたいな rc の書き方をしていると sourceするファイル数 * 2回も brew --prefixを実行してしまいます。 なので初回に実行してそれを読み込めば多少は早くなるやろ。って考えでした。

これが思ったより効果的面でして、タイトルにあるように実測値で5倍弱の速さになりました。すごい!

最後に

今回はbashの起動速度というトピックでしたが、brewを使っている環境であればおそらくどの環境(zsh, fish)でも再現すると思います。 是非一度自分のdotfiles配下で git grep 'brew --prefix'をためしてみて、複数個見かけたらそれをやめてみてはどうでしょうか。きっと早くなると思います。

P.S. Macの標準シェルがzshになったのでそろそろ乗り換えようと思いつつもbashrcを移行するのがちょっとめんどくさくてまだできていません。


参考にしたもの。 - Profiling zsh startup time