🚽

トイレから音声入力でAI部下10人を指揮したらTDD(Toilet Driven Development)という開発手法が確立されてしまった

に公開

シリーズ初めての方はこちらから。

https://zenn.dev/shio_shoppaize/articles/5fee11d03a11a1


前回・前々回の記事を読んでくれた皆さん、ありがとうございます。コメントで「続き読みたい」と言ってもらえるたびに将軍以下全員で土下座しております。

https://github.com/yohey-w/multi-agent-shogun

で、今回はちょっと毛色が違う話。

トイレにいた。

スマホを握りしめて、音声入力で「全員にエンター送って」と言った。10人のAI部下が一斉に目を覚ました。

続けて「みんなに元気よく社訓を言わせよ」と言った。

家老が社訓を叫び始めた。足軽1号が「いつでも出陣の構えにござる!」と復唱してきた。

トイレから。

スマホからtmux全画面
家老が社訓を叫び、足軽1号が「いつでも出陣の構えにござる!」と応える。撮影場所:トイレ。

PCの前にいないと指示出せないの、不便じゃね?

オレのmulti-agent-shogunは、Windows上のWSL(Ubuntu)で動いている。tmuxセッションに家老1人、足軽8人、将軍1人の計10ペイン。普段はPCの前に座って将軍ウィンドウに指示を打ち込む。

でも考えてみてほしい。

寝る前にベッドから「明日のタスク仕込んどいて」と言いたい。散歩中に「あのバグ直しといて」と言いたい。トイレで「進捗どう?」と聞きたい。

スマホから将軍ウィンドウに接続できればいい。

まず登場人物を整理する。

【自宅のPC】
  Windows
    └─ WSL ← Windowsの中にLinuxが住んでる。AI部下はここで動いてる
        └─ tmux ← AI部下10人の「部屋」。電源切っても部屋は残る
            ├─ 将軍(ペイン0)
            ├─ 家老(ペイン1)
            └─ 足軽1〜8(ペイン2〜9)

【外からスマホで繋ぎたい】
  Android
    └─ Termux ← スマホにあの黒い画面を出すアプリ
        └─ SSH ← 黒い画面から自宅PCにログインする仕組み
            └─ Tailscale ← 外からでも自宅PCに届く「道」を作る

つまりこういうこと:

名前 一言で言うと 役割
WSL Windowsの中のLinux AI部下たちが住んでる場所
tmux 画面分割ツール AI部下10人の「部屋」。スマホを閉じても部屋は消えない
Tailscale 外から自宅に届く道 カフェからでもトイレからでも自宅PCに繋がる
SSH その道を歩く足 Tailscaleの道を通って自宅PCにログインする
Termux スマホの黒い画面 SSHを使うために必要。スマホに入れるだけ

普通、自宅のPCに外からアクセスしようとすると、ルーターのポート開放とか、グローバルIPとか、DDNSとか、VPNサーバ構築とか、面倒なことを山ほどやらないといけない。

Tailscaleが、それを全部すっ飛ばしてくれる。 入れたら道ができる。SSHでその道を歩く。歩いた先にtmuxの部屋がある。部屋にはAI部下10人が待ってる。

全部無料。特殊なインフラは何もいらない。

https://tailscale.com/

WSLにTailscaleを入れる — そしてハマる 🔥

curl -fsSL https://tailscale.com/install.sh | sh

Tailscaleインストール
いつものワンライナー。ここまでは順調だった。

普通なら次は sudo tailscale up で終わる。ブラウザが開いて、Googleアカウントでログインして、おしまい。

WSLにブラウザがあればな。

試行錯誤の嵐
^Ccontext canceledsudo tailscale up。ダメ。sudo tailscale login。ダメ。--qr。ダメ。--force-reauth。ダメ。全部ダメ。

WSLにはブラウザがない。tailscale up は認証URLを表示してくれるはずだが、表示される前にハングする。4回Ctrl+Cした。

「もう帰りたい」と思った。トイレなのに。

Auth key方式で一発解決

ブラウザが使えないなら、ブラウザを使わなければいい。

Tailscaleの管理画面(これはPC側のブラウザで開ける)から Auth key を発行して、コマンドに直接渡す。

Settings → Keys → Generate auth key...

Auth key生成ダイアログ
Descriptionに「WSL」と入れて Generate key。これだけ。

生成されたキーをコピーして:

sudo tailscale up --authkey tskey-auth-XXXXXXXXXXXX

authkeyコマンド
--authkey で一発。ブラウザ不要。WSLの民はこれ一択。

一瞬で繋がった。さっきの30分は何だったのか。

繋がった 🎉

Tailscale管理画面のMachinesを見る。

両方Connected
desktop(WSL)と samsung(Android)、両方 ● Connected。

WSLが 100.109.3.74、Androidが 100.70.146.72。同じTailscaleネットワークに入った。

世界中どこからでも、このWSLに到達できる。

あとはSSHとTermuxだけ。

WSL側でSSHサーバを起動する(「道を歩く足」の受け入れ準備):

sudo apt install -y openssh-server
sudo service ssh start

スマホにTermux(あの黒い画面をスマホに出すアプリ。無料)を入れる。

https://termux.dev/

Termuxを開いたら:

pkg update && pkg install openssh
ssh あなたのユーザー名@あなたのTailscale IP

パスワードを入れる。

multi-agent-shogunはtmuxセッションが2つある。

  • shogun — 将軍(指示を出す窓口)
  • multiagent — 家老+足軽1〜8(実働部隊の9ペイン)

まず将軍に繋ぐ。

tmux attach -t shogun

将軍ウィンドウが開いた。ここに指示を打ち込む(or 声で喋る)。

次に、部下の様子を見たい。Termuxの+ボタンで新しいウィンドウを開いて、もう1本SSHを繋ぐ。

ssh あなたのユーザー名@あなたのTailscale IP
tmux attach -t multiagent

スマホの画面に、見慣れたtmuxの9ペインが広がった。

家老がいる。足軽がいる。全員待機中。

Termuxで将軍+multiagent
+ボタンで新しいウィンドウを開いて、もう1本SSHを繋ぐ。将軍とmultiagentを切り替えながら全軍を操作できる。

で、試しに音声入力で言ってみた。

「みんなに元気よく社訓をいわせよ」

スマホからtmux全画面(再掲)
家老:「以上、家老の八箇条にござる!」 足軽1号:「足軽1号、いつでも出陣の構えにござる!」

全員答えた。

TDD(Toilet Driven Development)の誕生である。

実はもう1コマンドで繋がる

multi-agent-shogunの first_setup.sh を実行した時点で、WSLの .bashrc にaliasが仕込まれている。

  • css → 将軍に繋がる
  • csm → 家老+足軽に繋がる

つまりTermuxからは、SSHでWSLにログインしたらもうaliasが使える。

ssh あなたのユーザー名@あなたのTailscale IP
css    # 将軍に繋がる

部下の様子も見たいときは、+ボタンで新しいウィンドウを開いてもう1本SSHを繋ぐ。

ssh あなたのユーザー名@あなたのTailscale IP
csm    # 家老+足軽の9ペインが広がる

切り方

用が済んだらTermuxのウィンドウをスワイプで閉じるだけ。SSHは切れるが、tmuxセッションは生き残る。karoもashigaruも、オレがスマホを閉じた後も黙々と作業を続けている。

次に繋いだときも同じ。SSHでログインして css。続きから。

音声入力 × AI将軍 = 最強

Androidには音声入力がある。Termuxでも使える。つまり:

  1. Termuxを開く
  2. SSHでログインして css(これだけはタイプ)
  3. あとは全部、声で指示を出す

「バグ直しといて」→ 将軍がYAML書いて家老を起こす → 家老が足軽に振る → 足軽が直す。

オレはスマホに向かって喋っただけ。

初代の記事で「音声入力の悲劇」というスクショを載せた。殿(オレ)の音声入力が適当すぎて将軍が困惑するやつ。

あの適当さが、モバイル運用では最大の武器になった。

将軍は多少の誤字を解釈してくれる。「しゃくんをさけべ」が「社訓を叫べ」になろうが「車訓を叫べ」になろうが、文脈で理解する。相手がAIだから、打ち間違いを気にしなくていい。

スマホのちっちゃいキーボードでコマンドを正確に打つ必要はない。自然言語で喋れば、あとは将軍が全部やる。

WSL特有のハマりポイント

Tailscaleが再起動で死ぬ

WSLはデフォルトでsystemdが有効でない環境がある。PC再起動したらTailscaleが止まってる。

# WSL起動時に叩く
sudo tailscaled &
sudo tailscale up
sudo service ssh start

面倒なら起動スクリプトに仕込んでおく。オレはまだ手動で叩いてる。

tmuxは死なない

SSHが切れても、tmuxセッションは死なない。電車でトンネルに入っても、トイレから出ても、SSHでログインして css と打てば続きから。

まとめ

Before:
  PCの前に座る → 将軍ウィンドウに指示 → 待つ

After:
  どこでもスマホ → 声で指示 → AI部下が動く
  ベッドから。散歩中から。トイレから。

必要なもの:

  • Tailscale(無料)
  • SSH(標準装備)
  • Termux(無料)

全部無料。セットアップはハマらなければ10分。

AI部下が10人いて、自然言語で指示が出せて、音声入力が使えるなら、開発はどこでもできる。

TDD — Toilet Driven Development。

テスト駆動開発じゃない方のTDD。


https://github.com/yohey-w/multi-agent-shogun


おまけ:家老の八箇条

「社訓を叫べ」と命じたら、家老が自分で考えた社訓を全員に共有し始めた。

オレは社訓なんて作ってない。家老が勝手に作った。

スクショをよく見ると、家老のペインに「忘れたら切腹!」「正データはYAML!」「通信ロストを見逃すな!」とか書いてある。

全部、CLAUDE.mdに書いてあるルールを家老なりに咀嚼して「社訓」にしたっぽい。指示書を社訓にするの、中間管理職すぎる。

八箇条の中身は毎回変わる。自分でshogunを立てて「社訓を叫べ」と言ってみてほしい。何が出てくるかはkaroの気分次第。

Discussion