Ruby で gets を使用してユーザー入力を受け入れる
Ruby でコマンドライン(CLI)アプリケーションを構築する場合、一般的な機能の 1つは、ユーザーの名前やはい/いいえ
の応答など、ユーザーからの入力を受け取ることです。ここで、gets
キーワードが役立ちます。
このチュートリアルでは、ユーザーが自分の名前を入力し、入力した名前を使用して挨拶できる非常に単純な CLI プログラムを作成する方法を示します。
コード例:
puts "Hi, welcome to my app."
puts "Enter your name to get started: "
name = gets
puts "Hello #{name}, nice to have you here"
出力:
Hi, welcome to my app.
Enter your name to get started:
上記は、コードを実行した後に得られる出力です。この時点で、プログラムは私に私の名前を入力するように求めています。これは gets
が行うことです。プロンプトを作成し、ユーザー入力を待ちます。
以下は、私の名前を John
と入力し、Enterキーを押した後に得られる完全な出力です。
Hi, welcome to my app.
Enter your name to get started:
John
Hello John
, nice to have you here
上記の出力で何か奇妙なことに気づいたに違いありません。なぜ Hello John, nice to have you here
という挨拶が John
の後に壊れたのですか?実際に何が起こっているのかを理解するには、変数 name
を調べてください。
コード例:
puts "Hi, welcome to my app."
puts "Enter your name to get started: "
name = gets
puts name.inspect
puts "Hello #{name}, nice to have you here"
出力:
Hi, welcome to my app.
Enter your name to get started:
John
"John\n"
Hello John
, nice to have you here
上記は、私の名前として John
を入力した後に得られる完全な出力です。name
変数が John\n
として表示されていることがわかります。
これが gets
の動作です。ユーザー入力として受け取った値に自動的に\n
を追加します。これは改行文字と呼ばれ、テキストに表示される場合は常に、その時点でテキストが途切れ、新しい行に続く必要があることを意味します。
これを修正する良い方法は、chomp
メソッドを使用することです。このメソッドは、改行文字(\n
)だけでなく、キャリッジリターン文字(\r
)も含めて、末尾の特殊文字をすべて削除します。chomp
の仕組みについて詳しくは、こちらをご覧ください。
コード例:
puts "Hi, welcome to my app."
puts "Enter your name to get started: "
name = gets.chomp
puts "Hello #{name}, nice to have you here"
出力:
Hi, welcome to my app.
Enter your name to get started:
John
Hello John, nice to have you here