[ruby]thorコマンド内でgetsを実行すると`gets’: No such file or directory @ rb_sysopen エラーが発生


[まとめ] 現在開催中のKindleセール情報はこちら

thorを使ってCLIコマンドを作っていた際に、getsを使ってユーザ入力を受け取ろとしたところ

`gets': No such file or directory @ rb_sysopen

というエラーが発生してしまいました。

thor内でgetsを実行する場合は

STDIN.gets.chomp

にするとよいそうです。

サンプル

# sample

require 'rubygems'
require 'thor'

class Sample < Thor
  desc "hello", "this is gets sample"
  def hello
    while true
      print "is it ok? [y|n]:"
      response = STDIN.gets.chomp
      #response = gets # <= gets だとエラー発生
      case response
      when /^[yY]/
        p 'YES!YES!YES!'
        return
      when /^[nN]/, /^$/
        p 'NO!NO!NO!'
        return
      end
    end
  end
end

Sample.start(ARGV)

サンプル実行

bundle exec ruby sample hello
is it ok? [y|n]:y
"YES!YES!YES!"

これで直りました。

参考

[まとめ] 現在開催中のKindleセール情報はこちら