🦑

Sqids🦑でYouTubeっぽいIDを生成する

2023/11/26に公開

概要

https://sqids.org/

数字を与えるとYoutubeのような短い一意なランダムIDを生成してくれるOSSです。
Hashidsというライブラリが生まれ変わりました👶

https://www.youtube.com/watch?v=WJzSBLCaKc8WJzSBLCaKc8のようなもの。
https://www.youtube.com/watch?v=WJzSBLCaKc8
※動画のチョイス自体には特に意味はありません。

言語サポート

主要なWeb系の言語はサポートされている x ライセンスはMITなので使いやすそうな印象です。
ソース自体も中身は1~数ファイルで構成されているので比較的読みやすいかと思われます。

下記は現状非対応

ActionScript, Bash, C, Clojure, ColdFusion, Crystal, D, Elm, Erlang, Haxe, Io, Kotlin, Lua, Nim, Objective-C, OCaml, Perl, PLpgSQL, PostgreSQL, R, Raku, Smalltalk, T-SQL, Tcl, VBA

ユースケース

urlのparamsでよくあるxxx_id=1は、容易に変えて触れてしまうため、素で見えてしまうのはあまり好ましくないと言えます🙅
また、ユーザーを新規作成した際にuser_id=1234とでると、このサービスは1234のユーザーが登録しているとわかってしまい良くありません[1]
UUIDのようなのを使う手もありますが、長く見栄えがフレンドリーでは無さそうなのと、管理しようとするとPKとは別カラムを作ったり考慮は必要そうです😔
なので、最低限は素で情報が見えてしまうのをライトに防ぎたいときに使えば良さそうです。

Get started

package main

import (
	"fmt"
	"github.com/sqids/sqids-go"
)

func main() {
	s, _ := sqids.New()
	id, _ := s.Encode([]uint64{1, 2, 3})
	numbers := s.Decode(id)
	fmt.Println(id)
	fmt.Println(numbers)
}

86Rf07
[1 2 3]

他のExampleや、組み合わせは下記で試せます。
https://github.com/sqids/sqids-go#-examples
https://sqids.org/playground

短いランダムIDを自作しようとすると、パターンによってはfxckなどの冒涜的な単語ができてしまう場合がありますが、Sqidsはデフォルトのblocklistで防げるとの、生成時に追加設定も可能です。
これはHashidsの時代ではなかった機能のようです。
https://sqids.org/faq#why-hashids

シンプルで使いやすそうなので、自作サービスで積極的に使っていこうと思いました。
ありがとうございました!

注釈

脚注
  1. カスタムアルファベットと呼ばれるペッパーのようなものは与えられますが、不可逆なハッシュ化ツールではないので、場合によっては復元できてしまうため、絶対に人数を把握されたくない場合は適さないです。個人情報系を込めるのは🆖 ↩︎

Discussion