トップ 最新

ただのにっき

2013-11-28(木) [長年日記]

対話型のコンソールアプリをpryの上に構築したらだいぶ楽できた

ゆえあってちょっとした対話型のアプリ、それもWebじゃなくてLinuxコンソールで動くものを作る必要が出てきた。入力をパースしたりするのも面倒だしなーと思い、ためしにpry上のDSLみたいな感じで作ってみたらなかなかいいものが簡単にできた。うん、これは楽でいいなぁ。今後も使おう。

こんな感じのsample.rbを書いて(2013-12-03追記: pryの仕様に合わせて一部リライト):

require 'pry'

# business logic
module Sample
   def self.hello(name)
      "Hello #{name}!"
   end
end

# helloというコマンドを定義する
Pry.commands.block_command 'hello' do |*args|
   args.map{|name| output.puts Sample.hello(name)}
end

# pry標準のhelpはあえて潰してよけいなものを見せない
Pry.commands.block_command 'help' do
   output.puts "hello [name...] : say hello"
end

# プロンプトをいじると専用アプリっぽさが増す
Pry.prompt = [
   proc{"sample> "},
   proc{"sample* "},
]

puts "type 'help' to help. type 'exit' to terminate.\n\n"
pry

実行する:

$ ruby sample.rb
type 'help' for help. type 'exit' for terminate.

sample> help
hello [name...] : say hello
sample> hello hoge
Hello hoge!
sample> hello foo "bar baz"
Hello foo!
Hello bar baz!
sample> exit
$

もちろんgemにして依存関係も解決するようにしておけば、導入も簡単になってさらに良い。

Tags: ruby pry