仕様に基づいてコマンドライン引数を解析
コマンドライン引数の生配列を、アプリケーション全体に解析規則を分散させることなく、予測可能なオブジェクトへ変換できます。引数要素と、各ブールフラグまたは値を取るオプションを定義した簡潔な仕様を指定してください。エイリアスを正規名に対応付け、位置引数を保持し、未知のフラグを識別します。等号付きの長いオプションにも対応し、慣例的な二重ハイフン以降はオプション解析を停止します。不正な仕様、重複した引数、必須値のないオプションには、明確な入力エラーを返します。
無料で実行
処理はブラウザ内で完結します。ファイルは送信されません。無料でご利用いただけます。
コマンドラインインターフェースをデータとして定義します
実行ファイル名とスクリプト名を除いた後、実行環境から渡される順序のまま引数要素を用意します。次に、受け付ける各引数を仕様へ定義します。各項目には正規名、1 個以上のエイリアス、種類が必要です。<code>--verbose</code> のように、存在することが真を意味するスイッチには flag を使用します。<code>--output result.json</code> のように、後続の値が必須となるものには option を使用します。エイリアスにより、<code>-o</code> と <code>--output</code> のような短い表記と長い表記を、同じ <code>output</code> プロパティへ格納できます。正規名には小文字、数字、アンダースコアを使用するため、返されたオブジェクトを改名処理なしで利用できます。エイリアスは 1 個または 2 個のハイフンで始めてください。正規名やエイリアスの重複は、宣言順によって結果が変わる原因となるため拒否されます。繰り返しがインターフェースの仕様である場合に限り <code>multiple</code> を設定すると、値は出現順の配列で返されます。
要素の解析方法と出力を確認します
出力は、認識された値、位置要素、未知のフラグの 3 種類に分かれます。認識されたフラグは正規名の下で true になり、オプションは次の要素を値として保持します。長いオプションでは <code>--format=json</code> のように、同じ要素内へ値を記述することもできます。照合は完全一致です。<code>-abc</code> のような短いフラグの結合は、その表記全体がエイリアスとして登録されていない限り展開されません。ハイフンで始まる未知の要素は <code>unknown_flags</code> に追加されるため、呼び出し側で拒否、警告、意図的な転送を選択できます。それ以外の未知の要素は位置引数になります。単独の <code>--</code> が現れるとオプション処理を終了し、それ以降はハイフンで始まる要素もすべて位置引数になります。この慣例により、<code>-draft.txt</code> のようなファイル名も明確に扱えます。既定値の生成や文字列から数値への変換は行いません。これらは誤りを隠す可能性があるため、アプリケーション側で決定してください。出力は決定的で、項目の順序を維持します。
値の欠落と引数の繰り返しを安全に処理します
option の項目では、エイリアスが現れるたびに空でない値が必要です。エイリアスが最後の要素である場合、オプション終了記号の直前にある場合、または次の要素が別のフラグの形式である場合は、問題のエイリアスを示す入力エラーになります。<code>--output=</code> のように結合された値が空の場合も同様です。この厳格な動作により、後続のスイッチを誤ってデータとして消費する、影響の大きい解析ミスを防ぎます。単独のハイフンは値として利用できるため、標準入力や標準出力を <code>-</code> で表すプログラムにも対応できます。認識済みの引数を繰り返すと、既定ではエラーになります。複数のインクルードパスやラベルなど、繰り返しが有効な場合は <code>multiple: true</code> を宣言してください。その正規名の値は常に配列になります。未知のフラグはエラーにせず報告だけを行うため、互換性や転送に関する方針は呼び出し側で管理できます。
活用例
CLI ラッパーを検証します
ラッパー固有のオプションを解析し、対象プロセスを起動する前に未対応のフラグを報告します。
短い表記と長い表記を正規化します
-o と --output などのエイリアスを 1 つの安定したプロパティへ対応付け、処理を簡潔にします。
コマンドのプレビューとテストを作成します
コマンドやシェルを実行せず、要素配列を決定的な構造化フィクスチャへ変換します。
よくある質問
料金はいくらですか?
API リクエスト 1 回あたり $0.002 です。ブラウザー版では同じ決定的な解析処理をローカルで実行します。
未知のフラグは拒否されますか?
いいえ。unknown_flags に返されるため、呼び出し側で拒否、警告、転送を選択できます。
--name=value 形式に対応していますか?
はい。値を取る長いオプションで利用できます。等号の後が空の場合はエラーになります。
-abc のような短いフラグを結合して解釈しますか?
いいえ。エイリアスは要素全体と照合されるため、仕様に -abc 自体を宣言した場合だけ認識されます。
単独の二重ハイフン以降はどうなりますか?
オプション解析を終了し、残りのすべての要素を位置引数として返します。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev2/cli-arg-parse-spec \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"args":["--verbose","--output=result.json","input.txt"],"spec":[{"name":"verbose","aliases":["--verbose","-v"],"kind":"flag"},{"name":"output","aliases":["--output","-o"],"kind":"option"}]}'const res = await fetch("https://api.kit.forhosting.com/dev2/cli-arg-parse-spec", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"args": [
"--verbose",
"--output=result.json",
"input.txt"
],
"spec": [
{
"name": "verbose",
"aliases": [
"--verbose",
"-v"
],
"kind": "flag"
},
{
"name": "output",
"aliases": [
"--output",
"-o"
],
"kind": "option"
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/cli-arg-parse-spec",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"args": [
"--verbose",
"--output=result.json",
"input.txt"
],
"spec": [
{
"name": "verbose",
"aliases": [
"--verbose",
"-v"
],
"kind": "flag"
},
{
"name": "output",
"aliases": [
"--output",
"-o"
],
"kind": "option"
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/cli-arg-parse-spec", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"args":["--verbose","--output=result.json","input.txt"],"spec":[{"name":"verbose","aliases":["--verbose","-v"],"kind":"flag"},{"name":"output","aliases":["--output","-o"],"kind":"option"}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"args":["--verbose","--output=result.json","input.txt"],"spec":[{"name":"verbose","aliases":["--verbose","-v"],"kind":"flag"},{"name":"output","aliases":["--output","-o"],"kind":"option"}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/cli-arg-parse-spec", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"args": [
"--verbose",
"--output=result.json",
"input.txt"
],
"spec": [
{
"name": "verbose",
"aliases": [
"--verbose",
"-v"
],
"kind": "flag"
},
{
"name": "output",
"aliases": [
"--output",
"-o"
],
"kind": "option"
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.cli_arg_parse_spec",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |