ハイフンとダッシュ

テキスト中で単語の接続、範囲の表示、挿入句の区切りなどに使われる横線記号。ハイフン、en ダッシュ、em ダッシュは見た目が似ているが Unicode 上は別の文字で、UTF-8 でのバイト数も異なる。

ハイフンとダッシュは、見た目が似ているために混同されやすい横線記号です。Unicode では明確に区別されており、ハイフンマイナス (U+002D)、ハイフン (U+2010)、en ダッシュ (U+2013)、em ダッシュ (U+2014)、水平バー (U+2015) など、複数の横線文字が定義されています。それぞれ用途が異なり、正しく使い分けることが組版の品質を左右します。

ハイフンマイナス「-」(U+002D) は ASCII に含まれる唯一のダッシュ (Unicode の一般カテゴリ Pd に属する文字) で、キーボードから直接入力できます。プログラミングではマイナス演算子として、URL やファイル名では単語の区切りとして使われます。本来はハイフンとマイナス記号を兼用するための妥協的な文字ですが、実用上はこの 1 文字で大半の用途をカバーしています。純粋なハイフンを表す U+2010 も別に用意されているものの、入力しにくく見た目も変わらないため実際にはほとんど使われず、U+002D が事実上の標準になっています。

en ダッシュ (U+2013) は「1990 年から 2000 年まで」「pp. 10 から 20」のような範囲や、対等な二者の対比・結合 (東京と大阪を結ぶ路線名のような用法) に使います。em ダッシュ (U+2014) は挿入句の区切りや文の中断を示します。名前は活字の幅に由来し、en は小文字の「n」ほど、em は大文字の「M」ほどの幅で、em ダッシュの方が長くなります。英語の出版物ではこの使い分けが厳密に守られますが、ウェブや日常的な文章ではハイフンマイナスで代用されることが多いのが実情です。表示された字面からどの文字なのかを判別するのは困難なので、疑わしいときはコードポイントを確認します。Python なら hex(ord(ch))、JavaScript なら ch.codePointAt(0).toString(16) で確認でき、ハイフンマイナスなら 0x2d / 2d、en ダッシュなら 0x2013 / 2013 が返ります。

日本語組版では、ダッシュは全角幅 (1em) の全角ダッシュか、それを 2 つ並べた二倍ダッシュとして使うのが一般的です。活字では二倍幅の 1 文字として用意されていましたが、コンピュータ上では同じ文字を 2 つ並べて代用します。全角ダッシュに対応する Unicode 文字は、JIS X 0208 および JIS X 0213 の 1 区 29 点「ダッシュ (全角)」の定義では EM DASH (U+2014) です。半角のハイフンマイナスは日本語の文中では幅が狭すぎるため、本文組みでは全角のダッシュが好まれます。

この全角ダッシュには、日本語のテキストを扱ううえで避けられない落とし穴があります。Shift_JIS の 0x815C をどの Unicode 文字に対応させるかが実装によって分かれ、Microsoft の CP932 系の変換表は水平バー (U+2015) に、JIS 規格や Apple 系の変換は EM DASH (U+2014) に割り当ててきました。そのため、全角ダッシュだけが化けて別の記号や「?」に置き換わるテキストに出会ったら、まずこの対応の食い違いを疑うとよいでしょう。あわせて、長音記号「ー」(U+30FC) や全角ハイフンマイナス (U+FF0D) も字形が似ているため混同されやすい文字です。どちらも本来は長音とハイフンを表す別の文字で、ダッシュの代わりに使うと検索や置換、並べ替えで別の文字として扱われます。

文字数カウントの観点では、これらの横線文字はすべて 1 文字としてカウントされますが、バイト数は異なります。ハイフンマイナス (U+002D) は UTF-8 で 1 バイト、en ダッシュ (U+2013) と em ダッシュ (U+2014) は 3 バイトです。バイト数ベースの文字数制限では、ダッシュの種類によって消費するバイト数が異なることに注意が必要です。

プログラミングでは、ハイフンマイナスが識別子に使えるかどうかは言語によって異なります。CSS のクラス名やプロパティ名にはハイフンが使えますが (kebab-case)、JavaScript の変数名には使えません。URL のパス部分については、Google が単語の区切りにアンダースコアではなくハイフンを使うことを推奨しています。ハイフンで区切った方が利用者と検索エンジンが URL 内の語を切り分けやすく、アンダースコアはプログラミングで「ひとまとまりの名前」を表す用途に使われてきたから、という理由です。ただしこれはクロールと理解しやすさについての推奨で、ハイフンに変えれば順位が上がるという説明ではありません。ドメイン名でもハイフンは使用可能ですが、ラベルの先頭と末尾には置けません。

この記事を共有