spank — MacBookを叩くと叫ぶユーモアツール

Tool

概要

spankは、Apple Silicon搭載Macに内蔵された加速度センサー(Bosch BMI286 IMU)をIOKitのHIDインターフェース経由で読み取り、「叩く」「ぶつける」といった物理的なインパクトを検出すると音声リアクションを再生するGo製コマンドラインツールです。READMEの文言どおり「Single binary, no dependencies」をうたっており、外部ランタイムやライブラリに依存せずに動作する点が魅力。ジョーク用途やセンサーデータ取得の軽いプロトタイプ、macOS特有のハードウェアアクセスを試すハンズオンに適しています。

GitHub

リポジトリの統計情報

  • スター数: 8
  • フォーク数: 1
  • ウォッチャー数: 8
  • コミット数: 10
  • ファイル数: 10
  • メインの言語: Go

主な特徴

  • Apple SiliconのIMU(Bosch BMI286)をIOKit HID経由で直接読み取る
  • インパクト検出に応じて音声レスポンスを再生するユーモラスなアプリケーション
  • シングルバイナリ、外部依存なしで配布可能
  • goreleaser設定などリリース自動化を想定した構成を含む

技術的なポイント

spankの技術的要点は「ハードウェアアクセス」と「リアルタイム的なイベント検出」に集約されます。Apple Silicon機種に載るBosch BMI286のようなIMUは、加速度やジャイロの生データをHIDレポートとして提供することがあり、IOKitのHIDスタックを介してユーザ空間アプリケーションからアクセスできます。本プロジェクトはその経路をGoから扱う実装をしており、CやObjective-Cのブリッジを介するか、もしくは既存のGo向けラッパーを使ってIOKit HIDデバイスを開いていると考えられます。

インパクト(叩く動作)の検出は、一般に以下の処理で行われます:高周波のノイズ除去のためのフィルタリング(ローパス/ハイパス)、軸ごとの加速度成分の合成(大きさの計算)、しきい値超過の検出、短時間のデバウンスや連続イベントの抑制。これにより、机を揺らしたりキーボードを叩いた際の誤検出を減らし、意図した「ヒット」だけを拾う設計が可能です。spankはシンプルさを重視しているため、複雑な機械学習を用いず閾値ベースの判定と短時間ウィンドウの集計で実装している可能性が高いです。

音声再生については「単一バイナリ・依存なし」をうたっていることから、外部コマンドに依存せずmacOSのオーディオAPIを呼ぶか、組み込みのサウンドデータをネイティブAPI(CoreAudioなど)で再生する実装が考えられます。goreleaserの設定ファイルが含まれている点は、バイナリのクロスビルドやGitHub Releasesへの配布、自動生成されたアセット管理を意図していることを示唆します。

注意点として、IOKit HIDを用いたセンサーアクセスはmacOS固有であり、Apple Silicon限定(Intel Macでは同じIMUが存在しない)であるため動作環境は限定されます。またセンサーやOSのアクセス権限周り、プライバシー設定やサンドボックスの影響によりビルド済みバイナリでも動作に制約が出ることがあるため、配布時は実行許可や説明を用意することが望ましいです。実用面では常識的な音量設定や周囲への配慮(大きな音を出す挙動は注意)も合わせて考慮するべきでしょう。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitattributes: file
  • .github: dir
  • .gitignore: file
  • .goreleaser.yaml: file
  • LICENSE: file

…他 5 ファイル

(リポジトリはファイル数が少なく、コアロジックとリリース設定、ライセンス、GitHubワークフロー関連が中心にまとめられています。)

まとめ

Apple SiliconのIMUを活用した遊び心あるツールで、ハードウェアアクセスや軽量なイベント検出の学習に最適です(約50字)。

リポジトリ情報:

READMEの抜粋:

spank

Slap your MacBook, it yells back.

“this is the most amazing thing i’ve ever seen” — @kenwheeler

“I just ran sexy mode with my wife sitting next to me…We died laughing” — @duncanthedev

“peak engineering” — @tylertaewook

Uses the Apple Silicon accelerometer (Bosch BMI286 IMU via IOKit HID) to detect physical hits on your laptop and plays audio responses. Single binary, no dependencies.