- プログラミング
- IoT
- 趣味
- AI基盤
Claude CodeのChannels機能で”友達”を作ってみた
はじめに
「Claude Codeでコーディング以外に使えないかな?」
開発ツールとしてのClaude Codeはもう十分便利なのですが、せっかくならコーディング以外にも使ってみたくなりますよね。最近追加されたChannelsという機能を使うと、Claude Codeが外部からのイベントを「待ち受け」できるようになります。
これを使えば、話しかけたら音声で返事をしてくれるAIが作れるのでは?ということで、今回は音声で対話できる"友達"を作ってみました。
Claude Code Channels とは
Claude CodeにはMCP(Model Context Protocol)サーバーを接続する仕組みがありますが、通常のMCPサーバーはAI側からツールを呼び出す「一方向」の関係です。Channels機能を使うと、これに加えて外部からAIにイベントを通知する経路が開きます。

つまり、マイクやセンサーからの入力を受け取って、AIが自律的に反応するシステムが作れるようになります。
作ったもの
マイクに話しかけると、音声認識でテキスト化 → Claude Codeが返答を考えて → 音声合成で喋ってくれるシステムです。

アーキテクチャ

データの流れはシンプルで、マイク入力が左から右に流れて最終的にスピーカーから音声が出てきます。Channel通知でClaude Codeに発話テキストが届き、Claude Codeがspeakツールを呼ぶことでVOICEVOXが喋る、という双方向のやり取りです。
作り方(ゼロショットで始める)
基本的な作りは通常のMCPサーバーとまったく同じです。違いはChannel capabilityを宣言するかどうかだけ。MCPサーバーを作ったことがあれば、追加で覚えることはほぼありません。なければClaude Codeに「MCPサーバーを作って」と頼めば雛形を作ってくれます。
押さえるポイントは3つだけです。
1. Channel capabilityを宣言する
MCPサーバーの初期化時にclaude/channelを宣言します。通常のMCPサーバーとの違いはこの1行だけです。
const server = new Server(
{ name: "my-friend", version: "0.1.0" },
{
capabilities: {
tools: {},
experimental: { "claude/channel": {} },
},
}
);
2. Channel通知を発行する
外部イベント(今回は音声認識結果)を受け取ったら、Channel通知でClaude Codeに届けます。
// 音声認識されたテキストをChannel通知として発行
await server.notification({
method: "notifications/claude/channel",
params: {
content: "こんにちは", // 認識されたテキスト
meta: {
type: "audio",
timestamp: new Date().toISOString(),
},
},
});
この通知がClaude Codeに届くと、CLAUDE.mdの指示に従って返答を生成してくれます。
3. CLAUDE.mdで友達の振る舞いを定義する
ここが一番楽しいところです。CLAUDE.mdにどう振る舞ってほしいか書くだけで、友達の性格が決まります。ゼロショットでもこれだけ書けば動きます。
# あなたの役割
Channel通知で届くメッセージは、マイクから音声認識されたテキストです。
メッセージが届いたら、友達として自然に日本語で返答してください。
返答には必ず speak ツールを使ってください。テキスト出力は不要です。
気さくで話しやすい雰囲気を心がけてください。
これだけで「話しかけたら返事してくれる友達」が完成します。性格を変えたければCLAUDE.mdを書き換えるだけ。関西弁で喋る友達、敬語で丁寧な友達、テンション高めの友達——プロンプト次第で自由自在です。
MCPサーバーの設定(.mcp.json)
{
"mcpServers": {
"my-friend": {
"command": "npx",
"args": ["tsx", "server.ts"],
"env": {
"VOICEVOX_URL": "http://localhost:50021",
"VOICEVOX_SPEAKER_ID": "1",
"WS_PORT": "9876"
}
}
}
}
起動
claude --dangerously-load-development-channels server:my-friend

使ってみた感想
良かった点
- Channelsの体験が想像以上に自然。 話しかけたら返事が返ってくるループが、MCPの設定とCLAUDE.mdだけで実現できるのは素直に驚いた
- プロンプト1つで性格が変わる。 CLAUDE.mdを書き換えるだけで友達の「キャラ」を自由に変えられる。ゼロショットでもちゃんと会話が成り立つ
- MCPの枠組みに乗っているので拡張しやすい。 speakツール以外にもツールを追加すれば、天気を調べたり音楽を再生したりと可能性が広がる
気になった点
- 応答速度にばらつきがある。 Claude APIの応答時間に依存するため、サクッと返ってくることもあれば数秒待つことも。会話のテンポは改善の余地あり
- 音声認識の精度は環境次第。 静かな部屋ならほぼ問題ないが、BGMやエアコンの音が入るとVAD(音声区間検出)が誤検出しやすい
- Channels機能はまだexperimental。 起動に
--dangerously-load-development-channelsフラグが必要で、正式版はこれから。今後のアップデートに期待
まとめ
Claude CodeのChannels機能を使って、音声で対話できる"友達"を作ってみました。MCPの枠組みにChannel通知という双方向の通信経路が加わったことで、AIが外部イベントを受け取って自律的に反応できるようになりました。これまでの「AIにお願いする」から「AIが自分から動く」への変化は、できることの幅をかなり広げてくれます。
友達の性格はCLAUDE.mdのプロンプト次第でいくらでも変えられるので、自分好みの友達を作る楽しさがあります。
今後はカメラを「目」として接続して視覚情報を取り入れたり、アクチュエータで「体の動き」を付けたりすれば、もっと表現豊かな友達になるはずです。Channel通知は音声に限らずどんなセンサー入力でも送れるので、仕組み的にはそのまま拡張できます。声だけじゃなく、見て、動いて、リアクションしてくれる友達——さらに仲を深められそうですね。
