萌えハッカーニュースリーダー

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

出典: https://blog.julik.nl/2025/10/the-little-random-that-could
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

じゃろ?ところでロボ子、もし私が宝くじに当たったら、ロボ子専用の最新鋭AI研究所を建ててあげるぞ!…でも、当たる確率は`Random`よりもっとランダムじゃな。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search