見出し画像

プログラマ探偵の事件簿:全角でも半角でもない東アジアの曖昧な文字幅がミステリアスな表示の元凶だった

新人助手の猫さんも半年経って仕事に慣れたころの事件である。

事件の始まり

新たにコマンドライン(CLI)版のログ分析ツールを開発するためにGO言語のパッケージを調査し始めた。CLIの表示をきれいするパッケージBubbles

のサンプルを自分でビルドでして動かしたみた時、それは起こった。

罫線がずれる

ログをページ送りして見られるようにするためpager

のサンプルを動かした。

なぜか右上の罫線がずれている。
はて?

プログレスバーの%表示が消える

読み込みの完了を表示するためにプログレスバー

を試してみるとなぜか、%表示が消えてバーが短くなる。

はて?

フォントとターミナルソフトを変えてみた

Mac標準ではないターミナルソフト

に流行りのフォント

を設定しているのが問題ではないかと思い。変えてみたが解決しなかった。

問題は表示するキャラクターの違いにある

プログレスバーの表示の完了したことを示すキャラクターを変えてみた。
元は

U+2588,FULL BLOCKというキャラクターだったが、*にしてみたらなぜか表示された。

これらのキャラクターにどんな違いがあるのだろうか?

東アジアの曖昧な文字幅を知る

よくわからないが問題が発生しないキャラクターに変えて使えば回避できることを発見してから数日、なんだか、もやもやした気分で新しいソフトの開発も気分がのらないまま諦めムードで調べていたら

を発見、どうやら全角でも半角でもない曖昧な文字幅が存在するらしい。これが関係していそうである。しかし、キャラクターを変える以外に、どうしてよいのかわからない。

ついに見つけた

さらに、諦めかけて数日後に、ふと

をみつけた。このサイトに書いてあるとおり
LANG=C

RUNEWIDTH_EASTASIAN=0
をつけて実行してみると、

罫線も

のように正しく表示された。

ここで、先代の助手の猫が一言
「コンピューターにも曖昧なことがある。常に全角、常に半角と思ってはいけない」

これでスッキリしたので新しいログ分析ツールの開発が楽しみになってきた。

ちなみに、RUNEWIDTH_EASTASIANは

の中で評価されている。

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。