設定ファイルの行が勝手に消える問題 — MulmoTerminal が config.json の知らない項目を保存で捨てない理由

設定ファイルの行が勝手に消える問題 — MulmoTerminal が config.json の知らない項目を保存で捨てない理由

課題:月曜に書いた設定が、水曜に消えている

先週、~/.mulmoterminal/config.json に 1 行足しました。ターミナルのフォントを日本語が崩れないものに変える設定です。

水曜日、なぜか元に戻っています。ファイルを開くと、その行がありません。書き忘れたのか、書いたつもりだったのか、自分でも分かりません。

これは、設定ファイルを読み書きするアプリに広く見られる既定の挙動から起きます。

問題は版が混ざったときです。 新しい版で足した項目は、古い版から見ると知らない項目です。古い版が何かを保存した瞬間に、その行が消えます。そして消えたことは、どこにも表示されません。

既存のやり方とそのコスト

版を厳密に固定する

グローバルに 1 つの版だけを使う運用にすれば、問題は起きません。

ただし MulmoTerminal は npx mulmoterminal@latest で起動する設計です。これは毎回いちばん新しい版を取ってきて動かすという意味で、版を固定していません。そのうえ、次のような状況が普通にあります。

このどれでも、同じ設定ファイルが違う版から読み書きされます。通常のインストール型アプリより、版が混ざる状況が起きやすい作りになっています。

設定ファイルを 2 つに分ける

項目ごとに別ファイルに書けば、無関係な版の保存で消されない、という回避策はあり得ます。

ただしこれは「ユーザが版の違いを知って、どの項目がどの版の管轄かを覚えておく」ことを要求します。普通に使っている人の仕事ではありません。

MulmoTerminal の解決:知らない項目はそのまま書き戻す

MulmoTerminal は、自分が知らない項目を捨てません。知らないまま、そのまま書き戻します。

対象は 2 種類あります。

結果として、新しい版で設定した内容が古い版を使ったあとも残ります。2 つの版を並べて動かしても消えません。しばらく前の版に戻しても、戻ってきたときに設定は残っています。

冒頭のフォントの行は、この作りのおかげで消えません。

詳細

同じ理由で、タイプミスも残る

ここが面白い帰結です。

copyOnSelect を copyOnSlect と書き間違えたとします。MulmoTerminal はこれを「知らない項目」として扱います。知らない項目は書き戻されるので、ファイルに残ります。

これは意図した選択です。「設定したのに効かない」ときに、行が残っているほうが気づけるからです。

捨てる作りだと、次に保存したときにその行が消えます。すると「書いたはずなのに無い」という状態になって、書き間違えたのか書き忘れたのかが分かりません。綴りが違うことは、残っているから目に入ります。

keymap の知らない動作名は、起動時の警告にも名前が出るので、そちらを見てファイルを直接直します。

代償はゴミが溜まること

この作りには代償があります。ファイルに使わない行が残ります。

これらが全部残ります。

消す作り 残す作り
ファイルがきれい ゴミが溜まる
新しい版の設定が黙って消える 消えない
タイプミスが黙って消える タイプミスが目に見える

黙って消えるほうが高くつく、という判断です。設定したのに効かない症状が最も特定しづらいからです。

だから、手で掃除しないほうがいい

この仕組みがあるので、設定ファイルを手で片付けるときは注意が要ります。

「知らない項目がある」には 2 つの意味があります。

ファイルを見ただけでは、どちらか分かりません。手で掃除しないのが正解です。ゴミが残ることを受け入れる設計なので、それに従うのが一貫しています。

同じ判断が、他のところにも効いている

MulmoTerminal はこの方針を他の場所でも採っています。たとえばツールバーに出すお気に入り(paletteFavorites)の設定でも、もう存在しない項目の行を自動で消しません。

理由も同じです。「これはもう無い」を古い情報から判断すると、一度でも間違えるとまだ欲しいものを黙って消します。黙って消すより、使わない行が残るほうがよいという判断です。

ここが揃っているので、「設定を触るのが怖くなりにくい道具」になっています。

いつ効くかは、項目によって 3 通り

ちなみに、書いた項目そのものがいつ効くかは項目によって違います。

例
アプリの再起動 keymap / fontFamily / customAgents / accounts
タブの再読み込み cockpitLines / copyOnSelect
その場で prWorkdirFooter(作るたびに読み直す)、questionPaneEnabled(質問ごとに読む)

迷ったらアプリを再起動してタブを再読み込みすれば、どれでも効きます。

なお、「知らない項目を保存で消さない」という本記事の挙動は、書いた瞬間から効いています。 設定を保存する経路が 1 つしかなく、どの項目を書いたかに関係しないからです。

使ってみる

MulmoTerminal を起動した状態で、~/.mulmoterminal/config.json に、このアプリが知らない項目を 1 つ書きます。

{ "myOwnNote": "test" }

アプリを再起動して、設定画面をどれか 1 つ変えます。保存が走ればいいです。

そのあと設定ファイルをもう一度開いて、myOwnNote が残っていれば、この作りが効いています。普通のアプリなら、知らない項目は保存のときに消えます。

確かめ終わったら、その行は消してかまいません。残っていても害はありません。

ただし他の項目は、手で掃除しないでください。知らない項目は、別の版が使っているかもしれません。残っていても害はありません。

まとめ

関連: MulmoTerminal 公式ガイドの設定ページ(unknown-keys) / MulmoTerminal の copyOnSelect — ドラッグするだけでコピーする設定 / Cursor の代替としての MulmoTerminal

この記事をシェア

関連記事

記事一覧に戻る