Twemojiは何のために使ってる?

先日、Unicodeの絵文字の話を書きましたが。

国際化された絵文字いろいろ

WindowsとAndroidの複数のブラウザで見てたら、OS標準の絵文字が共通の画像に置き換えられていることに気づいた。

どうも、WordPressではTwemojiというTwitter社がオープンソースで提供している絵文字ライブラリを使っているらしい。

調べると重いので消しましょうみたいな記事がいろいろ見つかるが。

で、結局消したんですよね。理由はTwemojiが気に入らなかったからなんだけど。

なので今は各OS・ブラウザの絵文字で表示されるはず。


このTwemojiっていうのは、Javascriptのコードをペタリと貼り付けるだけで、絵文字を検出すると図形に置き換えるという仕組みになっている。

Twitter社が提供していることからもわかるようにTwitterの絵文字と同じ図形ですね。

ということはTwitterの絵文字はOS・ブラウザ非依存で同じ図形になっているはずだと。

Twemojiを使うというのはどういうことか知るために試験用のページを作って見た。

これを開いていただくと左は無加工の絵文字、右がTwemojiによる置換が行われたものが表示されている。

ページ全体に対してTwemojiを適用する例が多いが、特定ブロックへの適用も可能である。


一番上は非絵文字のハート2つ、それ以下は絵文字で、()内にEmojiのバージョンが書いてある。

新しいバージョンで追加された絵文字は想定通りの表示にならないことがある。

しかし、現在のところEmoji 13.1の絵文字まではTwemojiでは正しく表示できている。

左右の差異を見比べることで自分の環境がどのバージョンのEmojiまで対応しているか知ることができる。

Windows 11・Android 11ではEmoji 13.0まで表示できている。13.1は一部差異がある。

タブレットはAndroid 9で古いので、正しく表示されるのはEmoji 11.0まで。


さて、これをWindowsで見た人はおかしなことに気づいただろう。

Emoji 1.0の絵文字のはずなのに「AU」という文字で表示されているやつがあるはずだ。

Twemojiと見比べるとこれがオーストラリア国旗であることがわかると思う。

実はMicrosoftは絵文字の内、国旗や地域の旗はサポートしていないのだという。

国旗の絵文字はISO 3166-1準拠の2文字の国旗用アルファベットの組み合わせで作られているので、

そのアルファベットを国旗の絵文字として表示していると。確かにWindowsでもAUで1字である。

Emoji 5.0の絵文字として例示したイングランドの旗も、Windowsでは黒い旗に見える。

(なぜ黒い旗なのかというと、この旗は黒い旗にGB-ENGというタグで装飾しているから)

絵文字に国旗があるのは、日本の携帯電話会社が日本他10の国旗を収録していたことによる。

Unicode採用に際し、より汎用的に表示できるようISO 3166-1の国コードベースの表現が採用されたと。

なので、独立国以外の旗も表現できるんですね。例えばグアム(🇬🇺)とか。

おそらく、Microsoftはこれで無用な騒動に巻き込まれたくないという思いがあるんだろう。

ほら、絵文字用アルファベットをTWと並べて中華民国国旗が表示できたらトラブルになりそうだし。

Unicodeでも国旗の絵文字の字形は定義されていないので、これで何を表示すべきかは不明である。


もう1つ、最初の行に絵文字ではないハートマークを2つ並べて書いた。

絵文字ではないはずなのに、Twemojiでは絵文字に変換されているし、Androidでも絵文字扱いになっている。

Windowsでは絵文字扱いではなく黒い記号で表示される環境が多いはず。

ただ、もしかすると(1)の絵文字の赤色のハートマークも黒色で表示されているかも。

このハートの絵文字は、異体字セレクタという機能を使っている。

同じ漢字でもいろいろな書き方を区別するために使われるものらしいが、どれぐらい使われてるんだろう。

で、これは漢字以外にも使われることがあって、漢字の次に多いのが絵文字らしいんですよ。

囲み文字やすでにその絵文字と同じ記号があるとみなされたものが対象になっている。

Emoji Presentation Sequences, v14.0

逆に絵文字タイプを 異体字セレクタでシンプルタイプに変更をすることもあるようだな。

で絵文字のハートマークはU+2764に収録された文字を異体字セレクタで選択すればよいことになっている。

これを認識して絵文字と通常文字を区別できているかだが、TwemojiやAndroidははできていないようだ。

ちなみにHTMLの文字参照に♥というのがあるが(1行目2文字目がそれ)、このハートマークはU+2665らしい。

ちょっと違うんだが、どうもトランプのハートマークという意味らしい。これも絵文字タイプがある。


というわけで、こういう差異を吸収するためにTwemojiのようなものがあるということらしい。

あまりWindows使っててもWindows標準の絵文字はみないかもね。

GmailならGoogleの絵文字(Androidの絵文字と同じ)だし、TwitterならTwemojiだし。

もちろんMicrosoft TeamsならWindowsの絵文字ですよ。他のOSでもそうなのかは試せないからわからないけど。