新しく買った炊飯器には、炊き上がりのメロディが入っています。電子レンジは終わると鳴り、洗濯機も鳴ります。どれも工場を出るときに鳴る設定になっていて、鳴らしたくない人があとから切ります。
作った人が、鳴ったほうが親切だと考えたからです。台所で他のことをしている人には、たしかにそうです。夜中に使う人には、そうではありません。
既定値には、作った人が想像した使い方が入っています。想像が当たっていれば親切で、外れていれば、一つずつ切って回る作業になります。
だから、外れる確率が高いと分かっているときは、何も入れないという選択があります。
既定値が一つもない
ターミナルで動く AI を何体も並べて動かすとき、九枚のマスを順に見て回ることになります。MulmoTerminal はそのための画面で、一マスが一体の AI にあたります。無料で、オープンソースとして公開されています。
マウスでマスをクリックして、次のマスをクリックして、また次。キーボードでできたら速いのにと思います。
設定を見ると、キーの割り当ては書けます。ただし既定値が一つもありません。
Cmd+T で新しいタブ、Cmd+W で閉じる。これが無いアプリのほうが珍しいので、なぜ設定しないと使えないのかと思います。
割り当てたキーは、中のプログラムから奪われる
理由があって、それはターミナルを持つアプリ特有のものです。
ターミナルの中では、あらゆるキーに意味があります。less と vim は PageDown を使い、シェルは Ctrl+A や Ctrl+E や Ctrl+K を使い、エディタは Ctrl+X や Ctrl+S を使います。AI 自身もページ送りに使います。
アプリ側がキーを取ると、必ず何かが壊れます。
普通のアプリなら、Cmd+T は誰も使っていないと仮定できます。ターミナルを持つアプリでは、その仮定が成り立ちません。
何が中で動いているかを知っているのは、使っている人だけです。だから既定値を置かず、書いた人だけが不便になる形にしています。炊飯器のメロディを最初から切って出荷するのに近い判断です。
逃げ道が二つ用意されている
奪われると言っても、完全に失うわけではありません。
一つは、修飾キーを完全一致で判定するところです。修飾なしの PageDown を割り当てても、Shift+PageDown は奪われません。ターミナルのスクロールはそちらで遡れます。当たり前の判定ですが、これがあるおかげで、割り当てたら完全に使えなくなるを避けられています。
もう一つは、日本語入力の変換中は常に素通しするところです。これが無いと、PageDown を割り当てた瞬間に変換候補をめくれなくなります。日本語で AI に指示を出すなら、必ず気になるところです。
書き方
{
"keymap": {
"zoom-next": "PageDown",
"zoom-prev": "PageUp"
}
}
この設定が無ければ、機能ごと無効です。
拡大用と格子用は、別のキーにする
代表的な間違いがここです。動かすものが二種類あって、効く場面が違います。
拡大対象を動かすものは、拡大しているときだけ効きます。カーソルを動かすものは、格子を見ているときだけ効きます。後者は、選んでいるマスが浮き上がって、端まで行くとページも切り替わります。
この二つには別々のキーを割り当てます。一つのキーは一つの動作にしか解決されないので、両方を割り当てると片方が効きません。どちらが負けたかは、サーバーの起動時に警告として出ます。
黙って片方を捨てるのではなく起動時に言うので、割り当てたのに効かないで悩む時間が消えます。
端では止まる
もう一つ、仕様として知っておく点があります。端では止まって、巻き戻りません。
先頭での前へと、末尾での次へは、仕様として何も起きません。ターミナルが二つだけだと、押した回数の約半分が無反応になります。
巻き戻らないのは、環状に回るといま何枚目にいるかが分からなくなるからです。二枚しかないときは不便に見えますが、明記されているので不具合として追わなくて済みます。
Mac のファンクションキーに注意
Mac のノートには、独立した Page Up と Page Down がありません。Fn と上下の矢印を使います。
二打にすれば、奪う範囲が狭くなる
続けて二つ押す形も書けます。これが実用的です。
一打のキーは貴重です。ターミナルから奪うことになるので。二打にすれば、最初の一打だけを奪う形にできます。最初の一打にめったに使わないキーを選べば、実質的にほとんど奪いません。
そもそも割り当てできない組み合わせがある
ブラウザが先に取ってしまうキーもあります。設定のページに一覧があります。これも、書いてみて効かないで悩まないための情報です。
反映にはアプリの再起動が必要
この設定はパソコン全体のものなので、アプリの起動時に一度だけ読まれます。手で書いたら再起動して、タブを再読み込みします。
使ってみる
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/config.json です。無ければ作ります。
{
"keymap": {
"zoom-next": "PageDown",
"zoom-prev": "PageUp"
}
}
この設定は起動時に一度だけ読まれるので、アプリを再起動してタブを再読み込みします。
マスを拡大して PageDown を押し、拡大している相手が切り替われば成功です。起動時に警告が出ていたら、同じキーを二つの動作に割り当てています。
やめるときは、keymap ごと消せば何も割り当てられていない状態に戻ります。既定値はありません。
まとめ
既定値には、作った人が想像した使い方が入っています。炊飯器のメロディは台所で他のことをしている人には親切で、夜中に使う人には邪魔です。
ターミナルを持つアプリでキーを取ると、中で動いているプログラムから必ず何かを奪います。何が動いているかを知っているのは使っている人だけなので、MulmoTerminal は既定値を置いていません。
割り当てても Shift を足したものと日本語入力の変換中は素通しされるので、完全に失うわけではありません。二打にすれば、奪う範囲をさらに狭くできます。
