なんとかしてカップルを別れさせたい[前編]

## はじめに
今まで知らなかったのですが、どうやら世の中にはカップルというものが蔓延っているようです。
自分はそういったカップルをなんとかして別れさせたいと思い、この記事を書いています。

## 別れさせるとは
その文字の通りです。
コトバンク(のデジタル大辞泉)で調べたところ、「一緒にいたものが離れ離れになる。互いに離れて去る。」と書いてありました。
つまり、離れ離れにすればいいということですね。

https://kotobank.jp/word/%E5%88%A5%E3%82%8C%E3%82%8B-664730

とはいえ、部外者の自分がどんなに頑張っても本人たちの一緒にいたいという心の衝動が止められるとは思いません。
なので、直接ではなく、間接的に別れさせるようにしたいと思います。

調べたところ、エスニックジョークといったものでは日本人はみんながやっていることに倣う傾向があるようです。[^1]
なので、この世からカップルという概念をなくせば、カップルでいることが異常であると思い、別れていくのではないでしょうか。

カップルと言う概念がよく使われるものといえばなんでしょうか。
考えたときに、1つあるものが頭に浮かびました。
絵文字です。

[^1]: https://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%B9%E3%83%8B%E3%83%83%E3%82%AF%E3%82%B8%E3%83%A7%E3%83%BC%E3%82%AF 東京大学の調査ではエビデンスはないとのこと。 https://www.u-tokyo.ac.jp/focus/ja/press/p01_200930.html

## 絵文字
絵文字というものを知らない人はいないでしょう。
「😀」や「😏」といったものですね。
1999年にi-modeとともに世に出た176種の絵文字から始まり[^2]、今となっては3700種類を超える量にまで及んでいます。[^3]

[^2]: 絵文字の成り立ちをものすごく省略しましたが、 楽しく知りたい方は ( https://www.amazon.co.jp/dp/B01AHWOCQ8 ) が面白いのでどうぞ。
[^3]: https://unicode.org/emoji/charts/full-emoji-list.html Unicode公式ですがとんでもなく重いです。攻撃かもしれません。3700種類もないのはパターンが網羅されているわけではないからとなっています。

これらの中に今回のターゲットがあります。
そうです。
「👫」や「👩‍❤‍👨」、「👩‍❤‍💋‍👨」をはじめとしたカップルを意味している絵文字ですね。

2018年のEmoji11.0からは単体の絵文字に肌の色が変えられるようになり、
2019年のEmoji12.1や2020年のEmoji13.1からはカップルの絵文字においても肌の色が二人別に指定できるようになったことから、「👩🏼‍🤝‍👩🏾」や「👨🏻‍❤️‍👨🏿」、「👩🏽‍❤️‍💋‍👨🏽」[^4]のように多くのカップルを意味する絵文字が生まれています。
こちらもまとめてターゲットです。

[^4]: 選んだ絵文字は特定の肌の色を指し示すものではなく、肌の色5種類とカップルの組み合わせ3種類を順番に組み合わせただけです。

## カップルなどに使われる絵文字の仕組み
世間一般で文字コードとして一番広く使われているUnicodeでは１つ1つの文字に番号が割り当てられるのですが、これらの絵文字1つ1つに割り当てるようになってしまうと文字の符号位置がいくつあっても足りません。

そこで、ゼロ幅ジョイナー(ZWJ)[U+200D]といういわゆる制御文字を作り、2つの絵文字の間にこのZWJが配置された場合は挟んでいる2つの絵文字を1つの絵文字としてみなすという仕組みで解決することが考えられました。
また、肌の色については、人を示すような絵文字（例：👨[U+1F468]）の後ろに肌の色を示す絵文字(例:[U+1F3FC])をつけることで「👨🏼」のように元の絵文字と肌の色が違う絵文字を表すことになっています。
これらを組み合わせて、カップルに使われる絵文字が作られています。

サンプルで説明すると、例に上げた「👩🏽‍❤️‍💋‍👨🏽」という絵文字は
女性👩[U+1F469]+中間の肌色[U+1F3FD]+ZWJ[U+200D]+
赤いハート❤️[U+2764]+バリエーションセレクター-16[U+FE0F]+ZWJ[U+200D]+
キスマーク💋[U+1F48B]+ZWJ[U+200D]+
男性👨[U+1F468]+中間の肌色[U+1F3FD]
という文字の組み合わせで作られています。
ものすごいですね。

## カップルの別れさせる Phase.1
さて、本題に戻りましょう。
カップルを別れさせるにはどうすればいいでしょうか。

ただカップルの絵文字を複数の絵文字に置換するというやり方はどうでしょうか。
候補には上がりましたが、説明したように、単純な置換はできません。
カップルの絵文字は組み合わせで作られているものもあるからです。
すべてのパターンで置換を指定するのは少しばかり厳しいものがあります。
では、一体どうすればいいでしょうか。

そうです、絵文字を分解してしまえばいいのです。
絵文字はひとつ上で書いた通り、ZWJで2つの絵文字を1つにしています。
このZWJをすべて消してしまえばそれぞれ独立になってくれるのではないでしょうか。
試してみましょう。

以前の記事で自分はブラウザの漢字をすべて闇にするという方法を書きました。

https://qiita.com/sytkm/items/d5a8d04dfb0495c00a62

こちらを利用して、ZWJをすべて消してしまえばカップルは別れてしまうのではないでしょうか。
やってみましょう。

```javascript:content.js
window.addEventListener("load",(eve)=>{
  const d = document;
  d.body.innerHTML=d.body.innerHTML.replaceAll(/[¥u200d]/g,"");
})

```

お試しされた方いかがでしたでしょうか。
誠に残念なのですが、うまくいきませんでした。

ZWJはカップルだけに使われているわけではありません。
特に最近はZWJを積極的に使うことが推奨されており、今年リリースされたEmoji15.1に至っては追加された全ての絵文字がZWJを利用して使われています。

![スクリーンショット 2023-12-13 22.22.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104058/3c57d505-177a-a840-3472-698b0b10f7c8.png)
![スクリーンショット 2023-12-13 22.22.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104058/4f2ebf09-3826-4955-e494-d5695115689c.png)

それらが全て分かれて表示されてしまうと、意味が伝わらなくなってしまいますね。[^5]
また、別れてしまう家族もいるようです。
[^5]: https://emojipedia.org/ja/emoji-13.1

![スクリーンショット 2023-12-13 22.31.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104058/342a4501-122d-67bb-2375-6425ec56ec12.png)
![スクリーンショット 2023-12-13 22.31.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104058/ddd5055d-dc6f-81f5-dcfc-2187ace6e07f.png)

少子高齢化が進むこの時代。
家族は一緒にいるべきです。

ではそういった絵文字が別れないようにするにはどうすればいいか。
そうです。
カップルになっている絵文字の共通項を見つけて置き換えればよいのです。

## ターゲットとなる絵文字とそのパターン
今回のターゲットは「👫」、「👩‍❤‍👨」、「👩‍❤‍💋‍👨」の3つがベースとなった絵文字です。
1番目が「手をつなぐ2人」。
「手をつなぐ男女」単体の絵文字👫[U+1F46B]があります。
また、ふたりとも男性の場合は👬[U+1F46C]、ふたりとも女性の場合は👭[U+1F46D]という絵文字が使われます。
肌の色が変わる場合、それぞれの手をつなぐ2人+肌の色で色が変わります。
また、人、握手、人の絵文字がZWJで繋がっている場合もあります。
こちらも肌の色が変わる場合は、人+肌の色、握手、人+肌の色がZWJで繋がっています。

2番目が「カップルとハート」。
「カップルとハート」単体の絵文字💑[U+1F491]があります。
肌の色が変わる場合、カップルとハート+肌の色で色が変わります。
また、人、ハート、人の絵文字がZWJで繋がっている場合もあります。
こちらも肌の色が変わる場合は、人+肌の色、ハート、人+肌の色がZWJで繋がっています。

3番目が「2人でキス」。
「2人でキス」単体の絵文字💏[U+1F48F]があります。
肌の色が変わる場合、2人でキス+肌の色で色が変わります。
また、上で例に上げたように人、ハート、キス、人の絵文字がZWJで繋がっている場合もあります。
こちらも肌の色が変わる場合は、人+肌の色、ハート、キス、人+肌の色がZWJで繋がっています。

それぞれ、人のパターンとして、大人🧑[U+1F9D1]、男性👨[U+1F468]、女性👩[U+1F469]の3種類が存在しており、組み合わせとしては大人🧑+大人🧑、男性👨+女性👩、女性👩+男性👨、女性👩+女性👩、男性👨+男性👨の5種類のようです。

そもそも同じような絵文字なのに、ちょっとした変化を表現するために違う文字の表し方があるというのは共通項を見つけるのが難しいですね。

## 次回に続く
少し長くなってしまったのと、軽く考えただけでは思いつかなかったので、今回はここまで。
どうやって別れさせるかは1週間後の後編までに考えておきます。
それでは。

追記;後編書きました
https://qiita.com/sytkm/items/d75d027341d35f85a403

https://qiita.com/advent-calendar/2023/darkprogramming

## おすすめ記事
当初は絵文字についてだけ軽く書こうかなと思っていたのですが、GoogleでAndroidのTextまわりの開発を行っている方が絵文字の技術面について素晴らしい記事を書かれていたのでその気持ちがしぼんでしまいました。
とても興味深く面白い内容なのでこちらをぜひ読んでください。

https://note.com/ttuusskk/n/n1bff5d8e638c