👩‍❤️‍💋‍👩

UUIDを絵文字にするライブラリを作った

に公開

概要

暇つぶしにネットサーフィンをしていて、次のような記事を見つけました。こちらの記事では、UUIDをBase58にエンコードすることで、URLをスッキリさせるライブラリが紹介されています。

https://zenn.dev/yoshinani_dev/articles/001be9fd0377b3

スッキリするのは素敵ですが、無機質な文字の羅列では愛が足りないと感じたので、UUIDをすべて絵文字で表現するライブラリを作成してみました。

どんな感じ

たとえば、こんな無機質なUUIDが:

https://example.com/resource/87040469-7443-4416-bf64-7d45031397b8

このライブラリでエンコードすると……

https://example.com/resource/👩🏽‍❤️‍💋‍👩🏿👩🏻‍❤️‍👨🏾👩🏿‍❤️‍💋‍👩🏻🧚🏻‍♂️🤷🏼‍♂️👩🏿‍❤️‍💋‍👩🏼👨🏾‍❤️‍💋‍👨🏿👩🏽‍❤️‍💋‍👨🏿🧍🏻‍♂️👨🏼‍❤️‍💋‍👨🏽👩🏼‍❤️‍💋‍👩🏻

のような、愛のあふれる絵文字に変換されます[1]。しかも、11文字に短縮可能です!

デメリット

愛にあふれてはいますが、残念ながらデメリットもあります。

  • バイト数が増える

    • マルチバイト文字のため、文字数は短くなってもバイト数は増えてしまいます
    • 中には、1文字で35バイトにもなるとんでもない絵文字も存在します
    • 平均では1文字あたり5バイト強なので、UUID全体で約55バイト必要になります
  • 手打ちできない

    • 絵文字なので基本的に手打ちは困難
  • 絵文字にちゃんと対応していない環境もある

    • アドレスバーにちゃんと表示されない
    • ZWJが含まれると挙動がおかしい時が多い
    • (Zennもちょっと怪しい…)

技術面

技術的な部分は、先の記事で紹介されていたライブラリに丸投げしています。UUID自体をちゃんと触ったことがなかったので、パリティがあるのかどうかなども正直わかっていません。

自分が作ったのは「Base58を絵文字に変換する」部分だけです。TypeScriptも頻繁に書いているわけではないので、ほとんど元のライブラリと同じ構造にしています。uuid58の特徴を読んでもらうとほぼ一緒です。

コード

日曜日の暇つぶしでネタとして作っただけなので、使う人がいるとは思いませんが、もし興味があればご自由にどうぞ。

https://github.com/Nakanishi123/uuidemoji

https://www.npmjs.com/package/uuidemoji

脚注
  1. ハートを含む絵文字は結構あるため、まあまあな頻度で💖ハートが登場します。 ↩︎

Discussion