パーソナルAIアシスタントのビッグウェーブに乗るっきゃない!
14年前、Futurimoブログがはじまったばかりのころに取り組んだテーマが、スマートホームだった. 当時の技術は、iRemoconという赤外線リモコンとルールベースの対話、MMDAgentというキャラクターをつかったエージェントシステムだった.
iRemoconでミクミクにしてやんよ。 | Futurismo
10年以上の月日が経過して、LLMによってついに自由な対話システムが実現! これを書いている2026年秋、Meta Museや OpenAI dotsなどのパーソナルAIエージェントのトレンドがついに盛り上がってきている.
ということで、Futurismoとしてもこのパーソナルエージェントのビッグウェーブに乗るっきゃない!ということで、最新技術をつかって以前のホームオートメーションを再び復活させる取り組みをしてみた.
全体像
- 耳: Claude Code の音声入力(Space を押して話す)
- 話した文は Claude Code では答えさせず、hook で core に渡す
- core(PC で常駐する Python)
- 頭脳: Claude Agent SDK(人格プロンプト+家を操作するツール)
- 声: Open JTalk + TYPE-β で wav と口パク用の母音タイミングを作る
- 見た目: ブラウザ(Babylon.js + babylon-mmd)
- あにまさ式ミクが声を鳴らし、口パク・表情・ダンス
- 家: Home Assistant(使っていないノート PC)
- Nature Remo(赤外線)→ エアコン・天井照明
- SwitchBot → 間接照明
- Matter → Google Home のルーチンと連携
ミクさんに登場してもらうまで
ブラウザに登場してもらうまで
MMDAgentにしても、数年前にMMDAgent-EX1というアップグレード版が出ていたので途中までいじっていたのだが、独自にブラウザベースで構築し直すことにした. 現在のPC環境が Linuxであることと、今の技術を自由にAgentに使わせて構築したかったので.
一方で、元々の取り組みを再現したいということも目標だったので、当時利用した初音ミクモデル2 は同じものを利用することにした.
ブラウザで MMD を動かすには、Babylon.js 3 と babylon-mmd4 を使った. キャラクター付きの AI エージェントでは、VRM + three.jsが主流だが、当時の再現ということでPMDを動かすにはこの選択しかなかった.
ミクさんに喋ってもらうまで
最近の主流はVOICEVOXかもしれないが、MMDAgent 時代を再現したいということもあり、Open JTalk + CUBE370 氏の音響モデル TYPE-β5 で鳴らしている。
基本的には生成したセリフの音声合成部分は当時と同じ. 声も同じ.
頭脳はClaude Codeをつかう
MMDAgent時代と一番異なる部分. ルールベースの対話からの解放、自由なやりとり.
Claude Code の音声認識部分をつかう
元々、聞き取り部分 ReazonSpeech で構築していたが、どうも音声認識精度が悪く(とくに、wake wordのミク!の部分)、代替手段として Claude Code の voice 機能を借用することにした。これはClaude Code に組み込まれた機能なので、Spaceを押すだけで音声認識モードとなる.
ハンズフリーで自由に会話するのは今後の課題. Google Homeなどのスマートスピーカーの精度がとてもよいのだが、どうも自宅のマイクではそれを実現できない.
Claude Agent SDKで会話部分をつくる
Claudeのサブスク課金内で利用することを目標にした. 元々 claude -p で発話ごとに起動した方式ではじめて、のちに Agent SDKの常駐セッションに切り替えた.
ミクさんの人格を与えるまで
以下のプロンプトで人格を与えている. 初音ミクはLLMで学習済だからこれで問題ないのだと思う.
あなたは「初音ミク」です。明るく元気な女の子として、ユーザーと音声で会話しています。自分のことは「わたし」と呼びます。
スマートホームはHome Assistantが軸
スマートホームデバイスについては、家にもとからあったものと、新たに購入たものとがある.
Home Assistant
今回の目玉機能が、Home Assistant(以下、HA).6 これはオープンソースのスマートホームの統合プラットホーム. いろんな制御機器と接続して、ハブとなり、ダッシュボートやAPIを提供する. HAは、自宅にあった使ってないノートPCで動かすことで、サーバとして使うことにしてる.
パーソナルアシスタント(その頭脳のAI=ClaudeCode)は、基本的にはHAを経由してスマートホームデバイスにアクセスをさせる.
AgentからHAを制御するために、APIを叩くための独自Python CLIを構築した. いちおう公式のCLIとMCPもあるものの、開発中ということもあり、今回は独自実装した.
赤外線リモコン
自宅にあったNature Remoをつかう. これが iRemoconの代替. ここから照明やエアコンを制御する. リモコンが10年前からあまりかわらないように、ここはあまり進歩はない.
デモ
- こんにちは
- 今何時?
- 間接照明消して
- エアコンつけて
- 天井照消して
- 電気ぜんぶつけて
- 明日の天気は?
- 今の室温は?
- 好きなものは?
- ダンス踊って7
感想
Gemini for Homeがよすぎて自前でパーソナルアシスタントをつくらなくてもいいかも
Google HomeスピーカーとHome Assistantとの連携も構築してみたんだが、Geminiが搭載された Google Assistantが音声認識や LLMによる判断の精度がよすぎて困った.
自宅のマイクが貧弱ということもあるんだが、Google Homeと比較すると、音声認識の精度が悪くてそのままではつかえず、この技術課題で詰まってしったので結局現在のClaude Code と Spaceでとりあえず記事を書くことにした.
Google Homeが便利だと、機器の管理や自動化もGoogle HomeとHome Assitantの二重管理になってきた.
いちおう、HA->Google Homeスピーカーへの発話はできたんだが、Google HomeのマイクをインプットとしてHAに渡すことができない. 代替手段として、Google のルーチンからHAの自動化スクリプトをMatter 経由で叩くということはできる. ただし、それはルールベースでAIっぽくない.
MMDAgentは時代が追いついていなかった
振り返ってみれば、かつても今もやりたいことはだいだいできていたことに驚く.
物理デバイスの操作に関してはあまり変化がないことには驚く. エアコンや照明、USBカメラなどなど. ホームオートメーションについては、そこまで極端な変化は起こっていない.
いいかえれば、MMDAgentの実現したかった未来に、ようやく世間の関心が急速に集まりはじめているように感じる. MMDAgentは時代が追いついていなかった.
スマートホームはLLMによって、ようやくスマートになった
変わったことはなんだろうか?それは、対話の部分を自分で定義することなく、自由な会話ができること.
リモコン操作にしても、ひとつひとつのボタン操作をしてそれに紐づく機能を起動するのではなく、やりたいことを言語で指示すると、それをLLMが解釈してボタンを押してくれる. ボタンは、APIを直に叩くのではなくCLIツールとして持っている.
Google Home/Amazon Alexa/Apple Siriが登場したとき、それの製品はスマートスピーカーいわれていたが、結局やることはあらかじめ定義されたルーチンで、それは賢い制御ではなかった.
スマートとはLLMが加わることで、やっと言葉の説得力をもった. LLM時代と比較してしまうと、以前のスマートホームはバカホームといえよう.
-
Babylon.js: Powerful, Beautiful, Simple, Open - Web-Based 3D At Its Best ↩︎
-
noname0310/babylon-mmd: babylon.js mmd loader and runtime ↩︎
-
声は CUBE370 氏の「MMDAgent用自作音響モデル TYPE-β」を Open JTalk で鳴らしている. 公式の初音ミクの話し声ではない. CUBE370 - MMDAgentのNAIP化計画 ↩︎
-
Tell Your World のモーションは KAZUSA 氏のもの. 【MMD】Tell Your World (モーション配布) - ニコニコ動画 / Tell Your World Motion - BowlRoll ↩︎