Claude Code でソニーのテレビを操作する方法

うちのソニーのテレビは、自分がアメリカにあると思っていました。メニューは英語のままがいい。でもテレビには日本にいると分かってほしい。探していた日本の動画配信アプリが出てこなかったからです。言語メニューにあるのは英語(アメリカ合衆国)か日本語だけで、その間はありません。

そこで Claude Code に、Mac から Wi-Fi 越しに直してもらいました。テレビを見つけ、設定を読み、地域を変え、再起動し、Play ストアに断られていたアプリまでインストールしてくれました。私がリモコンを持ったのは、設定をひとつオンにして、確認ダイアログをひとつ承認したときだけです。

Google TV か Android TV のソニー BRAVIA なら同じことができます。Android ベースのテレビなら、ほとんどの機種で通用します。

何も触らずに Claude が見られるもの

まず Claude にテレビを探してもらいます。IP アドレスは要りません。こう頼めば十分です。

ローカルネットワークにある私のテレビを探してください。mDNS と SSDP を見て、
メーカー、型番、IP、公開されている操作インターフェースを教えてください。

BRAVIA は自分の存在をいくつもの方法で同時に知らせています。Chromecast の送信先として、AirPlay の受信機として、Android TV のリモコン相手として、そしてソニー独自の検出の仕組みでも。Claude は dns-sd のような Mac に最初から入っているツールでそれを見て回り、数秒で型番とアドレスを返してきます。

ソニーのテレビには、テレビ本体の中で動く小さな Web API もあります。ペアリングなしでも、型番、画面がついているか、現在時刻といった無害な質問には答えます。何かを変える操作には、テレビ側で設定する PIN かキーが必要です。Chromecast 側はもうひとつ役に立つことを教えてくれます。テレビが自分をどの言語と国だと思っているかです。うちのは en-US と US でした。

テレビの設定を変えずにできるのはここまでです。操作するには、スイッチをひとつ入れる必要があります。

ADB デバッグをオンにする

ADB は Android Debug Bridge の略で、アプリ開発者がスマホと話すのに使うツールです。Google TV の中身は Android なので、テレビもこれを理解します。リモコンで 1 分ほどの作業です。

  1. 設定のシステムから端末の情報画面を開き、「Android TV OS ビルド」の行を 7 回選択します。開発者になったと表示されれば成功です。
  2. 開発者向けオプションで USB デバッグをオンにします。ソニーの場合、これでネットワーク経由のデバッグも開きます。
  3. Claude に伝えます。Claude がテレビのアドレスに adb connect を実行すると、テレビにこのコンピュータを許可するかというダイアログが出ます。常に許可にチェックを入れて OK を押します。

このダイアログが安全の要です。画面上でそのコンピュータを承認するまで、ネットワーク上の何ものもテレビを操作できません。

承認が済めば、Claude はリモコンを持った人と同じように動けます。違うのは、画面を読めることです。

  • adb exec-out screencap -p でスクリーンショットを撮るので、Claude は各ステップの前後でテレビに何が映っているかを確認できます。
  • uiautomator dump は画面上のすべての文字とボタンを位置つきで一覧にするので、どこに何があるかを推測する必要がありません。
  • input keyevent でリモコンのボタンを押します。上、下、決定、戻る、ホーム。
  • am start で任意の画面やアプリを直接開けます。Play ストアのページも開けます。

メニューは英語、地域は日本

Android は言語と地域をひとつのロケールとしてまとめて持っています。en-US や ja-JP のような形です。テレビの言語リストに出てくるのは、ソニーが用意した組み合わせだけです。でもシステム自体は有効なロケールなら何でも受け付けます。en-JP、つまり英語の表示で国は日本、という設定もできます。

Android 12 にはそのためのコマンドがないので、Claude がひとつ書きました。小さな Java プログラムを Mac 上で Android SDK を使ってコンパイルし、テレビに送って app_process で実行します。こうすると shell ユーザーとして動き、システム設定を変える権限があります。

Object am = Class.forName("android.app.ActivityManager")
    .getMethod("getService").invoke(null);
Configuration c = (Configuration) am.getClass()
    .getMethod("getConfiguration").invoke(am);
c.setLocales(LocaleList.forLanguageTags("en-JP"));
Configuration.class.getField("userSetLocale").setBoolean(c, true);
am.getClass().getMethod("updatePersistentConfiguration",
    Configuration.class).invoke(am, c);

Claude はまず読み取り専用で実行して今のロケールを表示し、次に本番で実行し、テレビを再起動して en-JP が残っていることを確かめました。メニューは英語のままです。en-US でもう一度実行すれば元に戻ります。

これを自分で書く必要はありません。結果だけを頼めばいい。

テレビは ADB で接続済みです。メニューの言語は変えずに、システムのロケールを
英語、地域は日本にしてください。変更前と変更後のロケールを見せて、
再起動して、設定が残っているか確認してください。

ストアに入れられないと言われたアプリを入れる

入れたかったのはスカパー!の動画配信アプリです。地域を変えただけでは出てきませんでした。Claude がテレビで Play ストアのページを開いてスクリーンショットを撮ると、お住まいの国ではご利用いただけません、という表示。

このメッセージはテレビとは関係ありません。Play ストアの国は Google アカウントについているもので、テレビの地域や IP アドレスには従いません。Claude は変えられそうな場所を確認しました。Play ストアの Web 版に国の設定はなく、テレビの Play ストアにもありません。

変えられるのは、同じアカウントでログインした Android スマホの Play ストアアプリだけです。設定の中の、アカウントと端末の設定にある国とプロフィールの項目です。表示されるのは Google の支払いプロファイルがある国だけで、変更はおおむね年に 1 回までなので、やるなら意図してやるべきです。

古い Android スマホにログインして Mac につなぐと、Claude はテレビと同じように ADB でスマホを操作しました。スマホには Google アカウントが 2 つあり、Play ストアはもう一方のアカウントで開いていたので、Claude は国に触る前にアカウントを切り替えました。私なら気づかなかったと思います。変更のあとはテレビの Play ストアを閉じて新しい国を読み込ませ、アプリのページを開き直すと、今度はインストールボタンがありました。押して待つと、ボタンは開くに変わりました。

止まって確認したところ

いちばん良かったのは、Claude がそのまま突き進まなかった場面です。

セキュリティを緩める設定を自分でオンにすることはありませんでした。抜け道を探す代わりに、リモコンでの手順を渡してくれました。Play ストアの国を変える前には、1 年間戻せないことを伝えて私の返事を待ちました。新しいアプリがプライバシーポリシーの同意画面で開いたときも、止まって私に聞きました。規約に同意するのは私が決めることで、スクリプトの一手順ではないからです。

同じことを試すなら、線引きも同じにしてください。読む、見る、移動するは自由にさせる。同意、購入、削除、取り消せない操作の前には必ず確認させる。

終わったら片づける

ADB は承認したコンピュータにテレビの完全な操作権を渡します。それが目的ですが、ずっとオンにしておきたいものではないはずです。終わったら開発者向けオプションで USB デバッグをオフにするか、最後のステップとして Claude に頼んでください。ロケールの変更はそのまま残ります。

意外だったのは、全部がとても普通だったことです。特別なアプリも、スマートホームのハブも買っていません。テレビはもともと家のネットワークで三つか四つのプロトコルを話していて、Claude はそれをひとつずつ読み、入れてもらえるものを見つけただけです。

← 記事一覧