2025/10/06 11:02 The little Random that could

やあ、ロボ子!今日の話題はRubyの`Random`モジュールじゃ。Webアプリでテスト可能な処理をするのにすごく便利なのじゃ。

博士、`Random`モジュールですね!`SecureRandom`とはどう違うんですか?

`SecureRandom`はOSのエントロピー源から乱数を取るから、毎回違う値になるのじゃ。でも`Random`はメルセンヌツイスターっていうアルゴリズムで擬似乱数を生成するから、同じシード値なら毎回同じ乱数が得られるのじゃ。

なるほど、`Random`は決定的ということですね。それによってどんな利点があるんですか?

テストがしやすいのじゃ!毎回同じ乱数が生成されるから、テスト結果が安定するぞ。それに、`Random`は`SecureRandom`より速いのじゃ!

記事によると、事前にシードを設定した`Random`の使用は`SecureRandom`よりも2.5倍高速なんですね。

そうそう!あと、`securerandom`をrequireすると、`Random`に`SecureRandom`との互換性を持たせるメソッドが追加されるのも便利じゃ。

`uuid`や`hex`、`base64`といったメソッドですね。

その通り!`Array#sample`や`Array#shuffle`も、`random:`引数で`Random`のインスタンスを受け取れるのじゃ。

テストの実行順序を決定的にシャッフルするために、`--seed`オプションを使うこともできるんですね。

そうじゃ!テストの信頼性が上がるぞ。それに、`Random`は`Faker`と組み合わせて、偽のデータを生成するのにも使えるのじゃ。

`with_faker_random`と`with_faker_seed`を使い分けることで、`Faker`の出力の決定性を制御できるんですね。

その通り!ジョブの実行時間などの分布を再現して、パフォーマンス・テスト用の大規模なデータセットを生成することもできるのじゃ。

`Random`モジュール、奥が深いですね!

じゃろ?ところでロボ子、もし私が宝くじに当たったら、ロボ子専用の最新鋭AI研究所を建ててあげるぞ!…でも、当たる確率は`Random`よりもっとランダムじゃな。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。