Emoji検索と活用ガイド:Unicodeエンコードからクロスプラットフォーム互換までの完全攻略

テキストテキスト処理ツール

EmojiのUnicodeエンコード

エンコード範囲

範囲 Unicodeブロック 例
U+1F600 - U+1F64F Emoticons 😀😁😂
U+1F300 - U+1F5FF Misc Symbols & Pictographs 🎨🌟🌀
U+1F680 - U+1F6FF Transport & Map 🚀🚗🚲
U+1F900 - U+1F9FF Supplemental Symbols & Pictographs 🤖🦊🦁
U+1FA00 - U+1FA6F Chess Symbols 🪀🪁🪂
U+1FA70 - U+1FAFF Symbols & Pictographs Extended-A 🪩🪫🪬

エンコード表記

// Unicodeコードポイント
console.log('\u{1F600}');  // 😀
console.log('\u{1F680}');  // 🚀

// コードポイントの取得
console.log('😀'.codePointAt(0).toString(16));  // "1f600"

// コードポイントから生成
String.fromCodePoint(0x1F600);  // "😀"
String.fromCodePoint(0x1F680);  // "🚀"

UTF-8のエンコード長

// EmojiはUTF-8で4バイト
new TextEncoder().encode('😀').length;  // 4

// しかし .length は2を返す(サロゲートペア)
'😀'.length;  // 2

// 文字数の正しい数え方
[...'😀😁😂'].length;  // 3

肌の色修飾子

5種類の肌の色

U+1F3FB  🏻  明るい肌色 (Light Skin Tone)
U+1F3FC  🏼  やや明るい肌色 (Medium-Light)
U+1F3FD  🏽  中間の肌色 (Medium)
U+1F3FE  🏾  やや暗い肌色 (Medium-Dark)
U+1F3FF  🏿  暗い肌色 (Dark)

組み合わせ方

ベースEmoji + 肌色修飾子 = 肌色付きEmoji

👨 + 🏽 = 👨🏽
👋 + 🏿 = 👋🏿
// JavaScriptでの組み合わせ
const base = '\u{1F468}';  // 👨
const modifier = '\u{1F3FD}';  // 🏽
const result = base + modifier;  // 👨🏽

// 分解
[...'👨🏽'];  // ['👨', '🏽']

ゼロ幅接合子(ZWJ)シーケンス

ZWJ(U+200D)は複数のEmojiを1つに組み合わせます:

👨 + ZWJ + 🏭 = 👨‍🏭  (男性の工場作業員)
👩 + ZWJ + 💻 = 👩‍💻  (女性の技術者)
👨 + ZWJ + ❤️ + ZWJ + 👨 = 👨‍❤️‍👨  (男性同士のカップル)

家族の組み合わせ

👨 + ZWJ + 👩 + ZWJ + 👦 = 👨‍👩‍👦  (3人家族)
👨 + ZWJ + 👨 + ZWJ + 👧 = 👨‍👨‍👧  (2人のパパと娘)

国旗の組み合わせ

🇨 + 🇭 = 🇨🇭  (スイス国旗)
🇯 + 🇵 = 🇯🇵  (日本国旗)
🇨 + 🇳 = 🇨🇳  (中国国旗)

国旗Emojiは2つの地域指標記号(Regional Indicator)で構成されます。


プラットフォーム間の表示差異

Emoji Apple Google Microsoft Samsung Twitter
😀 😁風 😁風 😁風 😁風 😁風
🔫 水鉄砲 水鉄砲 実銃 水鉄砲 水鉄砲

同じEmojiでもプラットフォームによって見た目が異なりますが、Unicodeコードポイントは同じです。

誤解を避けるための提案

  1. 曖昧なEmojiは避ける:🔫(銃/水鉄砲)、🍆(野菜/暗示的な意味)
  2. 複数プラットフォームでの表示をテスト:Emoji検索ツールで各プラットフォームの描画を確認
  3. ビジネスシーンでは控えめに:正式なメールやドキュメントでは使用を避ける
  4. 結合シーケンスの互換性に注意:ZWJシーケンスは古いシステムで複数の独立したEmojiとして表示されることがある

コードでEmojiを使う

HTML

<!-- 直接使用 -->
<p>ようこそ 🚀</p>

<!-- Unicodeエスケープ -->
<p>ようこそ &#x1F680;</p>

<!-- CSS content -->
<style>
  .icon::before { content: '\1F680'; }
</style>

JavaScript

// 直接使用(推奨)
const rocket = '🚀';

// Unicodeエスケープ
const rocket = '\u{1F680}';

// 文字列の中で
const message = `デプロイ成功 ${rocket}`;

// オブジェクトのキーとして(非推奨だが可能)
const icons = { '🚀': 'rocket', '🎨': 'art' };

Python

# 直接使用
rocket = '🚀'

# Unicodeエスケープ
rocket = '\U0001F680'

# f-stringの中で
message = f'デプロイ成功 {rocket}'

データベースへの保存

-- MySQL:utf8mb4文字セットが必要
CREATE TABLE messages (
  content VARCHAR(500) CHARACTER SET utf8mb4
);

-- ❌ utf8文字セットではEmojiを保存できない
-- ✅ utf8mb4文字セットならEmojiを保存できる

ToolsKuでEmojiを検索する

  1. Emoji検索ツールを開く
  2. キーワード(中国語または英語)を入力 例:「happy」
  3. マッチしたEmoji一覧を確認
  4. クリックでクリップボードにコピー
  5. カテゴリ別のブラウズにも対応

検索例

キーワード 結果
happy 😄😁😆😊🥰
rocket 🚀🚁🛸
cat 🐱🐈🐈‍⬛
food 🍕🍔🍜🍣🍰
work 💼💻📊📋✏️

Emojiの正規表現

すべてのEmojiにマッチ

// Emoji正規表現(簡易版)
const emojiRegex = /\p{Emoji_Presentation}/gu;

// より完全なバージョン(修飾子とZWJシーケンスを含む)
const fullEmojiRegex = /\p{Extended_Pictographic}(\u{FE0F})?(\u{1F3FB}-\u{1F3FF})?(\u{200D}\p{Extended_Pictographic}(\u{FE0F})?(\u{1F3FB}-\u{1F3FF})?)*/gu;

// 使用例
const text = 'Hello 😀 World 🚀';
const emojis = text.match(fullEmojiRegex);
// ["😀", "🚀"]

テキストからEmojiを除去

function removeEmoji(text: string): string {
  return text.replace(/\p{Emoji_Presentation}/gu, '');
}

removeEmoji('Hello 😀 World 🚀');  // "Hello  World "

Emojiの数をカウント

function countEmoji(text: string): number {
  const matches = text.match(/\p{Emoji_Presentation}/gu);
  return matches ? matches.length : 0;
}

よくある質問

Emojiが四角(□)で表示されるのはなぜ?

  • フォントが非対応:システムにEmojiフォントがない
  • 文字セットの誤り:データベース/ファイルがUTF-8MB4ではなくUTF-8を使っている
  • バージョンが古い:新しいEmojiには比較的新しいOSバージョンが必要

Emojiの .length が1でないのはなぜ?

'😀'.length          // 2(サロゲートペア)
'👨🏽'.length         // 4(ベース + 修飾子、それぞれ2)
'👨‍👩‍👦'.length         // 8(3つのEmoji + 2つのZWJ)
[...'👨‍👩‍👦'].length     // 5(正しく分解)

// 安全な文字列長の取得
function safeLength(str: string): number {
  return [...str].length;
}

最新のEmojiを使うには?

Emojiは年に1回更新されます(Unicodeバージョンの更新)。新しいEmojiには以下が必要です:

  • OSのアップデート(iOS/Android/Windows)
  • ブラウザのアップデート
  • フォントのアップデート(Noto Color Emoji)

まとめ

EmojiはUnicode標準の一部です。エンコードの仕組み(コードポイント、修飾子、ZWJシーケンス)を理解すれば、クロスプラットフォームの互換性問題を正しく処理できます。重要ポイント:データベースは utf8mb4 で保存、文字数は [...str] でカウント、プラットフォーム間の表示差異に注意。ToolsKuのEmoji検索ツールで、必要なEmojiをすばやく見つけられます。

#Emoji#表情符号#Unicode#搜索#教程