まくまくRubyノート
キーボードからの入力を取得する (STDIN.gets/readline)
2015-10-15

STDIN でキーボードからの入力を取得する

キーボードからのユーザ入力を一行分取得するには、STDIN.gets を使用します。 取得した入力の末尾には、改行文字が残ったままであることに注意してください。 改行文字は chomp を利用して削除することができます。

line = STDIN.gets
p line        #=> "ABC\n"
p line.chomp  #=> "ABC"

キーボードからの入力を繰り返し取得したい場合は、下記のような while ループで処理できます。 Ctrl-Z などで入力を終了させたときに、IO#getsnil を返すことを利用してループを終了しています。

while line = STDIN.gets
  puts line
end

readline モジュールでキーボードからの入力を取得する

readline モジュールを使用すると、プロンプトを表示しながらユーザ入力を取得する処理を簡単に記述することができます。

sample.rb

require 'readline'

while line = Readline.readline('> ')
  puts line
end

実行例

$ ruby sample.rb
> AAA
AAA
> BBB
BBB
>

また、readline モジュールによってキーボード入力を取得している最中は、Ctrl-A によるカーソルジャンプなど、Emacs 風のキーボードショートカットが使えるようになります。 さらに、下記のように第 2 引数を true にして呼び出すことで、Ctrl-PCtrl-N による入力の履歴を辿れるようになります。

line = Readline.readline('> ', true)
2015-10-15