コンソール上で動くアプリケーションを開発するとき、途中でユーザーのキーボード入力を求めたい時があります。
そんな時は、Rubyのgetsメソッドを使用すると、ユーザーがキーボードで入力した内容を文字列として受け取れ、その入力値に応じた処理を行うことが可能になります。
この記事では、Rubyのgetsメソッド の使い方や注意点などを解説していきます。
「gets」メソッド でキーワード入力
さっそく、Rubyのgetsメソッド を使用して、ユーザーからのキーボード入力を受け付けてみましょう。
仮に「sample.rb」という名前のファイルを作成し、次のRubyコードを記述し保存します。
puts "入力してください"
## ユーザーのキーワード入力を待機
input_val = gets
## 入力された文字を画面に表示
puts "入力文字:" + input_val
ファイルを保存したら、ターミナル(Windowsの場合コマンドプロンプト)を立ち上げ、次のコマンドで作成した「sample.rb」を実行します。
$ ruby sample.rb
実行すると、次のように「入力してください」というメッセージが表示された後、ユーザーのキーワード入力の待機状態になっています。
$ ruby sample.rb
入力してください
では、「Hello Ruby」という文字をコンソール上に打ち込んで、Enterキーを押します。
$ ruby sample.rb
入力してください
Hello Ruby <-これをコンソール上で入力
Enterでユーザーのキーボード入力が確定され、残りのコードが実行されます。
今回のサンプルコードでは、getsメソッドの後、ユーザーが入力した内容をputsメソッド で表示しているため、コンソール上にキーボードで入力した内容が表示されています。
$ ruby sample.rb
入力してください
Hello Ruby
入力文字:Hello Ruby
「gets」メソッド の注意点
Rubyのgetsメソッド を使用すると、処理の途中でユーザーのキーワード入力を受け付けることが分かりました。
getsメソッド には、1つ注意点があり、getsメソッド で受け取ったユーザー入力値の文字列の末尾には、改行コードが入ります。
実際に、getsメソッドで受け取った文字列の前後に、適当な文字列を連結し、結果がどのようになるか確認してみましょう。
先ほど作成した「sample.rb」を次の通り編集します。
puts "入力してください"
## ユーザーのキーワード入力を待機
input_val = gets
## 入力された文文字列を次の形式でコンソールに表示
puts "あなたが入力した文字は「" + input_val + "」です。"
ファイルを保存したら、ターミナル(Windowsの場合コマンドプロンプト)を立ち上げ、次のコマンドで作成した「sample.rb」を実行します。
$ ruby sample.rb
先ほどと同じように「Hello Ruby」と入力して Enterキーを押すと、次の結果のように、入力した文字列の後ろに改行が挿入されていることが分かります。
$ ruby sample.rb
入力してください
Hello Ruby
あなたが入力した文字は「Hello Ruby
」です
このようにRubyのgettメソッド は、入力文字列の末尾に必ず改行コードを挿入するため、この改行を取り除いて処理を行わないと、想定外の動作になることがあるため注意が必要です。
例えば、よくあるユーザーに処理の実行可否を尋ねる処理が合った場合に、末尾の改行を取り除かずにコードを実装すると、正しい動作が得られません。
puts "実行しますか?(y:実行)"
## ユーザーのキーワード入力を待機
input_val = gets
if input_val == "y"
puts "実行"
else
puts "キャンセルされました"
end
下の結果のように「y」を入力したにもかかわらず、末尾に改行コードが存在しているため、正しく文字列の一致判定が行われず、キャンセル判定になっています。
$ ruby sample.rb
実行しますか?(y:実行)
y
キャンセルされました
末尾の改行コードを「chomp」メソッドで除去
Rubyのchompメソッド は、文字列の末尾にある改行を取り除いてくれるメソッド です。
このchompメソッド を使用することで、getsメソッドで末尾に挿入された改行コードを取り除くことができ、入力値を正しく判定することが可能になります。
puts "入力してください"
# ユーザーがキーワードで入力した文字列に対し、chompメソッドを呼び出し末尾の改行を削除
input_val = gets.chomp
# 入力された内容をコンソールに表示
puts "あなたが入力した文字は「" + input_val + "」です。"
ファイルを保存したら、ターミナル(Windowsの場合コマンドプロンプト)を立ち上げ、次のコマンドで作成した「sample.rb」を実行します。
$ ruby sample.rb
先ほどと同じく「Hello Ruby」と入力して Enterキーを押します。今度はchompメソッド を使ったことにより、末尾の改行コードが削除されていることが分かります。
$ ruby sample.rb
入力してください
Hello Ruby
あなたが入力した文字は「Hello Ruby」です
getsで入力された値を数値に変換
Rubyのgetsメソッドでユーザーがキーワード入力した値は、すべて文字列(String)として返されます。これは、ユーザーが数値を入力した場合でも同じです。
実際に、getsメソッド の戻り値の型を表示させて確かめてみましょう。
puts "入力してください"
# ユーザーの入力値を取得
input_val = gets
# input_valの型を表示
puts input_val.class
コードを保存して実行し、getsメソッドの入力で「1234」と数値のみを入力します。
結果は次のように、getsで入力した数値の型はStringと表示され文字列として変数に格納されています。
$ ruby sample.rb
入力してください
1234
String
このように、getsメソッド で取得した値はすべて文字列(String)となるため、入力された値を数値に変換するような場合は、to_iメソッドを使用して文字列を数値に変換します。
では、to_iメソッド を使ってgetsメソッドで入力された値を数値に変換するサンプルコードを見ていきましょう。
puts "入力してください"
# ユーザーの入力値を取得して数値に変換
input_num = gets.to_i
# input_valの値と型を表示
puts "値:%d、型:%s" % [input_num, input_num.class]
コードをまた保存して実行し、先ほどと同じようにgetsメソッドの入力で「1234」と数値のみを入力します。
入力してください
1234
値:1234、型:Integer
今度は、to_iメソッドで入力された値を数値に変換しているため、input_num.classで表示された方はIntegerになっています。
さいごに
Rubyのgetsメソッド でユーザーのキーワード入力値を取得する方法を解説してきました。
getsメソッドは、コンソールアプリで、処理の途中にユーザーの入力を求める時に使用するメソッド です。
Rubyは、一般的にRailsでWebアプリを作成することが多いですが、こういったコンソールアプリも作ることが可能です。
【関連記事】
▶変数が空かチェック!Rubyのempty?メソッドを詳しく解説
数値以外の文字列が格納されている変数でto_iメソッドを呼び出すと、呼ぶと0を返します。(エラーにはなりません)
getsで入力した値が、アルファベットなどの数値以外の文字列の場合にエラーとした場合は、事前に正規表現などで入力された文字列を検証しておく必要があります。