Rubyメモ: キーボードからの入力を取得する (STDIN.gets/readline)

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)