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 | Microsoft | Samsung | ||
|---|---|---|---|---|---|
| 😀 | 😁風 | 😁風 | 😁風 | 😁風 | 😁風 |
| 🔫 | 水鉄砲 | 水鉄砲 | 実銃 | 水鉄砲 | 水鉄砲 |
同じEmojiでもプラットフォームによって見た目が異なりますが、Unicodeコードポイントは同じです。
誤解を避けるための提案
- 曖昧なEmojiは避ける:🔫(銃/水鉄砲)、🍆(野菜/暗示的な意味)
- 複数プラットフォームでの表示をテスト:Emoji検索ツールで各プラットフォームの描画を確認
- ビジネスシーンでは控えめに:正式なメールやドキュメントでは使用を避ける
- 結合シーケンスの互換性に注意:ZWJシーケンスは古いシステムで複数の独立したEmojiとして表示されることがある
コードでEmojiを使う
HTML
<!-- 直接使用 -->
<p>ようこそ 🚀</p>
<!-- Unicodeエスケープ -->
<p>ようこそ 🚀</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を検索する
- Emoji検索ツールを開く
- キーワード(中国語または英語)を入力 例:「happy」
- マッチしたEmoji一覧を確認
- クリックでクリップボードにコピー
- カテゴリ別のブラウズにも対応
検索例
| キーワード | 結果 |
|---|---|
| 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#搜索#教程