プロポーショナルフォントの場合どうしようもないんだけど Unicode の文字は EastAsianWidth という仕様があって文字毎の幅がいわゆる全角か半角のどちらかになるかが決められている。 決められているといっても一部の文字は「Ambiguous(決定できない)」というふうに決められているのでそういう文字は自分で全角に倒すか半角に倒すか選ぶ必要はある。 Unicode の公式サイトにいけばこの仕様にアクセスできるので、仕様に則って実装すれば文字幅を決定できるんだけど、もう gem があるのでそれを使おう。 janlelis/unicode-display_width - GitHub String#display_width というメソッドが追加されて、これを使って、 '🍕'.display_width とかやれば文字幅を取得できる。 🍕は Ambiguous 扱い(すみません