Ruby でID用のユニークな文字列を生成する方法

引き続き、フィヨルドブートキャンプの課題としてSinatraを使ったメモアプリの開発に取り組んでいます。 今回の課題では作成したメモのデータの管理にDBを使わず、ファイルに読み書きしてデータを管理しなければなりません。 そこで今回は他の受講生の日報を参考にしてJSONファイルを用いたデータの管理方法をとることにしました。 JSONファイルを用いたデータの管理方法を実装するにあたって、個別のIDを用意しなければならず連番などではなく予測できないユニークな値の生成が必要になったので調べてみました。

結論

SecureRandomモジュールのuuid メソッドを使う。

UUIDとは、全世界で2つ以上のアイテムが同じ値を持つことがない一意な識別子のこと(参照: UUID)

  • require 'securerandom' でSecureRandomモジュールを読み込む
  • uuid メソッドで生成された値は文字列
  • 128 ビットによる数値で16進数が生成される
> require `securerandom`
true

> id = SecureRandom.uuid
#=> "4ef81d22-ea5e-432f-9916-0287fd06dee1"

> id
#=> "4ef81d22-ea5e-432f-9916-0287fd06dee1"

> id.class
#=> String

uuid 以外にもSecureRandomモジュールには以下のようなメソッドが用意されている。

  • alphanumeric: ランダムな英数字
  • base64: ランダムな Base64 文字列、何に使うのかは分からない
  • hex: ランダムな16進数文字列
  • random_bytes ランダムなバイト文字列

まとめ

今回良くなかった点として情報が多かったという理由だけでuuid メソッドを選択して実装を進めました。 SecureRandom モジュールの他のメソッドではなくuuid メソッドを選択した理由をちゃんと説明できないので、その点はちゃんと深堀りする必要がありそうです。

参照

module SecureRandom (Ruby 3.1 リファレンスマニュアル)