はじめに
SNS でよく見かけるハッシュタグに標準的な仕様があるのか興味があったので調べてみました。
本記事では、 Unicode Standard で規定されているハッシュタグの仕様を紹介します。
ハッシュタグとは
ハッシュタグとは、#emoji
のようにハッシュ記号 (#
) からはじまるメタデータです。SNS やブログ記事などで、投稿やコンテンツを分類・整理するために使用されます。
ハッシュタグを投稿に含めることで、その投稿がどの話題に関連しているかを明確にし、同じ話題に関心を持つユーザに発見されやすくすることができます。
メタデータとは、データに関する情報を記述するデータです。例えば、作成者や作成日時などです。ハッシュタグも、コンテンツがどの話題に関連するかを表すメタデータのひとつです。
仕様
ハッシュタグの仕様は明確に定義されているわけではありません。絵文字の利用可否や文字数制限など、実装ごとに違いがあります。
この仕様の曖昧さを補うために、Unicode Standard の付録(Annex)である UAX #31: Unicode Identifiers and Syntax では、ハッシュタグの構文に関する推奨事項が示されています。この推奨事項はハッシュタグの共通的な処理を促進する一方で、実装の自由度も一定程度確保しています。
以下では、この仕様について紹介します。
UAX31-D2
UAX31-D2 はハッシュタグのデフォルトの構文です。
<Hashtag-Identifier> := <Start> <Continue>* (<Medial> <Continue>+)*
`:=` : 右辺が左辺の構文を定義
`<>` : 定義された構文
`*` : 直前の構文が 0 回以上繰り返されることを示す
`+` : 直前の構文が 1 回以上繰り返されることを示す
`()` : グループ化を表す
ハッシュタグは以下の文字で構成されています。
- Start: ハッシュタグの開始文字
- Continue: 続く文字
- Medial: オプションで使用できる文字
ハッシュタグを解析する際には、Start
文字の前に Continue
文字がない場合にのみハッシュタグとして認識することが推奨されます。例えば、foo#bar
ではハッシュタグは認識されませんが、foo #bar
や foo.#bar
ではハッシュタグとして認識されます。
ハッシュタグは上記要件を満たし、かつ、UAX31-R8-1 または UAX31-R8-2 のいずれかの要件も満たす必要があります。
-
UAX31-R8-1
Start
やContinue
、Medial
に使用できる文字の範囲を規定-
Start
以下のいずれかを選択-
U+0023
: NUMBER SIGN (#
) -
U+FE5F
: SMALL NUMBER SIGN (﹟
) -
U+FF03
: FULLWIDTH NUMBER SIGN (#
)
-
-
Continue
-
XID_Continue
にExtended_Pictographic
,Emoji_Component
,_
,-
,+
を加えたものからStart
文字を除いたもの
-
-
Medial
ここでは空。カスタマイズに使用できる。
-
Start
-
UAX31-R8-2
UAX31-R8-1 をベースにカスタマイズしたプロファイル(部分集合)。
Unicode 文字プロパティ(または、プロパティ)とは Unicode 規格で定義されている、個々の文字に付与された属性のことです。
例: Numeric(数値), Emoji(絵文字)
XID_Continue
や Extended_Pictographic
、Emoji_Component
もプロパティのひとつです。
それぞれのプロパティに含まれる文字のリストは Unicode のバージョンによって異なります。詳細は UNICODE CHARACTER DATABASEを参照してください。
プロパティに含まれる文字のリストはバージョンごとに増えることがあるので後方互換性を意識する必要があります。
比較やマッチングは、NFKC_CF 形式へ変換した後に行う必要があります。例えば、#MötleyCrüe
は #MÖTLEYCRÜE
およびその他のバリエーションと一致する必要があります。
実装では、表 3a「 Optional Characters for Medial」の文字を Medial
に、また、表 3b「Optional Characters for Continue」の文字を Continue
に追加することもできます。
表 3a: Optional Characters for Medial
Code Point | Character | Name |
---|---|---|
U+0027 | ' | APOSTROPHE |
U+002D | - | HYPHEN-MINUS |
U+002E | . | FULL STOP |
U+003A | : | COLON |
U+00B7 | · | MIDDLE DOT |
U+058A | ֊ | ARMENIAN HYPHEN |
U+05F4 | ״ | HEBREW PUNCTUATION GERSHAYIM |
U+0F0B | ་ | TIBETAN MARK INTERSYLLABIC TSHEG |
U+2010 | ‐ | HYPHEN |
U+2019 | ’ | RIGHT SINGLE QUOTATION MARK |
U+2027 | ‧ | HYPHENATION POINT |
U+30A0 | ゠ | KATAKANA-HIRAGANA DOUBLE HYPHEN |
表 3b: Optional Characters for Continue
Code Point | Character | Name |
---|---|---|
U+05F3 | ׳ | HEBREW PUNCTUATION GERESH |
おわりに
本記事では Unicode Standard に規定されているハッシュタグの仕様について紹介しました。この仕様に従い実装することで、相互運用性を高めることできます。