このプロジェクトについて
BoseはSoundTouchクラウドを終了し、スピーカーにはBluetooth、AUX、AirPlay、マルチルームゾーンは残ったものの、インターネットラジオ、プリセット、ブラウジング、Alexaは使えなくなった。このリポジトリは、オーナーがスピーカーをセルフホストの代替サービスに向け、ラジオとプリセットを取り戻すまでを案内するClaude Codeスキルである。非技術者ユーザーを想定しており、スキルは指示ではなく質問をし、自由に読み取り、スピーカー上の何かを変更する前には確認を求める。
代替サービスはgesellixによるAfterTouch(Bose-SoundTouch)で、スキルはこれを正解の基準としてクレジットしている。このリポジトリはスキルでありフォークではなく、公開されているコンテナイメージをインストールする。要件は、ローカルネットワーク上の1台以上のSoundTouchスピーカー、同じネットワーク上に安定したアドレスを持つDocker対応マシン(NAS、Raspberry Pi、小型Linuxボックス)、さらにPython 3.11+、uv、composeプラグイン付きのDockerである。スキルの最初のステップではこれらを自ら確認し、不足しているものとインストール用のコマンド行を報告する。
インストールはClaude Codeプラグインマーケットプレイス経由で行う。
/plugin marketplace add bitranox/soundtouch-decloud
/plugin install soundtouch-decloud
問題を平易な言葉で説明することでも起動でき、名前で呼び出すこともできる。ワークフローはチェックインを挟みながら段階的に進む。前提条件の確認とインストール支援、スピーカーの検出、サービスの起動、変更前の全スピーカーのバックアップ、4つのサービスURLの書き換え、ラジオソースの待機、局の復旧と検証、プリセットの書き込み、そして最後に数ではなく実際に聴くことによる再生確認である。
スキルには5つの参照ファイルと4つのスクリプトが含まれる。各スクリプトはJSONエンベロープを出力し、一貫した終了コード(0ははい、1はいいえ、2は判別不能)を使う。スピーカーを変更するものは明示的な--confirmを必要とするため、読み取り専用操作は常に安全である。スクリプトは、事前チェック、Docker/composeの検証とサービスヘルス、ネットワーク検出、診断用SSHポート経由でのURL書き換えと再起動を伴うオンボーディング、そしてプリセットのバックアップ/収集/検証/チェック/復元/相対化をカバーする。
ドキュメントでは、誤診しやすい障害モードが指摘されている。ブリッジネットワークはインストール済みに見えるが何も検出しない(ホストネットワークが必要)。アカウントURLだけを書き換えると、スピーカーは登録・同期するが何も再生しない。URLの書き込み順序は重要で、書き込む前に永続化すると古い値が保存される一方、コマンドはOKと応答し続ける。プリセット内の生のストリームURLは受け入れられるが決して再生されないため、プリセットはAfterTouchの相対形式を使う。コピーしたサービスはsettings.jsonのserver_url経由で古いアドレスを保持する。DHCPで割り当てられたサービスアドレスは、後で全スピーカーを一度に壊す。
局の復旧は4段階のプロセスである。移行前のプリセットからストリームURLを収集し(サービスはそれらを保持しないため、バックアップを先に実行する)、古い局リストがまだ必要かをオーナーに尋ね、残りの局について現在の直接ストリームエンドポイントを調査し、サービスホストから検証する。検証はボタンごとにaudio、playlist、hls、not-audio、dead、missingを報告する。ドキュメントは、局は移転したり消滅したりすること、また.m3uプレイリストは素朴なaudioチェックを通過しても音声を含まない場合があることを注記している。
継続運用のために、スキルは各スピーカーのプリセットのサービス外スナップショット、ワンショット復元、スケジュールされたアラームに適した読み取り専用チェックを追加する。AfterTouch v0.137.0はアカウント上のスピーカー間でプリセットを共有するため、自ら書き込むものは意図的に何もインストールしない。ドキュメントは実測データを引用している。18.7日間にわたる2分間の復元ループは11692回実行され、プリセットを書き込んだのは1回だけだった。また、スリープ状態のWiFiスピーカー1台は1303回の読み取り不能な測定値を生成したが、プリセットが不足することはなかった。アラームはプリセットの欠落とスピーカーの無応答を区別する。
スクリプトは標準ライブラリのみを使うため、何もインストールされていないマシンでも動作する。テスト依存はpytestのみである。リポジトリ規約チェッカーは、マニフェスト、スキルのフロントマター、同梱スクリプトのテストカバレッジ、改行コードを検証し、Linux、Windows、macOSでCIを実行する。ライセンスはMIT。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.