Hashids で短いユニークUUIDを生成する方法

Hashids で短いユニークUUIDを生成する方法

短いけどユニークなIDを生成したい

アプリやサービスを開発していると、ユニークなIDが必要になる局面に出くわすことがあります。ユニークなIDというと、UUID が使えると思いますが、これは16進数表記の文字列で非常に長い(例: 550e8400-e29b-41d4-a716-446655440000) です。

長いIDになっても問題ない場面であればUUIDを使うのがよいと思いますが、できるだけ短くユニークなIDをほしいときに使えそうな Hashids というライブラリがあります。

ここでは Hashids の使い方をまとめます。

Hashids とは

最初は、「ハシドス」ってなんだと思ってましたが、”Hash IDs” の意味です。

Hashids は、数値から 短い一意の非連続ID を生成する小さなオープンソースライブラリです。347のような数字を “yr8″のような文字列に変換することができます。

また、逆方向の変換、つまりエンコードされた”yr8″のような文字列から347のような元の数値を得ることができます。

特徴

  • 数字から短いユニークなIDを生成できる。(文字列からは不可)
  • 複数の数値からも生成できる。([1, 2, 3] からIDを生成。)
  • IDに使用できる文字列を指定できる。
  • 連続する数の変換結果はバラバラなIDになる。
  • IDの最少文字数を指定できる。
  • だいたいの言語で使える。
    • JavaScript, Ruby, Python, Java, Scala, PHP, Perl, Perl 6, Swift, Clojure, Objective-C, C, C++11, D, F#, Go, Erlang, Lua, Haskell, OCaml, Elixir, Rust, Smalltalk, ColdFusion, Groovy, Kotlin, Nim, VBA, Haxe, Crystal, Elm, ActionScript, CoffeeScript, Bash, R, TSQL, PostgreSQL and for

Hashid の使い方(Javascript)

インストール

以下のいずれかの方法でインストールします。

  • node.js: npm install --save hashids
  • bower: bower install hashids
  • jam: jam install hashids

ブラウザで使う場合は、ダウンロードボタンからダウンロードして、dist/hashid.min.js を使います。

サンプルコード

基本

Hashid クラスを生成し、encode メソッドに数字を渡すことでユニークIDを生成してくれます。

デコードメソッドも同じような使い方です。ただし戻り値は配列になっているので注意しましょう。

<script type="text/javascript" src="dist/hashids.min.js"></script>
<script type="text/javascript">

    var hashids = new Hashids();

    // 数字をエンコードしてIDにする
    var id = hashids.encode(1);

    // デコードして元の数字を取得
    var numbers = hashids.decode(id);

    console.log(id, numbers) // jR [1]

</script>

複数の数値からIDを生成

配列で複数の数字をまとめて1つのIDを得ることも可能です。

// 複数の数字1つのIDにする
var hashids = new Hashids();
console.log(hashids.encode([1,2,3])); // o2fXhV

文字列をユニークIDにしたければ、バイト配列に変換してから渡してやれば、うまく変換できそうです。公式ページをみると、要望が多いけどパスワードのような機密データに対して使う人がでるから実装はしないとのことでした。

var data = (new TextEncoder).encode('あ');
var array = [];
for (let index = 0; index < data.length; index++) {
    array.push(data[index]);
}

var hashids = new Hashids();
console.log(hashids.encode(array)); // 6W9So5i68

ソルト(salt)をつける

ソルトをつけることができます。指定しない場合は空文字指定と同様になります。

// 適当なソルトをつけることもできる
var hashids = new Hashids('salt');
console.log(hashids.encode(1)); // XG

IDの文字数を指定する

生成されるIDの最低文字数を指定できます。

// 最低8文字でIDを生成
var hashids = new Hashids('salt', 8);
console.log(hashids.encode(1)); // zxkXG8ZW

IDに使用される文字を指定する

IDに使用される文字を指定できます。デフォルトだと半角英数字62文字(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890)です。

// 使用できる文字を指定
var hashids = new Hashids('salt', 8, '0123456789ABCDEF');
console.log(hashids.encode(1)); // 8E36E569

まとめ

Javascriptのサンプルを載せましたが、上述の通り、だいたいの言語に対応しているので、いろいろな場面で使えそうです。

その他注意点として、パスワード等のセキュリティが担保されなければならないデータに対しては使ってくれるなとのことです。

以上、便利なライブラリの紹介でした。

Javascriptカテゴリの最新記事