8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

スタイリッシュなプロンプトUIをスクリプト実行時に実現する方法

Posted at

この記事はソニックガーデン プログラマ アドベントカレンダーの22日目の記事です。

はじめに

Rubyでスクリプト実行時に、途中でユーザの入力を求めたいシーンは多々ありますよね。
そんなときに gets.chomp などで文字列入力を求める方法がパッと思いつきます。

例えばこんな感じ。

puts "名前を入力してください"
name = gets.chomp

ですが、毎回文字列入力を求めるのはちょっとダサいですよね。

そんなときに便利なのが、今回お伝えする tty-promptというGemです。

tty-prompt の使い方

Gem をインストール

gem install tty-prompt

あとは下記のようなコードを書いて実行するだけです。

require 'tty-prompt'

prompt = TTY::Prompt.new(prefix: '[?] ', active_color: :cyan)
# テキスト入力してもらう
reason = prompt.ask("なぜこのスクリプトを実行するのですか?")

# YES/NOで選んでもらう
if prompt.no?('ステージング環境で動作確認しましたか?')
   prompt.error '必ずステージング環境でリハーサルしてください!'
  exit
end

# 複数選択肢から選ぶ
partners = prompt.multi_select('ペアオペレーションの相手は?', %w[太郎 次郎 三郎])

# 選択肢から選ぶ
container_size = prompt.select('実行するコンテナのサイズは?', %w[small medium large xlarge])


# スライダーで選択
minutes = prompt.slider('処理時間(分)の想定は?',
                        max: 60,
                        default: 5,
                        step: 5,
                        help: "左右の矢印キーで値を変更できます",
                        show_help: :always)

# 入力した情報の確認
prompt.ok "[Summary] #{minutes}分かかる想定の処理を#{container_size}のコンテナで#{partners.join(',')}と実施します"

上記のコードを実行するとこのようにスタイリッシュな入力プロンプトが出来上がります。

stylish-prompt.gif

警告は赤色、インフォメーションは緑色で目立たせたりすることも簡単にできますね。

公式ドキュメント

サンプルで紹介していないですが、他にも複数行入力やマスク入力などさまざまなものに対応しています。
このREADMEを眺めてみるだけで、すぐに理解できるくらいサンプルも充実しています。

まとめ

今回ご紹介したサンプルでは、選択肢は固定していましたが、実際に利用するときには選択肢候補を外部APIをコールして取得し、それをHashやArrayに変換した上で、選択肢として提示すると便利に使えるようになるかと思います。

ぜひお試しあれ!

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?