1日目のゴールとテーマ
1日目のテーマは「Rubyで“しゃべるアプリ”を作る」です。
いきなり難しいことはやりません。まずは、
画面に文字を出す
キーボードから入力を受け取る
その入力を使って、ちょっと“会話っぽい”ことをする
ここまでできれば、もう立派に「Rubyでアプリを書いた」と言えます。
今日は「Rubyってこういう雰囲気の言語なんだ」という空気をつかむ日です。
Rubyの超ざっくりしたイメージ
「人間に優しい」書き方ができる言語
Rubyは、日本人(まつもとゆきひろさん)が作った言語です。
コンセプトのひとつが「プログラマーが気持ちよく書けること」。
だからRubyのコードは、他の言語と比べて、
記号が少なめ
英語の文章っぽい
「こう書けたらいいな」がわりとそのまま書ける
という特徴があります。
今日はその“書きやすさ”を、実際に手を動かしながら感じてもらいます。
まずは「こんにちはアプリ」を作る
putsで画面に文字を出す
Rubyで画面に文字を出すいちばん基本の命令は puts です。
puts "こんにちは、Ruby!"
Rubyこれだけで、実行すると画面に
こんにちは、Ruby!
と表示されます。
ここで大事なのは2つです。
puts は「文字を表示して、最後に改行する」命令
表示したい文字は " "(ダブルクォーテーション)で囲む
Rubyはセミコロンもいらないし、行末に特別な記号もいりません。
「1行に1つの命令を書く」くらいの感覚でOKです。
ユーザーから名前を聞いてみる
getsで入力を受け取る
今度は、ユーザーに名前を入力してもらいましょう。
puts "あなたの名前を教えてください:"
name = gets
puts "こんにちは、#{name}さん!"
Ruby一行ずつ説明します。
puts "あなたの名前を教えてください:"
画面に質問を表示します。
name = gets
キーボードから1行分の入力を受け取り、その内容を name という変数に入れます。
puts "こんにちは、#{name}さん!"#{ } の中に変数を書いて、文字列の中に埋め込んでいます。
ここでの重要ポイント
Rubyでは、変数 = 値 で「名前をつけて覚えておく」ことができます。gets は「1行読み取る」命令で、その結果は文字列(テキスト)です。
そして、"こんにちは、#{name}さん!" のように、
文字列の中に #{変数} と書くと、その場所に変数の中身が入る
この「文字列展開」はRubyの気持ちよさのひとつです。
でも実は、nameには「改行」が入っている
chompで改行を消す
さっきのコード、実はちょっとした“違和感”があります。
puts "あなたの名前を教えてください:"
name = gets
puts "こんにちは、#{name}さん!"
Rubyここで たろう と入力すると、実際には
こんにちは、たろう
さん!
のように、変なところで改行されることがあります。
理由は、gets が「入力した文字+Enter(改行)」まで含めて読み取るからです。
そこで使うのが chomp です。
puts "あなたの名前を教えてください:"
name = gets.chomp
puts "こんにちは、#{name}さん!"
Rubygets.chomp と書くと、
入力された文字列の「最後の改行」を取り除いてくれる
これで、きれいに
こんにちは、たろうさん!
と表示されます。
ここはRuby初心者が最初につまずきやすいポイントなので、
「入力したら .chomp をつける」とセットで覚えておくと楽です。
1日目のミニアプリ:「自己紹介ジェネレーター」
仕様を日本語で決める
いきなり難しいことはしませんが、
せっかくなので「ちょっとアプリっぽいもの」を作りましょう。
今日作るのは「自己紹介文を自動で作ってくれるコンソールアプリ」です。
やりたいことを日本語で書くと、こうなります。
名前を聞く
年齢を聞く
好きなこと(趣味)を聞く
最後に、自己紹介文を1つ表示する
これをRubyに翻訳していきます。
まずは名前と趣味だけでやってみる
いきなり全部やろうとすると混乱するので、
まずは名前と趣味だけで自己紹介を作ってみます。
puts "あなたの名前を教えてください:"
name = gets.chomp
puts "あなたの好きなこと(趣味)を教えてください:"
hobby = gets.chomp
puts "------------------------"
puts "自己紹介文:"
puts "はじめまして、#{name}です。"
puts "好きなことは#{hobby}です。"
puts "よろしくお願いします!"
Ruby流れを言葉で追うと、
名前を聞いて、name に入れる
趣味を聞いて、hobby に入れる
区切り線を表示する
自己紹介文を、puts と文字列展開で組み立てて表示する
という感じです。
ここまでできたら、もう立派に「Rubyでアプリを書いた」と言えます。
年齢を聞いて、ちょっとだけ“賢く”する
数字として扱いたいときの変換
今度は「年齢」も聞いてみましょう。
puts "あなたの年齢を教えてください:"
age_text = gets.chomp
age = age_text.to_i
Rubyここでのポイントは to_i です。
gets.chomp の結果は文字列(”25″ など)to_i は、それを整数(25)に変換するメソッド
Rubyでは、文字列に対して to_i を呼ぶと、
「先頭から数字として読めるところまで」を整数にしてくれます。
例えば、
“25” → 25
“30歳” → 30
“abc” → 0
のような変換になります。
年齢によってメッセージを変える
せっかく数字になったので、
年齢によってメッセージを少し変えてみましょう。
if age <= 0
age_comment = "年齢はひみつなんですね。"
elsif age < 20
age_comment = "とても若いですね!"
elsif age < 40
age_comment = "働き盛りの世代ですね。"
else
age_comment = "人生経験が豊富そうですね。"
end
Rubyここで新しく出てきたのが if / elsif / else / end です。
Rubyの条件分岐は、
if 条件1
処理1
elsif 条件2
処理2
else
それ以外のときの処理
end
Rubyという形で書きます。
end で「ここまでが if のかたまりです」と区切るのがポイントです。
自己紹介文に年齢コメントを足す
さっきの自己紹介に、年齢コメントを足してみます。
puts "------------------------"
puts "自己紹介文:"
puts "はじめまして、#{name}です。"
puts "年齢は#{age}歳です。#{age_comment}"
puts "好きなことは#{hobby}です。"
puts "よろしくお願いします!"
Rubyこれで、入力によって自己紹介文が少し変わるようになります。
1日目の完成コード(全体像)
ここまでを1本にまとめるとこうなる
puts "あなたの名前を教えてください:"
name = gets.chomp
puts "あなたの年齢を教えてください:"
age_text = gets.chomp
age = age_text.to_i
puts "あなたの好きなこと(趣味)を教えてください:"
hobby = gets.chomp
if age <= 0
age_comment = "年齢はひみつなんですね。"
elsif age < 20
age_comment = "とても若いですね!"
elsif age < 40
age_comment = "働き盛りの世代ですね。"
else
age_comment = "人生経験が豊富そうですね。"
end
puts "------------------------"
puts "自己紹介文:"
puts "はじめまして、#{name}です。"
puts "年齢は#{age}歳です。#{age_comment}"
puts "好きなことは#{hobby}です。"
puts "よろしくお願いします!"
Rubyこの1本の中に、今日の大事な要素が全部入っています。
画面に表示する(puts)
入力を受け取る(gets.chomp)
変数で値を覚えておく(name, age, hobby)
文字列の中に変数を埋め込む(#{ })
条件によってメッセージを変える(if / elsif / else)
ここまで動かせたら、1日目としては十分すぎるくらいです。
1日目のまとめ
今日のキーワードを整理します。
puts
画面に文字を表示する。最後に改行がつく。
gets / gets.chomp
キーボードから1行読み取る。
chomp をつけると、最後の改行を取り除いてくれる。
変数name = ... のようにして、値に名前をつけて覚えておく。
文字列展開(#{ })"こんにちは、#{name}さん" のように、文字列の中に変数を埋め込める。
if / elsif / else / end
条件によって処理を分ける。
Rubyでは end でブロックを閉じる。
to_i
文字列を整数に変換する。年齢などを数字として扱いたいときに使う。
次回(2日目)への予告
2日目は、今日の自己紹介アプリを少し発展させて、
同じ処理を「メソッド」としてまとめる
複数人分の自己紹介をまとめて作る
ちょっとした「名簿アプリ」っぽいものに近づける
という方向に進みます。

