MulmoTerminal の .mulmoterminal.local.json — 同じリポジトリを何本も clone したとき、色だけ分ける

MulmoTerminal の .mulmoterminal.local.json — 同じリポジトリを何本も clone したとき、色だけ分ける

課題:同じリポジトリを 3 本 clone すると、全部同じ色のマスになる

AI を並列で動かす方法は 2 つあります。

後者を使うことがあります。acme / acme2 / acme3 と並べて、それぞれに常駐の AI を置く、という使い方です。MulmoTerminal のグリッドで、常時 3 本のうちどれかで作業しています。

マスに色を付けると見分けられるようになりますが、プロジェクトの色設定(.mulmoterminal.json)はリポジトリの中にあります。clone すれば一緒に来るので、3 本とも同じ色になります。

同じ型の機械が 3 台並ぶのと同じ状態です。工場だと誰かが号機の札を付けますが、clone した側は共有の設定を書き換えると全員の .mulmoterminal.json を書き換えてしまうので、個別に印は付けられません。

9 枚のマスのうち 3 枚が同じ顔をしていて、どの clone で作業していたかが分からなくなります。

違うべきなのは、見分けるための色だけ

ここが整理のポイントです。

プロジェクトとしては同じものなので、名前もモデルも配色の系統も同じでいい。違うべきなのは、グリッドで見分けるための色だけ。仕様書は 1 冊で、札だけ 3 枚。

共有ファイルの隣に、clone 1 本だけの設定を置く

共有の .mulmoterminal.json の隣に、.mulmoterminal.local.json を置けます。

// .mulmoterminal.json — プロジェクトの設定。
// 色も含めて単体で完結しているので、clone を 1 本しか持たない人はこれだけでよい。
// コミットして構わない
{
  "name": "acme-web",
  "theme": "nord",
  "badgeColor": "#1b3479",
  "headerColor": "#2d4ea9",
  "headerTextColor": "#ffffff",
  "orderPriority": 30
}

// .mulmoterminal.local.json — この clone だけ。.gitignore に入れる
{
  "badgeColor": "#27b4a8",
  "headerColor": "#4ed0c5",
  "orderPriority": 65
}

共有側が 単体で完結しているのが設計上の要点です。clone を 1 本しか持たない人は共有ファイルだけでよく、2 枚目の存在を知る必要がありません。

規則は 5 つ

1. local が勝つ。ただしキー単位で

.mulmoterminal.local.json に書いていないキーは、共有ファイルの値がそのまま残ります。上の例なら、name と theme と headerTextColor は共有側から来ます。

2. キーごと丸ごと置き換える。深いマージはしない

.mulmoterminal.local.json の headerColor は、共有側の headerColor を丸ごと置き換えます。これは意図的です。

1 キー = 1 つの意図だからです。深くマージする作りだと、「実際に効いている配色がどちらのファイルにも書いていない」状態になります。そうなると、直そうとしたときに 2 枚を見比べながら組み立てることになって、追えません。

2 つのファイルから組み立てないと分からない配色より、1 か所で読み切れるほうが予測しやすい、という選択です。

3. 検証は同じように効く

local は規則を迂回する手段ではありません。#rrggbb でない色、綴り違いのキーは、共有ファイルに書いたときと同じように落とされます。

4. 相対パスの意味も同じ

icon や sound のパスは、ファイルではなくフォルダを基準に解決されます。どちらに書いても、同じパスは同じ場所を指します。

5. どちらか片方だけでも動く

local だけの clone もあり得ますし、片方が壊れていてももう片方は生きたままです。

どちらを書き換えても、すぐ反映される

3 本並べて色を決めるときに、これが無いと毎回タブを再読み込みします。「濃すぎた、もう少し薄く」を 10 回繰り返す作業なので、即反映かどうかで体験が変わります。

AI にファイルを書かせたときは即座に効きます。エディタで手書きしたときはタブを再読み込みします。これは共有側も local 側も同じです。

.gitignore に 1 行だけ、先に足す

.mulmoterminal.local.json は共有してはいけないので、.gitignore に入れます。

# .gitignore
.mulmoterminal.local.json

これが入っていないと、git から見て未追跡ファイルとして現れます。commit で混ぜ込んでしまうと、clone した全員の色が揃うという元の問題に戻ります。

worktree も、同じファイルに書く

MulmoTerminal で worktree を切ると、プロジェクトの設定のコピーが自動で worktree に書き込まれます。その書き込み先が .mulmoterminal.local.json です。

これで worktree の git status が汚れません(.gitignore に入っているので)。

このファイルは 2 つの役目を兼ねています。

どちらも「共有設定の上に重なる、この checkout 1 本だけのもの」なので、同じ場所でよい、という整理です。

worktree 側に既に .mulmoterminal.local.json がある場合、MulmoTerminal は上書きしません。手で書いた色があるならそれが答えなので、上書きする筋合いが無いからです。

効いていないときの調べ方

Settings → Directory settings を開くと、ディレクトリごとに次が出ます。

変えたのにマスの色が違うときの答えは、たいていここに出ます。「共有側を編集したのに、.mulmoterminal.local.json が同じキーを持っていた」が一番多いパターンです。

2 枚あることを忘れるのがこの仕組みの唯一の弱点なので、画面がそれを言ってくれるのは助かります。

使ってみる

既存の MulmoTerminal があれば追加のインストールは不要です。初めての方は MulmoTerminal 完全ガイド の「使い方 3 ステップ」から。

動作確認の最小シナリオ

  1. 対象のリポジトリの .gitignore に 1 行足す:
    .mulmoterminal.local.json
  2. 共有ファイルの隣(プロジェクトフォルダ直下)に .mulmoterminal.local.json を作る
  3. 中身を書く(共有側と違う色を 1〜2 つ):
    { "badgeColor": "#27b4a8", "headerColor": "#4ed0c5" }
  4. その clone で開いているマスのヘッダーが新しい色になり、他の clone は共有の色のままなら成功

やめるときは、.mulmoterminal.local.json を消せば共有ファイルの色に戻ります。

まとめ

関連: MulmoTerminal 公式ガイドの .mulmoterminal.local.json / MulmoTerminal の git worktree 隔離 / MulmoTerminal でプロジェクトごとに色と名札を付ける

この記事をシェア

関連記事

記事一覧に戻る