Rubyでランダム文字列を作る8つの方法! – Japanシーモア

Rubyでランダム文字列を作る8つの方法!

Rubyを使ってランダム文字列を生成する方法を学ぶプログラマーRuby
この記事は約8分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

このサービスは複数のSSPによる協力の下、運営されています。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Rubyを使ったランダム文字列の生成法を学びたいと思っているあなたへ。

本記事では、プログラミング初心者でも実践できる8つの方法を、例示コード付きで詳しく解説します。

理論から実践までしっかりサポートするので、最後まで読むことでRubyでランダム文字列を作れるようになります。

●Rubyでのランダム文字列の生成とは

Rubyでは、様々な方法でランダムな文字列を生成することが可能です。

これは、パスワード生成や一時的なトークン生成など、セキュリティ面で非常に重要な役割を果たします。

また、テストデータを作成したり、ユニークなIDを生成する際にも利用されます。

●Rubyでランダム文字列を作る方法

それでは具体的にどのようにしてランダム文字列を生成するのか、次の8つの方法を通じて学んでいきましょう。

○サンプルコード1:SecureRandomを使った方法

Rubyの標準ライブラリの一つであるSecureRandomを使うと、安全なランダム文字列を生成することができます。

次のコードは、長さ16のランダム文字列を生成しています。

require 'securerandom'

random_string = SecureRandom.alphanumeric(16)
puts random_string

上記コードは、SecureRandom.alphanumeric(16)によって長さ16のランダム文字列を生成しています。

○サンプルコード2:Array#sampleを使った方法

Array#sampleを使うと、配列からランダムに要素を抽出することができます。

これを利用してランダム文字列を生成することも可能です。

下記のコードは、アルファベットの配列からランダムに文字を抽出し、それを連結してランダム文字列を生成しています。

alphabet = ('a'..'z').to_a
random_string = Array.new(16) { alphabet.sample }.join
puts random_string

このコードでは、alphabet.sampleで配列からランダムに1文字を選び、それを16回繰り返して新たな配列を作成し、最終的にjoinメソッドでそれらを連結してランダム文字列を生成しています。

○サンプルコード3:Rangeオブジェクトを使った方法

次に、RangeオブジェクトとArray#mapメソッドを使ってランダム文字列を生成する方法を見てみましょう。

下記のコードは、アルファベットの範囲を定義し、それをランダムに選択し連結することでランダム文字列を生成しています。

random_string = (1..16).map { ('a'..'z').to_a.sample }.join
puts random_string

このコードでは、(1..16).mapで16回ループを行い、その中で('a'..'z').to_a.sampleを使ってアルファベットからランダムに1文字を選び、最後にそれらを連結してランダム文字列を生成しています。

○サンプルコード4:randメソッドを使った方法

次に、randメソッドを利用したランダム文字列の生成方法を見ていきましょう。

このメソッドを使うと、0から指定した数値までの間でランダムな数値を生成できます。

下記のコードは、randメソッドとアスキーコードを組み合わせて、ランダムなアルファベット文字列を生成しています。

random_string = (1..16).map { (rand(26) + 'a'.ord).chr }.join
puts random_string

このコードでは、rand(26)で0から25までのランダムな数値を生成し、それに’a’のアスキーコードを足すことで’a’から’z’までのランダムな文字を生成しています。

それを16回繰り返して配列に格納し、最後にjoinメソッドでそれらを連結してランダム文字列を生成しています。

○サンプルコード5:Base64モジュールを使った方法

RubyにはBase64というモジュールもあります。

これを使えば、バイトデータを64種類の印字可能な文字列にエンコードできます。

次のコードでは、ランダムなバイトデータを生成し、それをBase64でエンコードしてランダム文字列を作成しています。

require 'base64'
require 'securerandom'

random_string = Base64.strict_encode64(SecureRandom.random_bytes(16))
puts random_string

このコードでは、まずSecureRandom.random_bytes(16)で16バイトのランダムなバイトデータを生成しています。

そして、Base64.strict_encode64を使ってそれをエンコードし、ランダムなBase64文字列を作成しています。

○サンプルコード6:UUIDモジュールを使った方法

UUID(Universally Unique Identifier)もランダム文字列生成の一つの手段です。

UUIDは全世界で一意のIDを生成するための規格で、その生成結果はランダム文字列として利用できます。

下記のコードは、Rubyの標準ライブラリの一つであるuuidを利用してUUIDを生成しています。

require 'securerandom'

random_string = SecureRandom.uuid
puts random_string

このコードでは、SecureRandom.uuidメソッドを使ってUUIDを生成し、その結果をランダム文字列として利用しています。

生成されるUUIDはハイフンが含まれる36文字の文字列です。

○サンプルコード7:Random.randを使った方法

Randomモジュールのrandメソッドを使ってもランダムな文字列を生成できます。

下記のコードは、Random.randメソッドとアスキーコードを組み合わせて、ランダムなアルファベット文字列を生成しています。

random_string = (1..16).map { (Random.rand(26) + 'a'.ord).chr }.join
puts random_string

このコードは先ほどのrandメソッドを使った例と同様に、0から25までのランダムな数値を生成し、それに’a’のアスキーコードを足すことでランダムなアルファベット文字を生成しています。

それを16回繰り返し、配列に格納してから連結してランダム文字列を生成しています。

○サンプルコード8:[a..z]を使った方法

次に紹介するのは、[a..z]を使った方法です。

こちらの手法では、範囲演算子(..)と配列を組み合わせて、一定範囲の文字を生成することができます。

それでは、具体的なコードを見てみましょう。

random_string = Array.new(16){[*'a'..'z',*'0'..'9'].sample}.join
puts random_string

このコードでは、’a’..’z’と’0′..’9’の範囲を配列化し、その中からランダムに1文字を選んで新たな配列を生成しています。

そしてその配列を連結してランダム文字列を作成しています。Array.new(16)は、16要素の新しい配列を作成することを意味します。

ブロック({…}内のコード)がそれぞれの要素に対して実行され、その結果が新しい配列の各要素となります。

この例では、’a’から’z’、’0’から’9’の範囲を配列化し、その中からランダムに1文字選んでいます。

●Rubyでランダム文字列を作る際の注意点

Rubyでランダム文字列を作る際には、いくつかの注意点があります。

まず一つ目として、ランダム文字列が一意である必要がある場面では、UUIDを使用することを検討してみてください。

UUIDは全世界で一意なIDを生成する規格であるため、その生成結果はランダム文字列として利用できます。

二つ目の注意点として、生成したランダム文字列が特定の条件(例えば、特定の文字を含むなど)を満たしているかどうかを確認する必要がある場合があります。

このような場合には、ランダム文字列の生成と条件チェックを繰り返すことで求めるランダム文字列を得ることができます。

●ランダム文字列のカスタマイズ方法

さて、これまで見てきたように、Rubyにはさまざまなランダム文字列の生成方法があります。

しかし、これらの方法だけではなく、自分自身でランダム文字列の生成方法をカスタマイズすることも可能です。

例えば、ある特定の文字だけを含むランダム文字列を生成したい場合には、その文字だけを配列に格納し、その中からランダムに文字を選ぶ方法が考えられます。

また、生成したランダム文字列に対して何らかの変換(例えば、全て大文字にするなど)を施すことも可能です。

必要なランダム文字列の特性に応じて、適切な方法を選択しましょう。

まとめ

以上、Rubyでランダム文字列を作る8つの方法を詳しく解説しました。

それぞれの方法には、特徴と適した使用場面がありますので、必要な機能に応じて適切な方法を選択してください。

ランダム文字列の生成は、APIのトークン生成やパスワード生成など、多くの場面で使用されます。

今回学んだ知識が、皆様のプログラミングのスキル向上に役立つことを願っています。