0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

SNS でよく見かけるハッシュタグに標準的な仕様があるのか興味があったので調べてみました。

本記事では、 Unicode Standard で規定されているハッシュタグの仕様を紹介します。

ハッシュタグとは

ハッシュタグとは、#emoji のようにハッシュ記号 (#) からはじまるメタデータです。SNS やブログ記事などで、投稿やコンテンツを分類・整理するために使用されます。

ハッシュタグを投稿に含めることで、その投稿がどの話題に関連しているかを明確にし、同じ話題に関心を持つユーザに発見されやすくすることができます。

メタデータとは、データに関する情報を記述するデータです。例えば、作成者や作成日時などです。ハッシュタグも、コンテンツがどの話題に関連するかを表すメタデータのひとつです。

仕様

ハッシュタグの仕様は明確に定義されているわけではありません。絵文字の利用可否や文字数制限など、実装ごとに違いがあります。

この仕様の曖昧さを補うために、Unicode Standard の付録(Annex)である UAX #31: Unicode Identifiers and Syntax では、ハッシュタグの構文に関する推奨事項が示されています。この推奨事項はハッシュタグの共通的な処理を促進する一方で、実装の自由度も一定程度確保しています。

以下では、この仕様について紹介します。

UAX31-D2

UAX31-D2 はハッシュタグのデフォルトの構文です。

ハッシュタグの構文(BNF 記法の拡張)

<Hashtag-Identifier> := <Start> <Continue>* (<Medial> <Continue>+)*

`:=` : 右辺が左辺の構文を定義
`<>` : 定義された構文
`*`  : 直前の構文が 0 回以上繰り返されることを示す
`+`  : 直前の構文が 1 回以上繰り返されることを示す
`()` : グループ化を表す

ハッシュタグは以下の文字で構成されています。

  • Start: ハッシュタグの開始文字
  • Continue: 続く文字
  • Medial: オプションで使用できる文字

ハッシュタグを解析する際には、Start 文字の前に Continue 文字がない場合にのみハッシュタグとして認識することが推奨されます。例えば、foo#bar ではハッシュタグは認識されませんが、foo #barfoo.#bar ではハッシュタグとして認識されます。

ハッシュタグは上記要件を満たし、かつ、UAX31-R8-1 または UAX31-R8-2 のいずれかの要件も満たす必要があります。

  1. UAX31-R8-1
    StartContinueMedial に使用できる文字の範囲を規定
    • Start
      以下のいずれかを選択
      • U+0023: NUMBER SIGN (#)
      • U+FE5F: SMALL NUMBER SIGN ()
      • U+FF03: FULLWIDTH NUMBER SIGN ()
    • Continue
      • XID_ContinueExtended_Pictographic, Emoji_Component, _, -, + を加えたものから Start 文字を除いたもの
    • Medial
      ここでは空。カスタマイズに使用できる。
  2. UAX31-R8-2
    UAX31-R8-1 をベースにカスタマイズしたプロファイル(部分集合)。

Unicode 文字プロパティ(または、プロパティ)とは Unicode 規格で定義されている、個々の文字に付与された属性のことです。
例: Numeric(数値), Emoji(絵文字)

XID_ContinueExtended_PictographicEmoji_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 に規定されているハッシュタグの仕様について紹介しました。この仕様に従い実装することで、相互運用性を高めることできます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?