Tbpgr Blog

Ruby プログラマ tbpgr(てぃーびー) のブログ

CLI

CLIツールの色指定。役割・用途・具体例のまとめ

CLI

CLIツールの色指定について、その役割・典型的な用途・具体的なプロダクトでの利用例をまとめました。

3つのgemの事例から学ぶRubyにおけるコマンドラインツール設計技法

3つのgemからRubyのCLIツールの設計について学びます。 今回コールドリーディングをするのは bundler itamae serverkit です。

Ruby | CLI | Add Color Formatting and Interactivity | Formatting Output with Tables

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Add Color Formatting and Interactivity いつ表形式の出力を使うか レコードと列からなる大量のデータを扱う場合。 DBの表データが典型的な例。 他のアプリケーションが利用しやすいフォー…

Ruby | CLI | Add Color Formatting and Interactivity | Adding Color Using ANSI Escape Sequences

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Add Color Formatting and Interactivity いつ色付きの出力を使うか 状態を表す Cucumberは色を効果的に使ったCLI Toolの良い例です。 テストが失敗していれば、赤。 成功していれば緑で表示…

Ruby | CLI | Add Color Formatting and Interactivity

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Add Color Formatting and Interactivity 詳細 例えばCucumberはカラフルな出力でユーザーにテスト結果をわかりやすく伝えます。 例えばSQLクライアントはユーザーに優しい表形式の出力を行…

Ruby | CLI | Be Easy to Maintain

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Be Easy to Maintain 詳細 どのようにアプリケーションの複雑性の増加を防ぐか? アプリケーションをわかりやすく保つことは,アプリケーションの開発に協力してくれるくれる人を増やすのに役…

Ruby | CLI | Make Configration Easy | Using Configuration File with Command Suites

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Make Configration Easy 詳細 Command Suitesのように複数のコマンドを持つ場合、コマンドごとの引数やオプションの設定が必要です。 サンプル仕様 下記記事のサンプルをベースに設定を追加…

Ruby | CLI | Make Configration Easy | Reading External Configuration from Files

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Make Configration Easy 詳細 外部設定ファイルを利用すると、ユーザーはコマンドラインの引数やオプションを与えることなく アプリケーションの振る舞いを制御できる。例えばあるオプション…

Ruby | CLI | Make Configration Easy | Why External Configuration?

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Make Configration Easy 詳細 なぜ外部設定が必要になるのか?アプリケーションの基本的な振る舞いや、新規ユーザーが使いやすく・覚えやすいように作られるが、 パワーユーザーの複雑な作業…

Ruby | CLI | Delight Casual Users | Choosing the Best Default Output Format Based on Context

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Delight Casual Users 詳細 ls はコンテキストに合わせてベストなデフォルト値を適用しています。 ls をオプションなしで、単独実行した場合は 下記のように、人間向けのフォーマットになり…

Ruby | CLI | Delight Casual Users | Preventing Destructive Actions by Default

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Delight Casual Users 詳細 UNIXの rm は破壊的なコマンドの良い例です。 rm は指定ファイルを削除します。デフォルトの rm はHelpfulなだけではなく、破壊的ではありません。 rm のみだと削…

Ruby | CLI | Delight Casual Users | Deciding Default Behavior

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Delight Casual Users 詳細 アプリケーションのデフォルトの振る舞いは、オプションを省略した際の動作です。 適切なデフォルトの振る舞いを選ぶことは、アプリケーションが何をするか、に依…

Ruby | CLI | Delight Casual Users | Default Values for the App's Arguments

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Delight Casual Users 詳細 多くのコマンドラインは引数としてファイルリストや標準入力を使用します。 その際に、入力があれば引数から値を取得。 入力がなければ標準入力から値を取得する…

Ruby | CLI | Delight Casual Users | Flag Arguments That Control Output Formatting

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Delight Casual Users 詳細 フラグの典型的な利用方法として出力フォーマットの変更がある。 典型的なのはアプリケーション向けの標準フォーマットと人間向けのPrettyフォーマット。どちらを…

Ruby | CLI | Delight Casual Users | Default Values for Flags

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Delight Casual Users 詳細 ユーザーがコマンドを実行する際に毎回フラグを指定しなければならないのなら、 ユーザーフレンドリーではありません。デフォルト値の設定は設計の決定事項です。…

Ruby | CLI | Delight Casual Users | Naming Commands in a Command Suit

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Delight Casual Users 詳細 Command suit において全てのコマンドは簡潔で明確な名前を持つこと。 もし、意味をなすことができるならコマンドは短いニーモニックを持つのも良い。 良い例は l…

Ruby | CLI | Delight Casual Users | Choosing Names for Options and Commands

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Delight Casual Users 詳細 Short-form optionは何のためにあるか? => アプリケーションを使い慣れたユーザーが少ないタイプで素早く実行するため。Long-form optionは何のためにあるか? =…

Ruby | CLI | Play Well with Others | Trapping Signals Sent from Other Apps

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Play Well with Others 詳細 長い処理を行うアプリケーションを作った場合などに、途中で処理を中止することがあります。 そのような際に行う処理を記述しておき、中途半端な処理にならない…

Ruby | CLI | Play Well with Others | Provide a Pretty-Printing Option

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Play Well with Others 詳細 CLIアプリケーションは、他のアプリケーション向けの「機械的に読み取りやすいデータ」と 「人間が読みやすいデータ」の両面をサポートすることが重要です。この…

Ruby | CLI | Play Well with Others | Add Additional Fields to Make Searching Easier

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Play Well with Others 詳細 ユーザーが対象データを抽出しやすいように、フラグやステータスを表す内容を レコードに含めることも有効。 サンプル仕様 引数1 〜 引数2 の範囲数値を配列化し…

Ruby | CLI | Play Well with Others | Format Output One Record per Line, Delimiting Fields

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Play Well with Others 詳細 1レコード、デリミタ区切りのフィールドの構成にすることによって 後続のアプリケーションが加工しやすいフォーマットになります。 サンプル 引数1〜引数2の数値…

Ruby | CLI | Play Well with Others | Formatting Output for Use As Input Another Program

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Play Well with Others 詳細 あるアプリケーションの出力が他のアプリケーションの入力になる例として、 ls と sort の組み合わせを見る。ls には数値順にソートする機能はない。 しかし、ls…

Ruby | CLI | Play Well with Others | Use STDOUT and STDERR to Send Output to the Correct Stream

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Play Well with Others 詳細 標準出力はSTDOUTに、標準エラーはSTDERRに出力します。 標準エラーの出力には STDERR.puts "エラーメッセージ" warn "エラーメッセージ" の両方が利用できます…

Ruby | CLI | Play Well with Others | Using Open3 to Access the Standard Output and Error Streams Separately

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Play Well with Others 詳細 Rubyではバッククォートもしくは、 %x[] によって標準出力を取得できるが 標準エラーは取得できない。標準エラーにもアクセスするには Open3ライブラリを利用す…

Ruby | CLI | Play Well with Others | Reporting Multiple Errors int the Exit

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Play Well with Others 詳細 exit code は一つの数値しか取れません。 ビットマスクとして扱うことで各ビットに意味を持たせることができます、 サンプルコード 引数に応じて exit code を設…

Ruby | CLI | Play Well with Others | Sending Exit Codes to Calling Process

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Play Well with Others 詳細 exit code の設定は非常にシンプルです。 Rubyは組み込みのメソッドとして exit メソッドを持っています。 引数を省略して exit すると、$? は 0 = 成功になりま…

Ruby | CLI | Play Well with Others | Accessing Exit Codes of Other Commands

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Play Well with Others 詳細 $? という名前はBashをやっている人には慣れ親しんだ変数名だが その他人にはわかりにくい。 より人間に読みやすくするため、標準ライブラリの English を利用し…

Ruby | CLI | Play Well with Others | Using Exit Codes to Report Success or Failure

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Play Well with Others 詳細 exit code はアプリケーション終了時の成否を伝える。 exit code が 0 なら成功。 それ以外なら失敗。シェルの $? にステータスが格納されています。 サンプル仕…

Ruby | CLI | Play Well with Others

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Play Well with Others 詳細 CLIアプリケーションを利用する直接のユーザーは利用者の一部。 利用者には他のCLIアプリケーションもいる。他のアプリケーションとコミュニケーションをとる手…

Ruby | CLI | Be Helpful | Documenting Everything Else

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Be Helpful 詳細 man page など、helpオプション以外のより詳細を記述するドキュメントについて。 このドキュメントはセクションによって分類されるべき。一般的なカテゴリは以下 カテゴリ …

Ruby | CLI | Be Helpful | Documenting Options

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Be Helpful 詳細 各フラグ、スイッチに1センテンスの短い要約を記述します。 端末で折り返さない程度の長さにします。(60文字以内)フラグが引数をとる場合は、短い単語で記述する。 (もし…

Ruby | CLI | Be Helpful | Documenting an App's Description and Invocation Syntax

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Be Helpful 詳細 ユーザーが最初に期待するのは1行の要約を記した banner を見ることです。 コマンドを持たないシンプルなアプリケーション 典型的なフォーマットは下記のようになります exe…

Ruby | CLI | Be Helpful | Writing Good Help Text and Documentation

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Be Helpful 詳細 ヘルプテキストや明確で、簡潔で、正確で、便利なドキュメントは重要。 ヘルプや、ドキュメントにはいくつかの決まりごとがある。1センテンスにまとめられた概要である bann…

Ruby | CLI | Be Helpful | Documenting a Command Suit

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Be Helpful 詳細 Command suit は各コマンドごとのドキュメントが必要になる。 これは2段階のヘルプシステムで提供する。まず、1段階目として command -h で、globalなオプション・コマンド…

Ruby | CLI | Be Helpful | Adding a Brief Description for a CLI Apps

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Be Helpful 詳細 CLIアプリケーションをどういった目的に利用するのか、ヘルプに含めること。例として ls コマンドの日本語ヘルプを見てみます。 $ ls --help 使用法: ls [オプション]... […

Ruby | CLI | Be Helpful | Documenting a Command-Line Arguments

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Be Helpful 詳細 引数の情報を OptionParser の bannar に追加してみます。 下記記事のサンプルをベースに設定を追加します。Ruby | CLI | Be Easy to Use | Ruby | CLI | Be Easy to Use | …

Ruby | CLI | Be Helpful | Documenting a Command-Line Interface

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Be Helpful 詳細 コマンドラインの経験のあるユーザーは、コマンドラインをどう使うか知るために 次のことを試します。彼らは引数なしでコマンドを実行するか、 help スイッチを呼び出す。(…

Ruby | CLI | Be Easy to Use | Thorを利用した使いやすいCommand suitインターフェース

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Be Easy to Use 詳細 「OptionParserを利用した使いやすいCLIインターフェース(http://d.hatena.ne.jp/tbpg/20140526/1401109608)」で紹介したOptionParserは シンプルなCLIツールを作るには…

Ruby | CLI | Be Easy to Use | OptionParserを利用した使いやすいCLIインターフェース

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Be Easy to Use 詳細 ほとんどのCLIアプリケーションは慣習に従って作られている。 慣習に従っておけばユーザーにとって覚えるのが簡単なツールになる。 そこで、慣習に従ったCLIを作る助力…

Ruby | CLI | Be Easy to Use | CommandLineを理解する | Commands

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Be Easy to Use | CommandLineを理解する 詳細 CommandLineの構成要素を理解する | Commands Commands シンプルなコマンドラインアプリケーションは Options と Arguments だけで済む。 しか…

Ruby | CLI | Be Easy to Use | CommandLineを理解する | Arguments

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 CommandLineを理解する 詳細 Be Easy to Use | CommandLineの構成要素を理解する | Arguments Arguments Arguments はコマンドラインで扱う対象を表す。 典型的な例としては、ファイル名やデ…

Ruby | CLI | Be Easy to Use | CommandLineを理解する | Options

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 CommandLineを理解する 詳細 Be Easy to Use | CommandLineの構成要素を理解する | Options Options Optionsはユーザーがアプリケーションの動作を変えるための方法です。・Short-Form Short…

Ruby | CLI | Be Easy to Use | CommandLineを理解する

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Be Easy to Use | CommandLineを理解する 詳細 CommandLineの構成要素を理解する 基本構成 例えば ls コマンドで rb のファイルを更新日付の降順で詳細表示したい場合 ls -ltr *.rb のように…

Ruby | CLI | Be Easy to Use

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Be Easy to Use 詳細 自分のアプリケーションをインストール後、Userが初めに経験するのはCLIだろう。 CLIが難しく、直観的ではなく、醜くければ多くの信頼を得られないだろう。 逆に、もし…

Ruby | CLI | Have a Clear Concise Purpose | 素晴らしいCLI Appを作るには

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Have a Clear Concise Purposee | 素晴らしいCLI Appを作るには 素晴らしいCLI Appの特徴 ・Easy to user ・Helpful ・Plays well with others ・Has sensible defaults but is configurable…

Ruby | CLI | Have a Clear Concise Purpose | サブセットを持つコマンド

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Have a Clear Concise Purposee | サブセットを持つコマンド サブセットを持つコマンド例:仕様 ※書籍に載っていたものとは全く別のものです。 同じような内容を自分独自の仕様で考えました…

Ruby | CLI | Have a Clear Concise Purpose | 単一目的のシンプルなケースへの変更例

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Have a Clear Concise Purposee | 単一目的のシンプルなケースへの変更例 ツールの単純化例:仕様 ※書籍に載っていたものとは全く別のものです。 同じような内容を自分独自の仕様で考えまし…

Ruby | CLI | Have a Clear Concise Purpose

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Have a Clear Concise Purpose 詳細 単一目的のコマンドラインアプリケーションが望ましい。 入力を受け取り、出力を提供する。驚くほどシンプルな手法。単一目的のツールは、覚えるのが簡単…

書籍 Build Awesome Command-Line Applications in Ruby2

概要 書籍 Build Awesome Command-Line Applications in Ruby2に関するまとめ 一覧 章 詳細 URL/内容 Introduction -- http://d.hatena.ne.jp/tbpg/20140521/1400681014 Have a Clear Concise Purpose 概要 http://d.hatena.ne.jp/tbpg/20140522/1400762298 …

Ruby | CLI | Introduction

概要 書籍 Build Awesome Command-Line Applications in Ruby2 章 Introduction 詳細 開発環境の変遷 〜 1990年代 JavaがメジャーになるとともにGUI、IDEなどが普及。 旧来のCLIのツールは時代遅れのものと認識されがちになってきた。Java + GUIの環境は非常…