Skip to content

Note

このドキュメントは2026-02-27 02:26PLaMo Translation Modelを使用して自動翻訳されました。

FEP-9098: カスタム絵文字の仕様

概要

カスタム絵文字とは、特定の概念や感情を表現するために使用される小さな画像要素です。Unicode規格に基づく標準的な絵文字とは異なり、文字コードの組み合わせで構成されるものではありません。

本文書では、ActivityPubネットワークにおけるカスタム絵文字の実装方法について規定します。

歴史

カスタム絵文字は2017年に、Pleroma(コミット履歴)とMastodon(PR)によって初めて導入されました。

要件

本文書中で使用される「MUST」「MUST NOT」「REQUIRED」「SHALL」「SHALL NOT」「SHOULD」「SHOULD NOT」「RECOMMENDED」「MAY」「OPTIONAL」といった表現は、RFC-2119の規定に従って解釈されるものとします。

絵文字オブジェクト定義

カスタム絵文字はEmojiオブジェクトとして表現されます(完全なタイプIRI: http://joinmastodon.org/ns#Emoji)。Emojiオブジェクトには以下のプロパティが含まれます:

  • id(推奨):カスタム絵文字の一意識別子。実装によってはこのプロパティを省略する場合もあります(すなわち匿名オブジェクトとして扱うことが可能です)。
  • type(必須):リテラル文字列「Emoji」
  • name(必須):カスタム絵文字のショートコード(コロンで囲まれた絵文字名;詳細はマイクロ構文セクション参照)
  • updated(任意):カスタム絵文字が更新された日付を、RFC-3339形式の日時文字列で指定します。
  • icon(必須):絵文字画像を説明するImageオブジェクト
  • type(必須):リテラル文字列「Image」
  • url(必須):絵文字として使用する画像ファイルのURI

[!NOTE] ActivityStreams語彙におけるiconプロパティの定義ではアスペクト比1:1が推奨されていますが、実際にはカスタム絵文字には様々なアスペクト比のものが存在します。

具体例:

{
  "id": "https://social.example/emoji/blobcat",
  "type": "Emoji",
  "name": ":blobcat:",
  "updated": "1970-01-01T00:00:00Z",
  "icon": {
    "type": "Image",
    "url": "https://social.example/media/blobcat.png"
  }
}

一意性の確保

カスタム絵文字の主要な一意識別子は、その名前とドメイン名の組み合わせによって構成されます。ドメイン名はEmojiオブジェクトのidから抽出するか、または当該オブジェクトが埋め込まれている親オブジェクトのidから取得可能です。

パブリッシャー側が「emoji idがグローバルに一意であることを保証しない」と明示している場合、このプロパティを定義する必要はありません。

アクセシビリティ対応

カスタム絵文字の簡易説明は、alternateNameプロパティ(完全なIRI: http://schema.org/alternateName)を使用して指定することができます。

カスタム絵文字の使用方法

マイクロ構文規則

テキスト中でカスタム絵文字を表現するには、そのショートコードを使用します(例::blobcat:のようにコロンで囲まれた文字列)。これは、Emojiオブジェクトのnameプロパティ値としても設定されます。

このようなテキスト表現は、通常、カスタム絵文字を埋め込む対象オブジェクトのnamesummary、およびcontentプロパティ値内に挿入されます。例えば、Noteオブジェクトのcontentフィールドや、Actorオブジェクトのnameフィールドなどが該当します。

対応するEmojiオブジェクトは、当該オブジェクトのtag配列に追加されます。この配列内では、カスタム絵文字は任意の順序で配置可能です。

具体例:

{
  "type": "Note",
  "id": "https://social.example/notes/1234",
  "content": "<p>:blobcat:</p>",
  "tag": [
    {
      "id": "https://social.example/emoji/blobcat",
      "type": "Emoji",
      "name": ":blobcat:",
      "icon": {
        "type": "Image",
        "url": "https://social.example/media/blobcat.png"
      }
    }
  ]
}

右書きテキストへの対応

カスタム絵文字のショートコードは、右書きテキスト環境においても常に左から右へ記述する形式を採用します。

表示処理について

一般的なクライアント向け考慮事項

画像のアスペクト比は可能な限り維持されるべきです。ただし、画像ファイルの最大幅に制限を設けることは可能です。

<code>および<pre>HTML要素内に含まれるショートコードは、置換対象としてはならないものとします。

Webクライアント向け考慮事項

Webアプリケーションでは、通常、カスタム絵文字のショートコードを<img>HTMLタグに置き換えて表示出力を行います。

クロスサイトスクリプティング(XSS)攻撃を防止するため、実装者は以下の点を確実に実施する必要があります:

  • 置換処理に使用される絵文字名、説明文、URLなどの文字列には、予約済みHTML文字(&<>"')が含まれていないこと
  • HTMLコンテンツ(例:summary, contentフィールド)を処理する際、ショートコードの置換はテキストノード内のみに限定すること
  • テキスト中に含まれる予約済みHTML文字は、ショートコード置換前に適切にエスケープ処理を行うこと

互換性要件

可能な限り多くのサーバーとの相互運用性を確保するため、実装時には以下の追加要件に準拠することが推奨されます:

  • 名前は少なくとも2文字以上で構成されること(Mastodon
  • 名前には[a-zA-Z0-9_]の文字セットのみを使用すること(Mastodon
  • 画像メディアタイプはimage/png, image/gif, またはimage/webpのいずれかであること(Mastodon
  • 画像サイズは256KBを超えないこと(Mastodon
  • 画像は正方形であることが望ましい(一部のクライアントでは、非正方形の絵文字を誤ったアスペクト比で表示する可能性があるため)
  • ショートコードは、Unicodeの英数字、コロン、または改行文字以外の2文字間に配置されること(Mastodon;詳細はissue #7364も参照)

実装事例

本文書の内容は、Pleroma、Mastodon、Misskey、およびFedibirdにおけるカスタム絵文字の実際の実装仕様に基づいています。

参考文献

著作権表示

本Fediverse拡張提案の著者らは、法律で認められる範囲内において、当該著作物に関するすべての著作権および関連権利を放棄することを宣言します。