MulmoTerminal の日本語フォント — AI の入力欄の右端が一行ごとにずれる理由

MulmoTerminal の日本語フォント — AI の入力欄の右端が一行ごとにずれる理由

課題:AI の入力欄の枠が、一行ごとにずれる

ターミナルで動く AI に日本語で指示を打っていると、入力欄の枠の右端がこうなります。

╭──────────────────────────────╮
│ この関数を直してください     │
│ テストも足してほしいです  │
╰──────────────────────────────╯

文字は読めます。でも枠が揃っていません。英語だけ打っているときは、こうなりませんでした。

同じプロジェクトで Claude Code や Codex を使っていて、

AI の画面はほとんどが罫線でできているので、少しのずれが積み重なって読みにくくなります。

原因はフォントで、理由は単純

ターミナルは文字の格子です。80 桁 × 24 行のような格子になっていて、半角文字 1 つが 1 桁、全角文字が 2 桁を占める、という約束で動きます。中のプログラムもこの数字を使って出力の幅を計算しています。

ターミナル側は、全角文字にきっかり 2 桁分を確保します。ところがフォントの側で、全角の幅が半角のちょうど 2 倍になっていないことがあります。2 倍より少し狭いフォント、たとえば 1.95 倍だと、日本語 20 文字で 1 桁ぶんずれます。

英数字だけなら 1 文字 1 桁の約束が守られて揃います。日本語が混ざった瞬間に、約束が破れた分だけずれます。

既存の回避策とそのコスト

フォントの指定を変えずに我慢する

AI の返答は読めるので、見えなくなるわけではありません。ただし罫線が崩れた画面はどこまでが入力欄で、どこからが出力かが目で判別しにくく、集中が削られます。

一日に何時間も AI と対話するなら、2 文字ぶんのズレでも疲労が蓄積します。

設定で fontFamily に Menlo や Consolas だけを書く

英数字が崩れないフォントだけ指定しても、日本語が入ってくるとブラウザがフォールバックで別の日本語フォントを取ってきます。Mac なら Hiragino Sans、Windows なら Yu Gothic。これらは等幅ではないので、同じ現象になります。

Menlo + Yu Gothic の組み合わせは、「英文は等幅・和文はプロポーショナル」で、2 倍にはなりません。

日本語フォント単独(MS ゴシックだけ、など)を指定する

MS ゴシック単独なら 2 倍にはなります。ただし英数字まで全角で描くフォントなので、code や関数名が間延びして読みにくくなります。コードを書くエディタでこの指定をする人はいません。

英数字は等幅、日本語は半角のちょうど 2 倍という条件を、同じフォント指定で両立する必要があります。

MulmoTerminal の解決:条件を満たすフォントを並べて、順に試す

MulmoTerminal の fontFamily 設定は、ブラウザのフォントスタックと同じ書き方で、使いたい順にフォントを並べます。

条件を満たすフォント(全角が半角の 2 倍)がいくつかあります。

フォント 入手方法 備考
Cica github.com/miiton/Cica / brew install --cask font-cica Hack + 源柔ゴシック。コードを書きやすい
HackGen github.com/yuru7/HackGen Hack + 源柔ゴシック。合字あり版も
Sarasa Mono J github.com/be5invis/Sarasa-Gothic Iosevka ベース。中国語版・韓国語版あり
Noto Sans Mono CJK JP Google Noto Google 製
MS ゴシック Windows 標準 古いが Windows に必ずある
BIZ UDゴシック Windows 10 以降 / brew install --cask font-biz-udgothic UD フォント

書き方

グローバル設定(パソコン全体)の ~/.mulmoterminal/config.json に、使いたい順で並べます。

{
  "fontFamily": "'Cica', 'MS ゴシック', monospace"
}

ブラウザは先頭から順に、パソコンに入っているものを使います。Cica が入っていれば Cica、入っていなければMS ゴシック、どちらも無ければ monospace。

設定画面の Terminal font からも変えられます。手で書く場合は、パソコンのフォント一覧に表示されているとおりの名前にします。

詳細

一か所でも壊すと、指定が丸ごと無視される

最初に戸惑う挙動です。この並びは 1 つの意図として検証されるので、1 つでも不正な項目があれば全体を破棄して組み込みの並びに戻します。

// 悪い例:MS Gothic の後ろにセミコロンが余計に入っている
{ "fontFamily": "'Cica', 'MS Gothic;', monospace" }

これだと Cica の指定も効きません。

部分的に効かせない理由は、そのほうが原因が分かるからです。半分効いていると「Cica が入っていないのかな」と別の場所を疑って探し回ります。全部戻れば「書き方を間違えた」と一発で分かる、という設計判断です。

症状から原因を引く表

症状 原因
どのフォントを指定しても何も変わらない アプリを再起動していない(グローバルは起動時に 1 度だけ読む)
特定のフォントだけ効かない そのフォントが入っていない。パソコンのフォント一覧を確認
指定が丸ごと無視された 並びに不正な項目がある。文字列全体の綴りを見直す
全体が等幅でなくなった 並びのどれ 1 つも一致せず、monospace のフォールバックに届いた

一番多いのは、1 行目の「再起動していない」です。グローバルの fontFamily はアプリの起動時に一度だけ読まれます。

プロジェクトごとに上書きできる

パソコン全体の fontFamily とは別に、プロジェクトの .mulmoterminal.json にも書けます。そちらが優先されます。

{
  "fontFamily": "'Cica', 'MS ゴシック', monospace"
}

ふだんは英数字が中心だが、このプロジェクトのログだけ日本語が多い、という場合に使います。九枚のマスが全部同じフォントである必要はありません。

プロジェクトごとの指定は、アプリの再起動が不要です。ただしファイルを見張っているわけでもなく、読み直すのは「AI がファイルを書いたと報告したとき」または「タブを再読み込みしたとき」です。AI にフォントを変えてと頼めばその場で反映され、エディタで手で書き換えたときはタブを更新するまで古いままです。

フォント名と大きさで、保存場所が違う

ここは納得しておくと混乱が減ります。

項目 保存場所 理由
フォントの大きさ(fontSize) ブラウザごと 表示上の好み。スマホと PC で別の値を保持したい
フォントの名前(fontFamily) パソコンに 1 つの値 どのフォントが入っているかはパソコン側の性質

スマホから同じ MulmoTerminal を開くときに、「そのフォントがスマホに入っているか」を気にしなくていい形になっています。

使ってみる

既存の MulmoTerminal 環境があれば、設定ファイルの編集だけで動きます。はじめての方は、MulmoTerminal 完全ガイド の「使い方 3 ステップ」から。

動作確認の最小シナリオ

  1. 条件を満たすフォントを 1 つ入れる(たとえば Mac なら brew install --cask font-cica)
  2. フォント一覧に Cica と出ていることを確認
  3. ~/.mulmoterminal/config.json に "fontFamily": "'Cica', monospace" を書く
  4. アプリを再起動(グローバル設定なので)
  5. AI に日本語で指示を打つ。入力欄の枠の右端が揃っていれば成功

揃うと、揃っていることに気づかなくなります。それが正しい状態です。

╭──────────────────────────────╮
│ この関数を直してください     │
│ テストも足してほしいです     │
╰──────────────────────────────╯

やめるときは、fontFamily の項目を消せば組み込みの並びに戻ります。効かないときは、まず綴りと再起動を見ます。

まとめ

関連: MulmoTerminal 公式ガイドの fontFamily 設定 / MulmoTerminal の fontSize — ブラウザのズームを使わない理由 / MulmoTerminal の xterm カラー — 中身を染める / Cursor の代替としての MulmoTerminal

この記事をシェア

関連記事

記事一覧に戻る