鈴木颯介のブログ

技術的なメモとかポエムとか。

Prettier が Markdown のフォーマットで日本語とラテン文字の間に半角スペースを挿入してしまう理由

自分は文字コード自然言語には全然詳しくないので、変な表現をしてるかもしれません。変だと思った方はお手数ですが、コメントかツイッター(https://twitter.com/__sosukesuzuki)で教えてくれるとうれしいです..。


よくツイッターでこれについての言及をみかけるのでまとめてみます。

まず、Prettier は Markdown のフォーマットが可能なのですが、日本語ユーザーにとっては少し奇妙なフォーマットをします。

私はJavaScriptを書きます。

この Markdown を、

私は JavaScript を書きます。

という風に、日本語とラテン文字(今回の場合JavaScript)の間に半角スペースを挿入します。

これについて不満を感じているユーザーが多いようです。自分もその一人です。

もともと Prettier の Markdown フォーマット周りを管理していたメンテナーが台湾の方で、おそらく中国語基準で実装したようです。中国語では、漢字とラテン文字の間にスペースを挿入するのが一般的なようで、それに合わせたのでしょう。(https://github.com/ruanyf/document-style-guide/blob/master/docs/text.md)

その後、 https://github.com/prettier/prettier/issues/5028 という Issue がユーザーによって作成されました。簡単に言えば、「ハングル文字を含む Markdown のフォーマットで余計なスペースが挿入される」といった内容です。

そしてこれは対策がされました。(PR: https://github.com/prettier/prettier/pull/5040)

同様に日本語も対策すればいいじゃんと思われるかもしれません。実際、ハングル文字対応の PR の実装はそんなにむずかしくはないのですが、ハングル文字は識別できるのに対して、漢字があったときに、それが日本語として使われているのか、中国語として使われているのかは識別できません。

なので、 https://github.com/prettier/prettier/issues/6385 にて、「空白挿入するかどうか決めるオプション作りたい」みたいな Issue を作成しました。そしたら、「そもそも空白の挿入を機械的に決定するのって困難だから一律で自動スペース挿入を禁止すべきだよね」みたいな話になりました。My favorite hiragana is ぬ には入ってほしいけど、Reactユーザーとかには入ってほしくないよね、みたいな。(個人的には、Prettier は AST を破壊すべきではないにも関わらずこれは AST を破壊するフォーマットなのでよくないよねとも思っています。)

が、「少なくとも中国語では漢字とラテン文字の間にスペースを挿入するのは推奨形式だし、ユーザー体験のためにも、Prettier からその機能を剥がすにしてもプラグインや他のツールで対応はしないといけない。」といわれていて、「それはそう、、、」と思っています。

ので、なにかしら作ったほうがいいんですが、もう半角スペース挿入されるのに慣れてしまって、なんとも思わなくなっている自分がいる。