行き止まりの私道の、いちばん奥の家。窓は開いていて、自転車が出したままになっています。
用のない人が通りません。その道は、そこに行く人しか入らない道だからです。鍵を強くしたのではなく、たどり着くまでに理由が必要な場所に建っています。
同じ家が表通りに面していたら、まったく違う暮らしになります。門を閉めて、鍵を増やして、夜は雨戸を引く。守る量が変わるのは、家が変わったからではなく道が変わったからです。
守りの要る量は、どういう道の先にあるかで決まります。
カフェの窓際で
土曜の午後、カフェの窓際の席。ノートパソコンを開いて、ブラウザのアドレス欄に localhost:34567 と打ち込みます。
画面に九つのマスが並んだ格子が出てきて、そのうち三つで AI がコードを書いています。一つは考え中。一つはこのファイルを消していいですかで止まっていて、枠が琥珀色に光っている。
そのとき、二つ隣のテーブルの人も同じ店の Wi-Fi につながっています。その人が自分のノートを開いて、こちらのパソコンのアドレスを打ち込んだら、画面に何が出るでしょうか。
MulmoTerminal は AI を何枚ものマスに並べて見張るための画面で、npx の一行で立ち上げてブラウザで開きます。無料で、オープンソースとして公開されています。
結論から言うと、見えません。繋がりもしません。ただ、その理由がたまたまではないことを知っておく価値があります。
この不安は、ブラウザで動くことから来ている
ターミナルだけで作業しているうちは、あまり気にしません。黒い画面はそのパソコンの中の話なので。
ブラウザで開く道具に変えた瞬間に、これが気になり始めます。ブラウザで開くということは、どこかがポートを開けているということなので。
しかも AI が入っている画面です。自分のプロジェクトのファイル名、会話の中身、直しかけのコード。それが同じ店の Wi-Fi から見えていたら、かなりいやです。
届いてしまったら、隣の席の人に何ができたか
もし繋がったとしたら、その人はまず九つのマスを眺めることになります。どのプロジェクトを開いているか、枝の名前、AI とのやりとり。
それだけでも十分いやですが、本題はその先です。
空いているマスに、その人は新しいターミナルを開けます。そこで打つコマンドは、こちらのパソコンで、こちらの権限で動きます。鍵のファイルを読むのでも、外へ送るのでも、消すのでもかまいません。
ガイドは、ソケットを開ければ、会話の閲覧も、その作業フォルダの下のファイルの閲覧も、ターミナルの起動もできてしまうと書いています。
三つ目が決定的です。ポートに届くことが、そのパソコンのシェルを手に入れることと同じになっています。
ログイン画面があれば話は違います。でもこのアプリにログインはありません。入口そのものが無いので、届かせないことが唯一の守りになっています。表通りに面していない家に建てる、という選択です。
いまどうなっているか
あなたのパソコン 同じ Wi-Fi の他の人
┌──────────────────────┐
│ MulmoTerminal │
│ 127.0.0.1:34567 ←───┼── あなたのブラウザ ○ 見える
│ │
│ ✕───┼── 隣の席のノート ✕ 届かない
└──────────────────────┘
待ち受けているのは「このパソコンの中」だけ
localhost は、このパソコン自身を指す住所です。127.0.0.1 とも書きます。外からは届きません。
届いてしまう設定にすると、こうなります。
┌──────────────────────┐
│ MulmoTerminal │
│ 0.0.0.0:34567 ←─────┼── あなたのブラウザ ○
│ ←───┼── 隣の席のノート ○ ← ここで新しい
└──────────────────────┘ ターミナルを開ける
右下が、この記事の全部です。
一番狭いところで待っている
サーバーは自分のパソコンの中からしか応答しません。隣の席どころか、同じ家の別の部屋からも繋がりません。
これで盗られる経路が一本消えます。Wi-Fi に何人いても、ポートを探して回るプログラムが動いていても、届きません。
冒頭の不安に対する答えは、何かを設定したから安全なのではなく、何も設定しなかったから安全です。触っていないなら、そのままで正しい。
どうしても外から開けたいなら、二か所
意図して外に出すこともできます。
一つ目は、どこで待ち受けるかを変えることです。
| 設定する値 | 誰が届くか |
|---|---|
127.0.0.1(既定) |
このパソコンだけ |
0.0.0.0 |
全部のネットワークから |
| 特定のアドレス | そのネットワークだけ |
二つ目は、どのページから繋いでよいかを足すことです。
MULMOTERMINAL_ALLOWED_ORIGINS=http://192.168.1.10:34567
一つ目だけ変えても動きません。両方を自分で書かないと外に出ないので、うっかり全開にはなりません。一か所間違えて全開になる、という作りにはなっていません。
localhost と書いたのに、で油断できない理由
MULMOTERMINAL_HOST=localhost と書くと、いかにも安全そうに見えます。
ところが localhost がどのアドレスを指すかは、パソコンの中の hosts というファイルで書き換えられます。そこで 0.0.0.0 に向けておけば、設定には localhost と書いてあるのに全開です。
MulmoTerminal はここを取り違えません。判定に使うのは設定に書かれた文字列ではなく、起動して実際に束縛されたアドレスです。それが 127.0.0.1 でなかったら、起動時に警告を出します。
警告を出す理由も、考えると当たり前です。ポートが外に開いていることは、誰も来ていないあいだは何の症状も出しません。動作は完全に正常です。気づけるのは、ネットワークを調べたときか、何かが起きたあと。後者では遅いので、起動のたびに言う。
自分の設定がいま安全かどうかどこで分かるのか、への答えがこれです。起動時のメッセージに何も出ていないなら、外には出ていません。
スマホから見たいなら、別の道がある
外から見たいの中身がスマホなら、ポートを開ける必要はありません。
MulmoTerminal には RemoteHost という別の経路があります。Google アカウントでサインインして、スマホ側は mulmoserver というサイトを開く形です。そちらには認証があります。
しかも、できることは通知を受けるだけではありません。AI がこのコマンドを実行していいですかで止まっているときに、外出先から yes と返して続行させられます。
選択肢はこうなります。スマホから見たいなら RemoteHost で、認証があります。同じ家の別のパソコンから見たいならポートを開けることになって、そこに認証はありません。
後者を選ぶなら前提が一つあります。そのネットワークにいる全員を信用できること。カフェの Wi-Fi では、選ばないほうがいいです。
使ってみる
MulmoTerminal は、次の一行で立ち上がります。ターミナル(Windows なら PowerShell、Mac ならターミナル)を開いて、そのまま貼り付けます。
npx mulmoterminal@latest
ブラウザが開いて http://localhost:34567 が表示されれば成功です。インストールという作業はなく、合わなければ閉じるだけで終わります。止めるときは、打ったターミナルで Ctrl + C を押します。
動かない場合、足りないものは次の二つのどちらかです。
| 確かめ方 | 無ければ | |
|---|---|---|
| Node.js 22.12 以上 | node -v |
nodejs.org/ja/download の LTS。入れたらターミナルを閉じて開き直す |
| Claude Code | claude --version |
macOS は curl -fsSL https://claude.ai/install.sh | bash、Windows は irm https://claude.ai/install.ps1 | iex。そのあと claude でログイン |
Claude Code は、AI をターミナルから使うためのコマンドです。使うには Claude の有料プラン(Pro / Max / Team / Enterprise)か API のアカウントが必要で、無料プランには含まれていません。MulmoTerminal 自体は無料で、AI の使用量はその契約から引かれます。
いまの状態を確かめるには、起動したターミナルの最初に出るメッセージを見ます。何も警告が出ていなければ、外には出ていません。それが既定です。外に出ている場合は、起動時に警告が出ます。他に気づく手段が無いためです。
意図して外に出すときは、環境変数を二つ付けて起動します。一つだけでは動きません。
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 で出ます。
繰り返しますが、そのネットワークにいる全員を信用できるときだけにしてください。
スマホから見たいだけなら、ポートを開ける必要はありません。ツールバーの RemoteHost を開いて、Connect で Google アカウントでサインインします。スマホ側は mulmoserver.web.app を開いて、同じアカウントでサインインします。こちらには認証があります。
元に戻すのは簡単です。外に出す設定は起動のときに環境変数を付けただけなので、付けずに起動し直せば戻ります。設定ファイルには何も書かれていないので、消すものもありません。
まとめ
行き止まりの道の奥の家は、鍵が強いから安全なのではなく、用のない人が通らない道の先にあります。守りの要る量は、どういう道の先にあるかで決まります。
MulmoTerminal にログイン画面が無いのは手抜きではありません。ポートに届くことがそのパソコンのシェルを取ることと同じなので、届かせないほうを守りにしています。
広げるには二か所を自分で書く必要があって、広げたら起動のたびに警告が出ます。スマホから見たいだけなら、認証のある別の経路があります。
