すでにメンバーの場合は

無料会員登録

GitHubアカウントで登録 Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

登録がまだの方はこちらから

Pikawakaにログイン

GitHubアカウントでログイン Pikawakaが許可なくTwitterやFacebookに投稿することはありません。

Ruby

更新日:

【Ruby】 ワークショップ Ruby

今回使用する言語は、Rubyです。
プログラミング言語は人間界の言語と同じくらい種類があります。

言語の中でも学びやすい言語、学びにくい言語がありますね。
例えば英語は比較的学びやすいですが、日本語はひらがなやカタカナ、漢字まであったりと取得するのに難しい言語です。

それと同じようにプログラミング言語にも学びやすい言語と学びにくい言語があります。
その中でも比較的学びやすい言語の一つがRubyです。

Rubyは日本人のまつもとゆきひろさんが開発した言語で、非常にシンプルで直感的に書けるのが特徴です。

この記事を読めばジャンケンアプリケーションを通して、プログラミングの楽しさを体験できます。

プログラミングの流れを把握しよう

それではプログラミングは一体どういった流れで行うのでしょうか?
エンジニアの仕事の風景を想像した際には、真っ黒い背景の画面に英語が書かれている場面を思い浮かべる方が多いのではないでしょうか?

エンジニア

これはプログラミングのコードを打ち込んでいる場面です。
ですが、ただコードを書いただけではプログラミングは実行されません。
ファイルに書いたコードを実行するにはパソコンに「このコードを動かして」と言ったような命令を出す必要があります。

その際に使うのがテキストエディタターミナルです。

テキストエディタとは?

テキストエディタとは名の通りテキストを編集するアプリケーションです。
windowsであればメモ帳もテキストエディタです。
他にもwordなどの文章作成ソフトもテキストエディタです。

プログラミングのコードを書く場合、メモ帳のような一般的な文章作成ソフトよりも、プログラミングのコード内で使う単語によって色が変わったりするとコードがとても見やすくなります。

テキストエディタ

プログラミングに特化したテキストエディタを使うことにより、それが可能になるのでエンジニアはこのようなプログラミングに特化したテキストエディタを使用してコードを書いています。
よく使われるテキストエディタには下記のようなものがあります。

  • Visual Studio Code
  • SublimeText
  • Atom

ターミナルとは?

テキストエディタを使ってプログラミングのコードを記述しただけではプログラムは動きません。
プログラムを動かすにはパソコンに「このプログラムを実行して」と命令を出す必要があります。
その命令を出すためにはターミナルと呼ばれるアプリケーションなどを利用する必要があります。

またターミナルにはプログラムを実行するコードを打ち込むだけではなく、実行されたコードの結果を表示する役割も持っています。
いわばユーザーとパソコンが情報を伝達するための仲介役と考えると良いでしょう。

じゃんけんアプリ

このようにプログラムが実際に動く流れは下記のようになります。

1.テキストエディタを使ってコードを記述する
2.ターミナルを使って記述したコードを実行する
3.ターミナルに実行された結果が出力される

この流れを意識しながら進めていきましょう。

プログラミングの準備をしよう

それでは早速プログラミングをしていきましょう。
前述した通り、今回はRubyを使ってプログラミングをしていきます。
その際、お使いのパソコンにRubyをインストールする必要があります。

Macであれば最初からインストールされていますが、Windowsの場合はご自身でRUbyをインストールしなければなりません。
その他にもプログラミングをするための環境を整える必要があります。

今回はあらかじめプログラミング環境が用意してあるサービスを使って、コードを書いていきます。

このワークショップでは、Webサイト制作に引き続きReplitを利用してプログラミングをしていきます。

準備をしよう

それでは準備をしていきましょう。

以下の画面のように「Create」をクリックしましょう。

すると下記の画面になるので、Templateは「Ruby」を選択し、Titleに「pikawaka-workshop-ruby」を入力後、「Create Repl」をクリックします。

その後、下記の画面になれば準備完了です。

画面の左側の部分が実際にプログラミングのコードを記述するテキストエディタ、右側の部分がコードを実行するためのターミナルです。

簡単なコードを実行してみよう

それでは最初に簡単なコードを実行してみましょう。
テキストエディタには、すでに下記のコードが記述されていますね。

main.rb | 簡単なコードの記述
1
puts 'Hello, World!'

以下のようにメニューの「Run」をクリックするとコードが実行され、実行結果が右のターミナルに表示されるはずです。

それでは、テキストエディタの内容を以下に変えてみましょう。

main.rb | 簡単なコードの記述
1
puts 'こんにちわ'

続いて、メニューの「Run」をクリックしてみましょう。以下のように右側にこんにちわと表示されるはずです。

このように「''」で囲った文字の「こんにちわ」が出力されたのがわかります。
では上のコードの意味を確認していきましょう。

putsメソッド

最初に記述した「puts」はメソッドと言います。
「メソッド」とはわかりやすく言うと何らかの処理をコンピューターに実行してもらう命令の集まりです。

今回使った「puts」もメソッドのひとつです。
「puts」メソッドは「後に書いたコードをターミナルに出力してください」と言う命令を実行するメソッドです。

文字列オブジェクト

上の例では右に'こんにちわ'と記述しました。
このように''、もしくは""で囲んだデータのことを文字列オブジェクトと呼びます。

「オブジェクト」とはRubyで扱うことのできるデータのことを指します。
オブジェクトには色々な種類がありますが、文字として扱えるデータのことを「文字列オブジェクト」と呼びます。

今回は「putsメソッド」の右側に'こんにちわ'と言う文字列オブジェクトを使用したので、ターミナルには「こんにちわ」と言う文字が出力されたということになります。

数値オブジェクト

数値オブジェクトは、数値としてデータを扱うことができるオブジェクトです。
定義する際には文字列オブジェクトの時のように"で囲う必要はありません。
逆に"で囲ってしまうと文字列オブジェクトとして作成されてしまうので注意が必要です。

数値として扱うことができるので計算式も書くことができます。
試しにテキストエディタに下記のコードを記述して実行してみましょう。

main.rb | 数値オブジェクト
1
puts 1 + 2

先ほどと同じようにメニューの「Run」をクリックするとコードが実行されます。
すると「1 + 2」の結果である「3」が出力されたのが確認できます。

これを「"」で囲ってしまうと前述したように「1」と言う数値ではなく「1」と言う文字で扱われてしまい、計算ができなくなってしまうので注意しましょう

lengthメソッド

文字列オブジェクトには文字の数を数えてくれる便利なメソッドが用意されています。
それがlenghtメソッドです。
数えたい文字列オブジェクトに対して使用します。

rubyファイル | lengthメソッド
1
2
文字列オブジェクト.length
=> 文字列オブジェクトの文字数が返る

実際に文字の数を数えてみましょう。

main.rb | lengthメソッド
1
2
puts "pikawaka".length
8 # 文字の数は「8」なので「8」が出力される

このように「8」が出力されました。

lengthメソッド

演算子

先ほどの例の「1 + 2」のように計算をするときに使った+などが演算子と呼ばれるものです。
Rubyの演算子には下記のようなものがあります。

演算子 意味
+ 加算(足し算)
- 減算(引き算)
* 乗算(掛け算)
/ 除算(割り算)
% 剰余(割った時の余り)

上の2つは普段使っている計算式と同じですが、掛け算は×ではなく*を、割り算は÷ではなく/を使います。
また最後の%は割った時の余りを求める演算子です。
例えば下記のコードの結果は7を3で割った時の余りになるので1となります。

main.rb | 剰余の計算
1
2
puts 7 % 3
1 # 7を3で割った時の余りである1が出力される

比較演算子

演算子は主に計算を行うものでした。
それに対して値同士を比較する際に使うのが比較演算子です。
比較演算子には下記のようなものがあります。

比較演算子 意味
a == b aとbが等しい
a != b aとbが等しくない
a < b aはbより小さい
a > b aはbより大きい
a <= b aはb以下
a >= b aはb以上

「等しい」を表すときには実際の算数で使われる「=」ではなく「==」であることに注意が必要です。
プログラミングでの「=」は別の役割で使用します。

比較演算子を使った式が正しいときにはtrueが、正しくなければfalseが結果として返ってきます。
プログラミングでのtruefalseは「真を表すもの」、「偽を表すもの」を意味します。

main.rb | 比較演算子
1
2
3
4
5
6
7
8
9
10
11
12
puts 5 == 5 # 5と5は等しい
true
puts 5 != 5 # 5と5は等しくない
false
puts 2 < 5 # 2は5より小さい
true
puts 5 > 7 # 5は7より大きい
false
puts 3 <= 3 # 3は#以下である
true
puts 8 >= 2 # 8は2以上である
true

実行するとこのような結果になるのが確認できます。

比較演算子

条件分岐

条件分岐とは「もしも〜ならば〜をして、そうでなければ〜する」といったように条件によって実行する内容を変化させることを言います。
プログラミングでは必ず出てくる概念です。

その際に使うのがif文です。
例えば「雨が降っていたら傘を持って行こう」というときには下記のようになります。

rubyファイル | if文の例え
1
2
3
4
5
if 雨が降る
  傘を持っていく
else
  何も持たない
end

if文の右には式の結果が正しければtrueが、間違っていればfalseで返ってくる条件式を書き、その下にはtrueだったときに実行してほしいコードを記述します。
elseはif文の右の条件式がfalseだったときに動く指定になるので、条件式は書きません。
その下にはfalseだったときに実行してほしいコードを記述します。

最後にendを書いてif文が終わったということを示しておきます。
試しに下記のコードを書いて実行してみましょう。

main.rb | if文
1
2
3
4
5
if 0 < 5
  puts "5は正の数です"
else
  puts "正の数ではありません"
end

if文の条件は0 < 5です。
5は0より大きいためtrueとなるので「puts "5は正の数です"」のコードが実行されるはずです。
では実際にコードを動かしてみましょう。

if文

このようにtrueの時のコードが実行されました。
それでは条件がfalseになるよう条件式を変えてみましょう。

main.rb | if文
1
2
3
4
5
if 0 < -1
puts "-1は正の数です" else puts "正の数ではありません" end

-1は0より大きくないので式の返り値はfalseとなり、elseで指定されたコードが実行されるはずです。
コードを実行して結果をみてみましょう。

if文

このように「正の数ではありません」が出力されましたね。

条件式のネスト

if文の条件式はネストして書くことができます。

例えば、「年齢が18歳以上の場合は、〇〇と処理をする。さらに年齢が20歳以上の場合は、□□の処理をする」という処理を行いたい場合は、 if を入れ子にすることによって条件を追加できます。

コードで書く場合は以下のようなイメージです。

rubyファイル | if文の例え
1
2
3
4
5
6
7
8
if あなたの年齢が18歳以上ならば
  車の免許が取れます。
  if あなたの年齢が20歳以上ならば
    お酒も飲めます。
  end
else
  車の免許は取れません。
end

これを実際の動くコードに書き換えると、以下のようになります。

rubyファイル | if文の例え
1
2
3
4
5
6
7
8
9
10
age = 21

if age > 18
  puts '車の免許が取れます。'
  if age > 20
    puts 'お酒も飲めます。'
  end
else
  puts '車の免許は取れません。'
end

このように条件を追加したい場合は、 ifを入れ子にしましょう。

変数

次はプログラミング独特の概念である変数について学んでいきましょう。

先ほど比較をしたい数はそのまま数をコードに記述していました。
この場合、数値は比較する式の部分とputsメソッドで出力する2箇所で使われているため、条件を変えたい時には2箇所コードを修正する必要があります。

2箇所ならまだ手間はかかりませんが、これが10箇所とかとなると修正が非常に大変な作業になりますね。
そのようなときに便利なのが変数です。

変数とはオブジェクトにつけておく名札のようなイメージです。
例えば先ほどの数字の部分に変数で名札をつけるには下記のように記述します。

main.rb | 変数の定義
1
num = 5

このように=を使い変数を定義します。
実際の我々の世界では=は「等しい」という意味で使いますが、プログラミングの世界では「代入する」という意味になります。

上の例では「5という数字をnumという変数に代入した」という意味になるわけです。
実際に同じ結果になるのかコードを実行して確認してみましょう。

main.rb | 変数の確認
1
2
3
4
5
num = 5
puts 5
5
puts num
5

変数

このようにどちらも「5」と出力されるのが確認できました。
それでは先ほどの条件分岐のコードを変数を使って書き換えてみましょう。

main.rb | 変数を使ったif文
1
2
3
4
5
6
num = 5
if 0 < num
  puts "numは正の数です"
else
  puts "正の数ではありません"
end

上のように「5」の部分を変数を使い書き直しました。
うまくいくか実行してみましょう。

変数

するとどうでしょう。
出力結果の文章が「numは正の数です」というように変数の名前そのものが表示されてしまいました。
このように"の中で囲まれた文字列オブジェクトの中では変数の中身ではなく、変数の名前そのものが表示されてしまいます。

式展開

このように文字列オブジェクト内で変数の中身を出力させる場合には式展開というものを使用します。
式展開は#{ 変数 }のように記述します。

式展開を使うことによって文字列の中では変数の名前ではなく、変数の中身の値が出力されるようになります。
それでは先ほどのコードを式展開を使って書き直してみましょう。

main.rb | if文
1
2
3
4
5
6
num = 5
if 0 < num
  puts "#{num}は正の数です"
else
  puts "正の数ではありません"
end

するとこのように変数numの中身である「5」が出力されました。

式展開

これで今後、比較したい数字を変えたいときは変数numの定義の部分だけ変えてあげれば良くなりました。

getsメソッド

プログラミングの概念を使ってコードをだいぶ効率よく書くことができるようになってきました。
さらに使い勝手の良いコードに変えていきましょう。

上の例では、変数を変えたい場合にはその都度コードを書き換える必要があります。
それをこのコードを実行したユーザーが自由に決めることができるとさらに便利なプログラムになりそうです。
そういったときに使用するのがgetsメソッドです。

getsメソッドが実行されるとその場所で一旦プログラムの実行が止まり、ターミナルが値を入力するモードに変わります。
するとそこで打ち込んだ値をgetsメソッドで取得することができます。
取得した値は変数に代入して使用します。

rubyファイル | getsメソッド
1
2
3
4
5
num = gets
# ターミナルが入力待ちになるので「10」と入力
puts num
# numに代入された10がターミナルに出力される
10

試しに先ほどのコード内で変数を定義する部分にgetsメソッドを使ってみましょう。

main.rb | getsメソッド
1
2
3
4
5
6
num = gets
if 0 < num
  puts "#{num}は正の数です"
else
  puts "正の数ではありません"
end

それでは実行してみます。

getsメソッド

入力待ちになったので5を入力してみましたがエラーになってしまいました。
なぜでしょう?

それはgetsメソッドで入力した値は全て文字列オブジェクトになってしまうからです。
今回はifの条件文で0という数字との比較をしているため、numという変数の中身も数値オブジェクトでなければなりません。
ではこの場合一体どうすれば良いのでしょうか?

to_iメソッド

文字列オブジェクトを数値オブジェクトに変換したい場合にはto_iメソッドを使用します。

今回はgetsメソッドで入力した値を数値オブジェクトに変換したいので下記のように記述します。

main.rb | to_iメソッド
1
2
3
4
5
6
num = gets.to_i
if 0 < num puts "#{num}は正の数です" else puts "正の数ではありません" end

それでは実行してみます。

to_iメソッド

今回は入力した値がto_iメソッドにより数値オブジェクトに変換されてエラーなく実行されました。

Rubyの入門〜じゃんけんアプリケーションを作ろう

それではここまで学んできた知識を活かして簡単なアプリケーションを作成してみましょう。
今回は、じゃんけんができるプログラムを作成いたします。

じゃんけんアプリ

上の動画のようにコードを実行すると下記のようにコードが動きます。

1.「最初はグー!じゃんけんポン!」が出力されじゃんけんがスタート
2.「何を出しますか?」が出力される
3.出したい手の数字を入力する
4.相手の手がランダムで選択される
5.勝敗が判断される
6.結果が出力される

文字を出力しよう

それでは早速コードを書いていきましょう。
まずは1.「最初はグー!じゃんけんポン!」が出力されじゃんけんがスタートの部分から順番にコードを記述していきます。

今回使う知識は文字をターミナルに出力するためのputsメソッドです。
文字は"で囲うと文字列オブジェクトとして作成できましたね。
その文字を出力するために下記のように記述してみましょう。

main.rb | 文字列の出力
1
puts "最初はグー!じゃんけんポン!"

次に「何を出しますか?」を出力するために続けてコードを記述します。

main.rb | 文字列の出力
1
2
puts "最初はグー!じゃんけんポン!"
puts "何を出しますか?"

次は出す手を選択してもらうための選択肢を表示させましょう。

main.rb | 文字列の出力
1
2
3
puts "最初はグー!じゃんけんポン!"
puts "何を出しますか?"
puts "[0]グー [1]チョキ [2]パー"

それではここまでのコードを実行し、結果を確認してみましょう。

出力結果確認

このように文字が出力されているのが確認できました。

出す手を選択してもらおう

次にプレイヤーに出す手を選択してもらうためのコードを書いていきましょう。
値を入力してもらうにはgetsメソッドを使用するのでしたね。
また入力してもらった値はこの後コンピューターの出した手と比較するために何回も使用するため変数に代入しておきましょう。

main.rb | 値の入力と変数への代入
1
2
3
4
5
puts "最初はグー!じゃんけんポン!"
puts "何を出しますか?"
puts "[0]グー [1]チョキ [2]パー"

num = gets

ただこのままだと入力してもらった値は文字列オブジェクトとして代入されてしまいます。
今回は数値として比較したいため、文字列オブジェクトと数値オブジェクトに変換するto_iメソッドを使いましょう。

main.rb | 値の入力と変数への代入
1
2
3
4
5
puts "最初はグー!じゃんけんポン!"
puts "何を出しますか?"
puts "[0]グー [1]チョキ [2]パー"

num = gets.to_i

これで自分が出す手を選択することができました。

コンピューターの手を自動で選択させよう

次はコンピューターの手を選択する部分です。
コンピューターが出す手はランダムで選択したいですね。
では自動で0から2までの数値をランダムで取得するにはどうしたら良いでしょうか。

rubyではランダムに数値を返すためのrandメソッドが用意されています。

randメソッド

randメソッドとは指定した範囲の数字をランダムで返してくれるメソッドです。
今回は0から2までの数字を返してもらいたいので下記のように記述します。

rubyファイル | randメソッド
1
rand(3)

これを実行するとランダムで0から2の数字が返ってきます。
rand(10)としたら0から9の数字が返ってきます。

rubyファイル | randメソッド
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# rand(3)とすると0から2までの数字がランダムに返る
rand(3)
=> 1
rand(3)
=> 0
rand(3)
=> 2

# 10とすると0から9までの数字がランダムに返る
rand(10)
=> 7
rand(10)
=> 5
rand(10)
=> 3

返ってきた値は自分の手の値と比較するため今回も変数に代入しましょう。

main.rb | 変数の代入
1
2
3
4
5
6
puts "最初はグー!じゃんけんポン!"
puts "何を出しますか?"
puts "[0]グー [1]チョキ [2]パー"

num = gets.to_i
computer = rand(3)

ここまでで自分の手と相手の手が決定しました。
次は勝敗を決めるため、それぞれの手の値を比較していきます。
その際に使うのが条件分岐です。
条件分岐にはif文を使うのでした。

その前に勝敗を決めるための条件を考えていきましょう。
勝敗には下記の3つの結果があります。

1.勝ち
2.負け
3.あいこ

それでは自分の手の値と相手の手の値を比較して、それぞれの勝敗に当てはめるにはどのような条件式を作れば良いか考えてみましょう。

勝敗の条件を考えよう

一番簡単なのは「あいこ」の時ですね。
同じ手であればあいこになるのでお互いの手の値が等しい時という風に定義できそうです。

rubyファイル | あいこの時
1
2
# 「あいこ」の時の条件式
num == computer

次は「勝ち」の時を考えてみましょう。
勝ちの条件は3つあります。

1.自分が「グー」で相手が「チョキ」
2.自分が「チョキ」で相手が「パー」
3.自分が「パー」で相手が「グー」

1から順に数値との比較で条件式を作ってみましょう。
自分がグーの時num == 0で、相手がチョキの時はcomputer == 1になります。
今回はこのどちらの式もtrueだったらという条件式を作る必要があります。

それではこのように2つの式をまとめた結果をtruefalseで判断したい場合はどうしたら良いでしょうか?

論理演算子を使おう

rubyでは複数の式をそれぞれ判断して、「aとbが等しい」かつ「cとdは等しい」といったように条件式を組み合わせた条件式を作ることができます。
このように複数の条件式を組み合わせる演算子を論理演算子と呼びます。
rubyの論理演算子には下記のようなものが用意されています。

論理演算子 記述例 意味
&& a == b && c == d aとbがtrue、かつcとdがtrueであればtrue
|| a == b || c == d aとbがtrue、またはcとdがtrueであればtrue

つまりどちらの式もtrueであればtrueになるのが&&、どちらか一方の式がtrueであればtrueになるのが||です。

それでは1の自分が「グー」で相手が「チョキ」の式を論理演算子を使って定義してみましょう。

rubyファイル | 論理演算子
1
num == 0 && computer == 1

このようなコードになります。
よりわかりやすくするために( )で囲ってみましょう。

rubyファイル | 論理演算子
1
(num == 0) && (computer == 1)

すると1つの式がまとめられるのでコードの可読性(読みやすさ)がアップしましたね!
( )は省略して書くこともできますが、記述することで今回のようにコードを見やすくさせることができます。

それでは残りの2つの場合の条件も作っていきましょう。

rubyファイル | 勝ちの条件式
1
2
3
4
5
6
# 自分が「グー」で相手が「チョキ」
(num == 0) && (computer == 1)
# 自分が「チョキ」で相手が「パー」
(num == 1) && (computer == 2)
# 自分が「パー」で相手が「グー」
(num == 2) && (computer == 0)

このように条件式を作ることができました。

勝ちの条件式を作ろう

これで自分が勝つ時の3つの条件をrubyで表現することができました。
自分が勝利するにはこの3つの条件のうち、一つでも当てはまれば良いですね。
つまりこの条件式の中で1つでもtrueになれば勝ちということになります。

この条件式を作成するには先ほど紹介した論理演算子の||を使えば表現できそうです。
では||を使って3つの条件式をつなげてみましょう。

rubyファイル | 勝ちの条件式
1
2
# 自分が「グー」で相手が「チョキ」
(num == 0) && (computer == 1) || (num == 1) && (computer == 2) || (num == 2) && (computer == 0)

このようにそれぞれの式を||で囲み、3つの式のうちどれか一つでも trueであればtrueすなわち勝ちであるという条件式を作ることができました。

ただこれだと1行があまりにも長くなりすぎてしまい、コードが見づらいですね。
そんなときは改行をすることでコードを見やすくさせることができます。

rubyファイル | 勝ちの条件式
1
2
3
4
# 自分が「グー」で相手が「チョキ」
(num == 0) && (computer == 1) || 
(num == 1) && (computer == 2) || 
(num == 2) && (computer == 0)

どうでしょう。
先ほどよりもコードが見やすくなりましたね。

負けの条件を考えよう

最後に残ったのは「負け」の時です。
同じように条件を3つ作ってあげれば良さそうですが、もっと簡単な方法があります。
それは「あいこ」と「勝ち」以外の時という条件です。
「あいこ」と「勝ち」ではない時は「負け」となるのでelseの時には「負け」と表示させてあげれば良いですね。

それではここまで作成した「あいこ」と「勝ち」の条件を使って条件分岐をし、結果を出力するコードを作成してみましょう。

条件式を増やそう

今まではif文を使い条件分岐をしてきましたが、今回は「あいこの時」と「勝ちの時」という複数の条件での分岐をしなければなりません。
このように条件を追加したい場合はelsifを使います。

elsifは else if (そうでなけば)という意味です

elsifは下記のように使います。

main.rb |elsif
1
2
3
4
5
6
7
8
num = gets.to_i
if 0 < num
  puts "数字は正の数です"
elsif 0 > num
  puts "数字は負の数です"
else
  puts "数字は0です"
end

上のコードは入力した値が正の数か負の数かを判断するコードです。
elsifを使うことで2つの条件での分岐をすることができます。
また、elsifは何個でも追加できるので、さらに多くの条件を指定することもできます。

それではelsifを使って「あいこ」と「勝ち」の時の条件を作ってみましょう。

main.rb |elsif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
puts "最初はグー!じゃんけんポン!"
puts "何を出しますか?"
puts "[0]グー [1]チョキ [2]パー"

num = gets.to_i
computer = rand(3)

if num == computer
puts "あいこ"
elsif num == 0 && computer == 1 ||
num == 1 && computer == 2 ||
num == 2 && computer == 0
puts "勝ち"
else
puts "負け"
end

これで3つの条件を定義することができました。
実際にコードを実行して動きを確認してみましょう。

アプリの動作確認

問題を解いてみよう

ここまで学んだ知識を使って、ジャンケンの追加問題を解きましょう。
追加問題の内容は、以下です。

  • あいこの場合、あなたの手とCOMの手を表示させましょう。
  • 勝ちの場合、あなたの手とCOMの手を表示させましょう。
  • 負けの場合、あなたの手とCOMの手を表示させましょう。

以下の動画の動作ができるように、プログラミングのコードを書き換えてください。

ジャンケンの問題動画

ヒントは、 ifのネストを使うことです。

解答をみる
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
goo = 'グー'
choki = 'チョキ'
par = 'パー'
line = '-----------------'

puts "最初はグー!じゃんけんポン!"
puts "何を出しますか?"
puts "[0]#{goo} [1]#{choki} [2]#{par}"

num = gets.to_i
computer = rand(3)

if num == computer
  if num == 0
    puts "あなたの手は#{goo}です。"
    puts "COMの手は#{goo}です。"
  elsif num == 1
    puts "あなたの手は#{choki}です。"
    puts "COMの手は#{choki}です。"
  elsif num == 2
    puts "あなたの手は#{par}です。"
    puts "COMの手は#{par}です。"
  end
  puts line
  puts "あいこ"
  puts line
elsif num == 0 && computer == 1 ||
  num == 1 && computer == 2 ||
  num == 2 && computer == 0
  if num == 0
    puts "あなたの手は#{goo}です。"
    puts "COMの手は#{choki}です。"
  elsif num == 1
    puts "あなたの手は#{choki}です。"
    puts "COMの手は#{par}です。"
  elsif num == 2
    puts "あなたの手は#{par}です。"
    puts "COMの手は#{goo}です。"
  end
  puts line
  puts "勝ち"
  puts line
else
  if num == 0
    puts "あなたの手は#{goo}です。"
    puts "COMの手は#{par}です。"
  elsif num == 1
    puts "あなたの手は#{choki}です。"
    puts "COMの手は#{goo}です。"
  elsif num == 2
    puts "あなたの手は#{par}です。"
    puts "COMの手は#{choki}です。"
  end
  puts line
  puts "負け"
  puts line
end

さらに使いやすいアプリケーションにしよう

これでじゃんけんアプリケーションは完成です。
ですが、0から2以外の数値を入力されてしまうとこのコードでは全て「負け」となってしまいます。

ですので0未満3以上の数値が入力された際には「0から2の数値を入力してください」などの文を出力させたいですね。

また、あいこの場合は終了せず続けられるようにしたり、上の問題で解いた内容も同じコードが沢山続くので、もっと綺麗にしたいですね。

あいこを終了させず、続けるようにしたい場合は繰り返しの処理が必要になります。繰り返し処理にはwhileというものを使ったり、同じコードを繰り返し書かないようにするには、自作メソッドが必要になります。

ぜひ上記のことも勉強して、ジャンケンアプリケーションを進化させていってください!

ワークショップを終えて

以上でワークショップは終了となります。
いかがでしたでしょうか?

今回はオブジェクト、メソッド、引数や条件分岐などといったことを学習しました。
どれもプログラミング独特の概念なので最初は難しかったかもしれません。
ですが本日学んだ知識だけでも今回のような簡単なプログラムを作成することができます。

プログラミングにはまだまだたくさんの独特な概念があります。
今回作成したアプリケーションではあいこの時にはじゃんけん終了となりましたが、他の知識を使えば勝敗が決まるまでじゃんけんを行うことができるよう改良することもできます。

自分の創意工夫次第で自分の考えを形として表現することができるのがプログラミングです。

もしプログラミングに興味を持たれた方はぜひチャレンジしてみてください!

さいごに

感想を教えてください!

下記のリンクからアンケートフォームにご記入お願いします。

Pikawakaワークショップ・全体アンケート