課題:ブラウザで AI を見張っていると、同じ Wi-Fi の人に届かないか気になる
カフェの窓際で、ノートパソコンのブラウザに localhost:34567 と打ち込みます。画面に九つのマスが並んだ格子が出て、三つで AI がコードを書いている。一つは「このファイルを消していいですか」で止まっていて、枠が琥珀色に光っている。
二つ隣のテーブルの人も、同じ店の Wi-Fi に繋がっています。その人が自分のノートを開いて、こちらのパソコンのアドレスを打ち込んだら、画面に何が出るのでしょうか。
ターミナルだけで作業しているときは気になりません。黒い画面はそのパソコンの中の話です。ブラウザベースのツールに切り替えた瞬間、「どこかがポートを開けている」ことが気になり始めます。しかも AI が入っている画面です。プロジェクトのファイル名、会話の中身、直しかけのコード。それが同じ店の Wi-Fi から見えていたら、かなりいやです。
届いてしまった場合、相手に何ができるか
もし繋がったとしたら、まず九つのマスが眺められます。ディレクトリ、ブランチ、AI とのやりとり。それだけでも十分いやですが、本題はその先です。
空いているマスで新しいターミナルを開けます。 そこで打つコマンドは、こちらのパソコンで、こちらの権限で動きます。鍵のファイルを読むのでも、外へ送るのでも、消すのでもかまいません。
公式ガイドの表現を借りると、ソケットが開けば「会話の閲覧」「作業ディレクトリ配下のファイル閲覧」「ターミナルの起動」ができてしまう。三つ目が決定的です。ポートに届くことが、そのパソコンのシェルを手に入れることと同じになっています。
ログイン画面があれば話は違います。でもこのアプリにログインはありません。入口そのものが無いので、届かせないことが唯一の守りになっています。
既存のやり方とそのコスト
「とりあえず 0.0.0.0 で立てる」
Docker や SSH 越しに使うガイド記事が増えて、HOST=0.0.0.0 でサーバを立てる習慣が広がりました。「開発環境だから」という前置き付きで。
ただ、0.0.0.0 に認証を足し忘れたサーバが放置されたら、ホテルの Wi-Fi で開いた瞬間に全開です。認証を足すのが面倒だから、127.0.0.1 だけで待ち受ける作りにしておく、というのが本来の優先順位。
VPN や SSH トンネルを前提にする
もう一つの対処は「個人の責任」に逃がすこと。ツール側は何もせず、ユーザが VPN や ssh -L を張る前提にする。
これは出張先や共用ネットワークで事故ります。急いでいるとき、動けばいい、で 0.0.0.0 にする。ツール側に安全な既定が無いと、ユーザは最短の近道を選びます。
MulmoTerminal の解決:既定で 127.0.0.1 のみ、広げるには環境変数が 2 つ必要
MulmoTerminal は起動時に何も指定しなければ、ループバックアドレスだけで待ち受けます。
あなたのパソコン 同じ Wi-Fi の他の人
┌──────────────────────┐
│ MulmoTerminal │
│ 127.0.0.1:34567 ←───┼── あなたのブラウザ ○ 見える
│ │
│ ✕───┼── 隣の席のノート ✕ 届かない
└──────────────────────┘
待ち受けているのは「このパソコンの中」だけ
隣の席どころか、同じ家の別の部屋からも繋がりません。Wi-Fi に何人いても、ポートを探して回るプログラムが動いていても、届きません。
冒頭の不安への答えは、何かを設定したから安全なのではなく、何も設定しなかったから安全です。触っていないなら、そのままで正しい。
詳細
広げるには二か所を自分で書く — 片方だけでは動かない
意図して外から繋ぐこともできます。環境変数が 2 つ必要です。
① どこで待ち受けるか
| 設定する値 | 誰が届くか |
|---|---|
127.0.0.1(既定) |
このパソコンだけ |
0.0.0.0 |
全部のネットワークから |
| 特定のアドレス | そのネットワークだけ |
② どのオリジンからの接続を許すか
MULMOTERMINAL_ALLOWED_ORIGINS=http://192.168.1.10:34567
片方だけ変えても動きません。両方を自分で書かないと外に出ない設計です。一か所間違えて全開になる、ということが起こらない。
MULMOTERMINAL_HOST=localhost では油断できない
いかにも安全そうに見える指定ですが、localhost がどのアドレスを指すかは、パソコンの hosts というファイルで書き換えられます。そこで 0.0.0.0 に向けておけば、設定には localhost と書いてあるのに全開。
MulmoTerminal はここを取り違えません。判定に使うのは、設定ファイルに書かれた文字列ではなく、起動して実際に束縛されたアドレスです。それが 127.0.0.1 でなかったら、起動時に警告を出します。
起動時の警告は、気づける唯一の瞬間
警告を出す理由は、考えると当たり前です。ポートが外に開いていることは、誰も繋ぎに来ていないあいだは何の症状も出しません。動作は完全に正常。気づけるのはネットワークを調べたときか、何かが起きたあと。後者では遅いので、起動のたびに言う。
自分の設定がいま安全かどうかどこで分かるのか、への答えがこれです。 起動時のメッセージに
[security]の警告が出ていないなら、外には出ていません。
スマホから見たいだけなら、ポートを開ける必要はない
「外から見たい」の中身が「スマホから見たい」なら、ポートを開ける必要はありません。
MulmoTerminal には RemoteHost という別経路があります。Google アカウントでサインインして、スマホは mulmoserver.web.app を開く形。こちらには認証があります。しかも、通知を受けるだけでなく、AI の許可プロンプトに外出先から yes と返して続行させられます。
選択肢はこうなります。
- スマホから見たい → RemoteHost(認証あり)
- 同じ家の別のパソコンから見たい → ポートを開ける(認証なし)
後者を選ぶなら前提が 1 つ。そのネットワークにいる全員を信用できること。カフェ・空港・ホテル・コワーキングの Wi-Fi では、選ばないほうがいいです。
Docker で別マシンに置くときの正しい形
公式の Dockerfile 例では、コンテナの中で MULMOTERMINAL_HOST=0.0.0.0 にします。コンテナの外からコンテナの中に届かせるためで、「公開」の層ではありません。
docker run -p 127.0.0.1:34567:34567 ...
-p 127.0.0.1:34567:34567 で、ホストマシンの 127.0.0.1 だけに公開する。この二段構えで、[security] の警告は出つつも、実際に届くのはホストマシンのループバックからだけ、になります。SSH トンネル経由ならそれで十分。
使ってみる
既存のインストールであれば、何もしなくて既定で安全です。確かめ方は、起動したターミナルの最初に出るメッセージ。[security] の警告が無ければ、外には出ていません。
初めての方は MulmoTerminal 完全ガイド の「使い方 3 ステップ」から。
意図して外に出すときの最小シナリオ
同じ家の別のパソコンから繋ぎたいときだけです。
MULMOTERMINAL_HOST=0.0.0.0 \
MULMOTERMINAL_ALLOWED_ORIGINS=http://192.168.1.10:34567 \
npx mulmoterminal@latest
192.168.1.10 は自分のパソコンのアドレスに置き換えます(Mac なら ipconfig getifaddr en0)。環境変数は 2 つとも必要です。片方だけでは接続は通りません。
起動すると [security] の警告が出ます。想定どおりです。
戻すのは簡単です。環境変数を付けずに起動し直せば、既定の 127.0.0.1 に戻ります。設定ファイルには何も書かれていないので、消すものもありません。
スマホから見たいだけなら、ポートを開ける必要はありません。ツールバーの RemoteHost を開いて Connect、スマホで mulmoserver.web.app を開くだけです。
まとめ
- ブラウザベースの AI 道具は、ポートを開けている以上「同じネットワークから届かないか」を考える必要がある
- MulmoTerminal には認証が無いので、ポートに届くこと=シェルを渡すことと同じ
- 既定で
127.0.0.1だけで待ち受け、広げるには環境変数が 2 つ必要。片方だけでは効かない localhostと書いても hosts で迂回されるので、判定は実際に bind されたアドレスで行う。外向きなら起動時に警告- スマホから見たいだけなら、ポートを開けずに RemoteHost を使う(認証あり)
関連: MulmoTerminal 公式ガイドの RemoteHost・Docker ページ / MulmoTerminal のスマホ・リモコン / Cursor の代替としての MulmoTerminal / VSCode + Claude Code の代替としての MulmoTerminal


