👋

【Ruby】デイリースクラムで使えるshuffleメソッド

2023/06/15に公開

DMM webcampの講座では、学びや進捗を共有するため、4~5人でデイリースクラム(昨日の進捗報告&今日の予定などを話し合うミーティング)を行います。

今日は誰から発表する? と毎回話し合うのは手間ですよね。
そこでプログラミングスクールっぽくプログラムで順番を決めてみましょう!

Rubyを使い、名前と番号を取り出すコードを作成します。
使用するのは 配列for 繰り返し処理shuffleメソッドです。
まずはそれぞれ解説します。

配列とは

Rubyの配列は、複数の要素を順番に格納するためのデータ構造です。
配列を使うことで、関連するデータを一つのまとまりとして扱うことができます。

例えば、果物のリストを配列で表す場合、次のようになります。

ruby
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう"]

上記の例では、fruitsという配列に4つの要素が含まれています。それぞれの要素は、ダブルクォーテーションで囲まれた文字列です。
配列の要素は、0から始まるインデックス番号でアクセスすることができます。例えば、fruits配列の2番目の要素"オレンジ"にアクセスするには、以下のようにします。

ruby
puts fruits[2]

配列の長さ(要素の数)は、lengthメソッドやsizeメソッドを使って取得することができます。

ruby
puts fruits.length

この場合、4が表示されます。

forループとは

forループは、同じ処理を繰り返すための仕組みです。例えば、果物のリストを順番に表示する場合、forループを使えば簡単です。

ruby
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう"]

for fruits in fruits
  puts fruit
end

上記のコードではfruitsという配列の要素を順番に取り出して、それぞれの要素を表示しています。
具体的な処理の流れは以下の通りです。

  1. 最初の要素"りんご"がfruitという変数に代入されて処理が実行される。
  2. puts fruitによって、fruitの値が表示される。
  3. 次の要素"バナナ"がfruitに代入されて処理が実行される。
  4. 再びputs fruitによって、新たなfruitの値が表示される。
  5. 上記のステップが配列の要素の数だけ繰り返される。

結果として、以下のように果物のリストが順番に表示されます。

りんご
バナナ
オレンジ
ぶどう

shuffleメソッド

shuffleメソッドは、配列の要素をランダムに並び替えるためのメソッドです。

ruby
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう"]
shuffled_fruits = fruits.shuffle

puts shuffled_fruits

fruitsという配列に4つの果物が入っています。これらの果物をshuffleメソッドを使ってランダムに並び替え、shuffled_fruitsに代入しています。その後、shuffled_fruitsを表示しています。
実行結果は次の通りです。

オレンジ
ぶどう
バナナ
りんご

果物の名前がランダムに並び替えられた結果なので、毎回実行すると、果物の順番が変わります。

名前と番号を取り出すコード

それでは、今までの知識を応用し、ランダムに名前を取り出し、順番を決めるコードを作成します。

shuffle.rb
names = ["A", "B", "C", "D", "E"]
result = names.shuffle

for i in 0...result.length
  puts "#{i+1}: #{result[i]}"
end

以下にコードの説明をします。

ruby
names = ["A", "B", "C", "D", "E"]
result = names.shuffle

namesという変数に5つの名前が入った配列を定義します。
次に、resultという変数に、namesの要素をシャッフルした結果を代入します。
つまり、5つの名前がランダムな順番で並び替えられます。

ruby
for i in 0...result.length
  puts "#{i+1}: #{result[i]}"
end

続いて、forループを使って、resultの要素を順番に表示させます。
iは、ループ内で使用される変数です。これは「ループ内で使うカウンター変数」と呼ばれるもので、ループが実行するたびに値が増えていきます。

0...result.lengthという部分は、ループの範囲を指定しています。
ループは0から始まり、result配列の要素の数(今回は5)まで1ずつ増加しながら繰り返します。
ここで注意するのは、...を使う点です。これは範囲指定のための演算子で、最後の値は含まれないことを意味します。
例えば、以下のような範囲指定があるとします。

ruby
range = 1...5

この範囲指定は、1から始まり5未満の範囲を表します。つまり、1,2,3,4の値が含まれますが、5は含まれません。
以下のコードでは、範囲指定を使ってループを回しています。

ruby
for i in 1...5
  puts i
end

このコードを実行すると、1から4までの値が順番に表示されます。

1
2
3
4

5は範囲指定に含まれていないため、ループの対象外となります。
配列のインデックスは0から始まるので、最後の値を含まない方が、インデックスとの整合性が取りやすくなります。

ループの本体では、putsメソッドを使って文字列を表示しています。
#{i+1}:は表示する順番を表し、#{result[i]}result配列のi番目の要素を表します。
ここでi+1をしているのは、表示する順番を1から始めるためです。

つまり実行する度に、表示される順番が以下のようにランダムに表示されます。

1: C
2: A
3: E
4: B
5: D

ループが繰り返されるたびに、カウンター変数iの値が増えていき、次の要素が表示されます。

まとめ

今回は、配列とforとshuffleを応用しコードを作成しました。
今回紹介した方法以外にも、同じような出力ができるコードが作れます。
もしこんな方法あったよ等ありましたらぜひ共有いただけたら嬉しいです。

同じスクール生がいましたら、今回のコードを使ってみてくださいね!

最後まで読んでいただき、ありがとうございました。

Discussion