26 ポイント 投稿者 GN⁺ 2023-11-26 | 6件のコメント | WhatsAppで共有
  • Sqidsは数字からYouTubeスタイルのIDを生成するオープンソースライブラリ
  • 生成されたIDは短く、カスタムアルファベットで生成可能であり、衝突が起きないことが保証される
  • 例として提供されているIDは https://example.com/Lqj8a0 のような形式

Sqidsを使う理由

  • Sqidsの主な用途は視覚的な効果にある
  • Webアプリで数字の代わりにIDを使いたい場合、Sqidsは良い選択肢になりうる
  • ユースケースとしては、リンク短縮、URLセーフな利用、イベントID、衝突のないエンコード/デコード、ワンタイムパスワードなどがある
  • 機密データには適しておらず、ユーザーIDとして使う場合はユーザー数が露出する可能性がある

Sqidsの特徴

  • 非負整数から短いIDを生成可能
  • エンコードとデコードが簡単
  • 自動生成されたIDには一般的な卑語が含まれない
  • カスタムID向けのアルファベットシャッフルをサポート
  • 40のプログラミング言語をサポートし、そのうち15は新しいデザインを採用
  • すべてのバージョンで同じIDを生成
  • ライブラリサイズが小さく、寛容なライセンスを備える

GN⁺の見解

  • Sqidsライブラリは、Webアプリで数字の代わりに短く衝突のないIDを使いたい開発者に有用
  • このライブラリは視覚的に魅力のあるIDを提供し、多様なプログラミング言語をサポートしているため導入しやすい
  • オープンソース開発者に有利な機会を提供し、MITライセンスで著作権が保護される

6件のコメント

 
haebom 2023-11-27

クローリング対策によさそうですね。

 
stardust33 2023-11-30

どのように使えばクローリングを防げるのか、もう少し詳しく説明していただけますか?

 
ragus 2023-12-02

URL が単に posts/1, posts/2, posts/3 になっていると、クローラーが 1,2,3,4,5... を入れて回すのですが、
URL が posts/L12Qsd, posts/dei24A のような形式だとそれができないので、そういうことだと思いますね

 
stardust33 2023-12-05

あ! ご回答ありがとうございます。

 
jaypark 2023-11-27

hashids と何が違うのか気になって調べてみたところ、https://hashids.org にアクセスすると https://sqids.org/ に飛ばされるんですね。名前を変えたようです。

https://sqids.org/faq#hashids

 
GN⁺ 2023-11-26
Hacker Newsの意見
  • 連番IDを使う企業からビジネスインサイトを得られる可能性

    • たとえば、会員登録時に付与されたIDから企業の成長率を推定できる
    • アプリケーション内のあらゆるリソース種別に適用できる
    • URLバー内の「ゴミのような値」が今の時代にどれほど重要なのか疑問
    • ほとんどのブラウザはURLの大半を隠すため、UUID v7が広く普及するのを待ちながら、uulidsを使っている
    • 組み込みの時間コンポーネントが時々役立つことがある(例: オブジェクトのマージルール)
  • ワンタイムパスコードへの言及に対する疑問

    • パスコードは予測不能であるべきだが、必ずしも一意である必要はない
    • 適切なランダムソースを使えば機能するが、「ゴミの値で埋められている」という特徴は実際以上に複雑に見える
    • 4〜8個のランダムな数字がうまく機能し、セキュリティレベルも明確に示せる
    • 数字は大文字小文字を区別するラテン文字より理解しやすく、特に別の文字体系を使う言語の利用者にとってそうである
  • 128ビット整数やバイト配列をフォーマットできないことへの失望

    • UUIDのフォーマットが可能になるはず
    • 公開の整数IDを使うことにはあまり乗り気ではない
    • 昇順IDでは重要な情報が漏れるリスクがある
    • URLやQRコードなどのために、UUIDをBase64URLでフォーマットして短くするほうを好む
  • Rubyアプリケーションでは高基数へ変換する方法を使っている

    • SqidはRubyライブラリを提供し、はるかに高い基数の設定を許可しており、大文字や絵文字も含められる
    • スペース節約が大きな差になる前に、ずっと大きな数字が必要になる
    • 新しい依存関係を追加する価値があるのか判断しにくい
  • 卑語フィルタリングは設計上の負債になりうる

    • エンコーディングを維持するために禁止語リストを不変に保つ必要がある
    • そうしないと、以前のsqidsが不正なものとしてデコードされる可能性がある
  • nanoidの使用と安全な文字辞書の利用を好む

    • 「悪い」単語を探すためにハードコードされた実装ではなく、似たような辞書アプローチの利用を提案
    • パフォーマンステストスイートへの関心を表明
    • ほとんどの言語ではUUID v4生成が最適化されているため、カスタムソリューションが本当に優れているのか疑問
  • ランダム生成された文字列の利用に関する議論

    • ID、パスワード再設定トークンなどに使用
    • 何百万個も生成されており、毎日何十万人もこれを確認している
    • ランダムなコンテンツIDに対する不満の事例はない
    • 現代社会は誰かを侮辱することを恐れすぎていて、卑語フィルタがデータベースIDやパスワード再設定トークンにまで拡張されている
    • 最小長を8に設定すれば、ID全体として完全な単語の卑語が現れる可能性は低い
  • "Get Started" セクションで40言語へのリンクを提供していることへの混乱

    • 40言語のうち始められるのは15言語だけで、残り25言語は関心を示すためにリポジトリへスターを付けるよう求めるスケルトンリポジトリである
  • ブロックリストをどう調整・発展させるのかという質問

    • IDがブラックリストに入っていれば単純に増分する
    • IDはブラックリストの内容に固定されており、これを調整すると以前に生成されたIDの特定セグメントが無効になる
  • このスレッドでは多くの人が、ID/数字からインサイトを隠す良い方法だと言及している

    • 生成された値は簡単にデコードできるので、いくつかの数字をデコードすればインサイトを得られてしまうのではないかという疑問が提起されている