概要
書籍 Build Awesome Command-Line Applications in Ruby2
章
Play Well with Others
詳細
CLIアプリケーションは、他のアプリケーション向けの「機械的に読み取りやすいデータ」と
「人間が読みやすいデータ」の両面をサポートすることが重要です。
この両面をサポートする最も簡単な方法は、コマンドラインオプションの
スイッチかフラグで両方の出力を切り替えることです。
サンプル仕様
下記記事のサンプルの仕様をベースにします。年齢の表示部分のみを利用します。
Ruby | CLI | Be Easy to Use | Thorを利用した使いやすいCommand suitインターフェース
http://d.hatena.ne.jp/tbpg/20140526/1401109675
サンプルコード
require 'csv' require 'thor' require 'pp' class PersonViewer < Thor package_name "person_viewer" VERSION = "0.0.1" PERSONALS = './personals.csv' class_option :help, type: :boolean, aliases: '-h', desc: 'ヘルプを表示します' class_option :version, type: :boolean, desc: 'バージョンを表示します' desc "年齢を表示します", "年齢を表示します" option :pretty_print, {type: :boolean, aliases: '-p', desc: "人間向けの出力フォーマットにする"} def age if options[:pretty_print] read_csv.each { |row|puts "#{row[:firstname]} #{row[:lastname]}は#{row[:age]}歳です" } else read_csv.each { |row|puts row[:age] } end end desc 'バージョンを表示します', 'バージョンを表示します' def version puts VERSION end def self.banner(task, namespace = false, subcommand = true) super end private def read_csv CSV.table(PERSONALS) end end PersonViewer.start(ARGV)
データ取得元csv
firstname,lastname,age kazuo,tanaka,34 ken,sato,54 ichiro,suzuki,45
出力
# p オプションなしでプログラム向けのフォーマットに $ ruby personal.rb age 34 54 45 # p オプションで人間向けのフォーマットに $ ruby personal.rb age -p kazuo tanakaは34歳です ken satoは54歳です ichiro suzukiは45歳です