Open4
Cliffyのお勉強
ドキュメントを読んで最低限の使い方を理解する
ドキュメントのサンプルコード
import {
Command,
EnumType,
} from "https://deno.land/x/cliffy@v1.0.0-rc.3/command/mod.ts";
const logLevelType = new EnumType(["debug", "info", "warn", "error"]);
await new Command()
.name("cliffy")
.version("0.1.0")
.description("Command line framework for Deno")
.type("log-level", logLevelType)
.env("DEBUG=<enable:boolean>", "Enable debug output.")
.option("-d, --debug", "Enable debug output.")
.option("-l, --log-level <level:log-level>", "Set log level.", {
default: "info" as const,
})
.arguments("<input:string> [output:string]")
.action((options, ...args) => {})
.parse(Deno.args);
こいつを実行してdeno run main.ts -h
すると
Usage: cliffy <input> [output]
Version: 0.1.0
Description:
Command line framework for Deno
Options:
-h, --help - Show this help.
-V, --version - Show the version number for this program.
-d, --debug - Enable debug output.
-l, --log-level <level> - Set log level. (Default: "info", Values: "debug", "info", "warn", "error")
Environment variables:
DEBUG <enable> - Enable debug output.
引数
.arguments("<input:string> [output:string]")
で表現
引数がinput
とoutput
の2つ
-
input
は必須でstringとして受け取る -
output
は任意でstringとして受け取る
必須の引数は<引数名:受け取る型>
任意の引数は[引数名:受け取る型]
オプション
該当箇所
.option("-d, --debug", "Enable debug output.")
.option("-l, --log-level <level:log-level>", "Set log level.", {
default: "info" as const,
})
値を取るオプションは"-l, --log-level <level:log-level>"
のように<level:log-level>
がある形になりそう
あとは雰囲気でつかめる
次のようなCLIを作りたい
サブコマンド:gen
- オプションがないかつ引数がないとき処理を実施 -> 処理Aとする
-
--fruit
か--vegetable
オプションのいずれかがあり、かつ引数を一つとるとき処理を実施 -> 処理Bとする - それ以外のオプションや引数の組み合わせのときはエラー
こんな感じ?
オプションの細かい設定はこれ
エラーハンドリング(バリデーション)はこれ
import {
Command,
ValidationError,
} from "https://deno.land/x/cliffy@v1.0.0-rc.3/command/mod.ts";
await new Command()
.name("cliffy")
.version("0.1.0")
.description("Command line framework for Deno")
.command("gen", "なんか生成する")
.option("--fruit", "フルーツ")
.option("--vegetable", "野菜", { conflicts: ["fruit"] })
.arguments("[output:string]")
.action((options, ...args) => {
if (
options.fruit == undefined && options.vegetable == undefined &&
args[0] == undefined
) {
console.log("処理A");
}
if (options.fruit === true && args[0] != undefined) {
console.log("処理B");
} else if (options.vegetable === true && args[0] != undefined) {
console.log("処理C");
}
throw new ValidationError("validation error message");
})
.parse(Deno.args);
$ deno run main.ts -h
Usage: cliffy
Version: 0.1.0
Description:
Command line framework for Deno
Options:
-h, --help - Show this help.
-V, --version - Show the version number for this program.
Commands:
gen [output] - なんか生成する
$ deno run main.ts gen -h
Usage: cliffy gen [output]
Version: 0.1.0
Description:
なんか生成する
Options:
-h, --help - Show this help.
--fruit - フルーツ
--vegetable - 野菜 (Conflicts: --fruit)