活版印刷の時代、活字は一つずつ金属の柱でした。和文の活字は正方形で、どの字も同じ幅です。欧文の活字は文字ごとに幅が違って、i は細く W は広い。
同じ行に和文と欧文を混ぜると、行の長さの計算が合わなくなります。一行の字数で組んでいるのに、途中に幅の違うものが入るからです。
職人は、欧文の活字の周りに詰め物を入れたり、和文用に作られた欧文の活字を使ったりして、幅を合わせました。写植の時代になっても、和欧混植は専用の調整項目として残りました。
和文と欧文を一行に混ぜるという作業には、ずっとこの手間が付いてきました。
枠の右端が一行ごとにずれる
ターミナルで動く AI に日本語で指示を打っていると、入力欄の枠の右端が一行ごとに違う位置にあります。MulmoTerminal は AI を何枚ものマスに並べて見張るための画面で、ブラウザで開きます。無料で、オープンソースとして公開されています。
╭──────────────────────────────╮
│ この関数を直してください │
│ テストも足してほしいです │
╰──────────────────────────────╯
文字は読めます。でも枠が揃っていません。英語だけ打っているときは、こうなりませんでした。
原因はフォントで、理由は単純
ターミナルは文字の格子です。八十桁かける二十四行のような格子になっていて、半角文字一つが一桁、全角文字は二桁を占めます。
ターミナルは全角文字にきっかり二桁分を確保します。ところがフォントの側で、全角の幅が半角の二倍になっていないことがあります。二倍より少し狭いフォントだと、日本語が十文字あれば二桁分ずれます。それが上の図です。
活字の幅が揃っていないのと、同じことが起きています。
AI の画面はほとんど罫線でできている
普通の文章なら、少しずれても読めます。でも AI の画面は違います。
─ │ ╭ ╰ のような線を描く文字で組まれていて、これらも全角です。入力欄の枠、選択肢の一覧、進捗の表示。どれも線です。
日本語を打つプロジェクトでは、影響が大きく出ます。
条件を満たすフォントがある
そのために作られたフォントがあります。Cica、HackGen、Sarasa Mono J、Noto Sans Mono CJK JP、MS ゴシック、BIZ UDゴシック。
どれも英数字用の等幅フォントと日本語フォントを、幅がちょうど二倍になるように合成して作られています。活字の職人がやっていた調整を、フォントを作る段階で済ませてあるわけです。
書き方
{ "fontFamily": "'Cica', 'MS ゴシック', monospace" }
設定画面からも変えられます。フォント名は、パソコンのフォント一覧に表示されているとおりに、使いたい順で並べます。入っているものが先頭から使われます。
何も書かなければ、組み込みの並びが使われます。英数字用のフォントのあとに、日本語、韓国語、中国語のフォントが続く形です。
一か所壊すと、全部が無視される
最初に戸惑う挙動です。この並びは一つの意図として検証されるので、一つでも不正な項目があると、中途半端に効かせずに全体が破棄されて組み込みの並びに戻ります。
"'Cica', 'MS Gothic;', monospace" のように一か所でも文法を壊すと、Cica の指定も無効になります。
部分的に効かせないのは、そのほうが原因が分かるからです。半分効いていると、Cica が入っていないのかなと別の場所を疑います。全部戻れば、書き方を間違えたと分かります。
症状から原因を引く
| 症状 | 原因 |
|---|---|
| どのフォントを指定しても何も変わらない | アプリを再起動していない |
| 特定のフォントだけ効かない | そのフォントが入っていない |
| 指定が丸ごと無視された | 並びに不正な項目がある |
| 全体が等幅でなくなった | 並びのどれ一つも一致しなかった |
一つ目が一番多いと思います。パソコン全体の設定は、アプリの起動時に一度だけ読まれます。書いたあとに再起動していないと届きません。
プロジェクトごとにも変えられる
パソコン全体の設定とは別に、プロジェクトごとにも指定できます。そちらが優先されます。
ふだんは英数字が中心だが、このプロジェクトのログだけ日本語が多い、といった場合に使います。九枚のマスが全部同じフォントである必要はありません。
プロジェクトごとの指定は、アプリの再起動が不要です。ただしファイルを見張っているわけでもありません。読み直すのは、AI がファイルを書いたと報告したときです。AI にフォントを変えてと頼めばその場で反映され、エディタで手で書き換えたときはタブを再読み込みするまで古いままです。
大きさとフォントで、保存場所が違う
これを知っておくと納得しやすいです。
フォントの大きさは表示上の好みなので、ブラウザごとに保持されます。フォントの種類は、パソコンに一つの値です。
指定するのはフォントであり、どのフォントが存在するかは、見ているスマホや PC ではなく動かしているパソコン側の性質だからです。
大きさは見る人の好み、フォントは動かしているパソコンの事実。スマホから同じ画面を見るときに、そのフォントが入っていないを気にしなくていい形になっています。
使ってみる
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 の使用量はその契約から引かれます。
手元にフォントが無ければ、先に入れます。Cica で説明します。
# macOS(Homebrew)
brew install --cask font-cica
Homebrew を使っていない場合や Windows は、github.com/miiton/Cica の Releases から zip を落として、中の .ttf をダブルクリックして入れます。
入れたら、パソコンのフォント一覧に Cica と出ているか確かめてください。設定に書く名前は、その一覧に出ているとおりにします。
他のものでもかまいません。全角が半角のちょうど二倍なら条件を満たします。HackGen、Sarasa Mono J、Noto Sans Mono CJK JP、MS ゴシック、BIZ UDゴシックがそうです。
書く場所は ~/.mulmoterminal/config.json です。無ければ作ります。設定画面の Terminal font からでも変えられます。
{
"fontFamily": "'Cica', 'MS ゴシック', monospace"
}
この設定は起動時に一度だけ読まれるので、アプリを再起動してタブを再読み込みします。
AI の入力欄の枠の右端が、一行ごとにずれずに揃っていれば成功です。
╭──────────────────────────────╮
│ この関数を直してください │
│ テストも足してほしいです │
╰──────────────────────────────╯
揃うと、揃っていることに気づかなくなります。それが正しい状態です。
やめるときは、その項目を消せば組み込みの並びに戻ります。一か所でも書き方を壊すと全体が無視されるので、効かないときはまず綴りを見ます。
まとめ
和文の活字は正方形で欧文は文字ごとに幅が違うので、一行に混ぜると計算が合いません。職人は詰め物を入れて幅を合わせていました。
ターミナルにも同じ問題が残っています。全角に二桁分を確保する前提なので、フォントの側で二倍になっていないとずれます。AI の画面は罫線でできているので、影響が大きく出ます。
幅がちょうど二倍になるように合成されたフォントを指定すれば揃います。一か所でも書き方を壊すと全体が無視されるのは、原因を分かりやすくするためです。
