3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

JNanoId で NanoID を生成する

Posted at

概要

NanoID というものがあると以下の記事で知りました。

Why is NanoID Replacing UUID?

UUID よりもコンパクトで、また使う文字を生成時に制限できる点が特徴のようです。後者の特徴は、
例えばランダムなファイル名や URL のパスを生成したい時に役立ちそうです。

Java での実装

Java の実装を探してみたところ、 JNanoId というライブラリーがあったので試してみました。

最新のバージョンは 2.0 で、最終リリースが2018年11月と大分古いです。
ライセンスは MIT License です。

130行ほどの小さなクラス1つです。テストコードもあります。

特徴

  • Secure……Java の SecureRandom を用いている
  • Compact……長さが21なので UUID よりも短い
  • URL-Friendly……出力される ID は (A-Za-z0-9_-) に限定されているので、URL に用いることができる
  • Customizable……ID生成に用いる文字と、IDの長さを制限することができる

使用

依存の追加

build.gradle に依存を1行追加してください。

dependencies {
    implementation("com.aventrix.jnanoid:jnanoid:2.0.0")
}

基本的な使い方

NanoIdUtils.randomNanoId() をコールするだけで NanoID の文字列を生成してくれます。非常に簡単です。

import com.aventrix.jnanoid.jnanoid.NanoIdUtils

fun main() {
    repeat(10) { println(NanoIdUtils.randomNanoId()) }
}
出力例
MPKasmT5l0YxpnJe_Qfm1
594vTh1V5Y-cK4B-PgZzt
0vsaKgBxLbLrRnAA9c4lD
UL9GiWbUBKjOqqrST3o9k
OnfVWpbe2UJqpYawqkK_q
tv3sGbsEnDHHmMCgrHHfP
ai6qqzErVFWTUka6OO5Gw
FSmTiYVXyNYJwhPnYBM4-

カスタムIDの生成

また、ID生成に使う文字を制限することもできます。

NanoIdUtils.randomNanoId(SecureRandom(), charArrayOf('a', 'x', '2', '$', '@'), 12)

こうすると、'a', 'x', '2', '$', '@' だけの組み合わせで長さ12のIDを生成してくれます。

出力例
$@$aa@@@$@@2
$2$aa$@@a@@2
@x@xa2xx$xxx
22$xax22axa2

他の実装

Clojure の実装もあるようです。

終わりに

Java で NanoID を実装した JNanoId について書きました。
Java で NanoID を使いたい時は、自分で実装しても良いでしょうが、
既に実装されていてテストコードもあるライブラリーを使っても良いのではと思います。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?