Rubyのgetsメソッドでキーボード入力を受け付ける方法を解説
  • facebookページ
  • twitterページ
  • 2021.02.25

    Rubyのgetsメソッドでキーボード入力を受け付ける方法を解説

    コンソール上で動くアプリケーションを開発するとき、途中でユーザーのキーボード入力を求めたい時があります。

    そんな時は、Rubyの getsメソッドを使用すると、ユーザーがキーボードで入力した内容を文字列として受け取れ、その入力値に応じた処理を行うことが可能になります。

    この記事では、Rubyの getsメソッド の使い方や注意点などを解説していきます。

    「gets」メソッド でキーワード入力

    さっそく、Rubyの getsメソッド を使用して、ユーザーからのキーボード入力を受け付けてみましょう。

    仮に「sample.rb」という名前のファイルを作成し、次のRubyコードを記述し保存します。

    ファイルを保存したら、ターミナル(Windowsの場合コマンドプロンプト)を立ち上げ、次のコマンドで作成した「sample.rb」を実行します。

    実行すると、次のように「入力してください」というメッセージが表示された後、ユーザーのキーワード入力の待機状態になっています。

    では、「Hello Ruby」という文字をコンソール上に打ち込んで、Enterキーを押します。

    Enterでユーザーのキーボード入力が確定され、残りのコードが実行されます。
    今回のサンプルコードでは、 getsメソッドの後、ユーザーが入力した内容を putsメソッド で表示しているため、コンソール上にキーボードで入力した内容が表示されています。

    「gets」メソッド の注意点

    Rubyの getsメソッド を使用すると、処理の途中でユーザーのキーワード入力を受け付けることが分かりました。

    getsメソッド には、1つ注意点があり、 getsメソッド で受け取ったユーザー入力値の文字列の末尾には、改行コードが入ります。

    実際に、 getsメソッドで受け取った文字列の前後に、適当な文字列を連結し、結果がどのようになるか確認してみましょう。

    先ほど作成した「sample.rb」を次の通り編集します。

    ファイルを保存したら、ターミナル(Windowsの場合コマンドプロンプト)を立ち上げ、次のコマンドで作成した「sample.rb」を実行します。

    先ほどと同じように「Hello Ruby」と入力して Enterキーを押すと、次の結果のように、入力した文字列の後ろに改行が挿入されていることが分かります。

    このようにRubyの gettメソッド は、入力文字列の末尾に必ず改行コードを挿入するため、この改行を取り除いて処理を行わないと、想定外の動作になることがあるため注意が必要です。

    例えば、よくあるユーザーに処理の実行可否を尋ねる処理が合った場合に、末尾の改行を取り除かずにコードを実装すると、正しい動作が得られません。

    下の結果のように「y」を入力したにもかかわらず、末尾に改行コードが存在しているため、正しく文字列の一致判定が行われず、キャンセル判定になっています。

    末尾の改行コードを「chomp」メソッドで除去

    Rubyの chompメソッド は、文字列の末尾にある改行を取り除いてくれるメソッド です。

    この chompメソッド を使用することで、 getsメソッドで末尾に挿入された改行コードを取り除くことができ、入力値を正しく判定することが可能になります。

    ファイルを保存したら、ターミナル(Windowsの場合コマンドプロンプト)を立ち上げ、次のコマンドで作成した「sample.rb」を実行します。

    先ほどと同じく「Hello Ruby」と入力して Enterキーを押します。今度は chompメソッド を使ったことにより、末尾の改行コードが削除されていることが分かります。

    getsで入力された値を数値に変換

    Rubyの getsメソッドでユーザーがキーワード入力した値は、すべて文字列(String)として返されます。これは、ユーザーが数値を入力した場合でも同じです。

    実際に、 getsメソッド の戻り値の型を表示させて確かめてみましょう。

    コードを保存して実行し、 getsメソッドの入力で「1234」と数値のみを入力します。
    結果は次のように、 getsで入力した数値の型は Stringと表示され文字列として変数に格納されています。

    このように、 getsメソッド で取得した値はすべて文字列(String)となるため、入力された値を数値に変換するような場合は、 to_iメソッドを使用して文字列を数値に変換します。

    では、 to_iメソッド を使って getsメソッドで入力された値を数値に変換するサンプルコードを見ていきましょう。

    コードをまた保存して実行し、先ほどと同じように getsメソッドの入力で「1234」と数値のみを入力します。

    今度は、 to_iメソッドで入力された値を数値に変換しているため、 input_num.classで表示された方は Integerになっています。

    ポテパンダの一言メモ

    数値以外の文字列が格納されている変数で to_iメソッドを呼び出すと、呼ぶと0を返します。(エラーにはなりません)

    getsで入力した値が、アルファベットなどの数値以外の文字列の場合にエラーとした場合は、事前に正規表現などで入力された文字列を検証しておく必要があります。

    さいごに

    Rubyの getsメソッド でユーザーのキーワード入力値を取得する方法を解説してきました。

    getsメソッドは、コンソールアプリで、処理の途中にユーザーの入力を求める時に使用するメソッド です。

    Rubyは、一般的にRailsでWebアプリを作成することが多いですが、こういったコンソールアプリも作ることが可能です。

    【関連記事】
    変数が空かチェック!Rubyのempty?メソッドを詳しく解説



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE