短いけどユニークな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のサンプルを載せましたが、上述の通り、だいたいの言語に対応しているので、いろいろな場面で使えそうです。
その他注意点として、パスワード等のセキュリティが担保されなければならないデータに対しては使ってくれるなとのことです。
以上、便利なライブラリの紹介でした。
コメントを書く