AI に適した CLI モード Server
Babel Licensing 11.8 以降、lic コマンドラインは、CI パイプライン、注文システム、AI エージェントに適した、構造化された機械可読の出力ストリームを生成できます。これは、難読化ツールに 11.7 で追加されたモードに対応するものです。
lic の既定のテキスト出力は変更されておらず、完全な後方互換性を保っています。既存のスクリプトを変更する必要はありません。
AI に適したモードは、次の 3 つのグローバルフラグで有効にします。
--format=text|json|ndjsonは、出力チャネルの形式を選択します。--quiet(エイリアス-q)は、ロゴバナーを抑止し、対話型プロンプトでは入力を待たずにすぐに失敗します。--strict-exitは、意味を持つ終了コードを有効にします。
--format=json または --format=ndjson を選択すると、stdout には構造化ストリームが出力され、人が読むためのメッセージは stderr に送られるため、2 つのチャネルが混ざることはありません。
--format は、ライセンスの出力形式(xml、serial、base32、ascii)を選択するオプションでもあります。2 つの値のセットは重複しないため、1 つのコマンドラインに両方の意味で指定できます(lic MyApp.dll --format base32 --format json)。
フラグ
—format <format>
stdout で使用する出力形式を選択します。指定できる値は次のとおりです。
| 値 | 説明 |
|---|---|
text | 既定。人が読むための従来のコンソール出力。 |
json | 実行の完了時(または --help / --version の指定時)に書き出される、バッファリングされた単一の JSON ドキュメント。stdout をファイルに保存する場合や、JSON を処理するプログラムにパイプする場合に最適です。 |
ndjson | 改行区切りの JSON。1 行に 1 イベントで、生成されるたびにフラッシュされます。ストリーミングで処理するプログラム、ログ転送ツール、稼働中のエージェントに最適です。 |
lic MyApp.dll --keyfile keys.pem --sign --expiredate 365 --format json > result.json
lic MyApp.dll --keyfile keys.pem --sign --format ndjson | jq -c 'select(.level=="error")'json または ndjson では、--logo の指定にかかわらずロゴバナーが抑止されるため、stdout の最初のバイトから有効な JSON になります。
—quiet (-q)
著作権バナーと、すべての対話型プロンプトを抑止します。lic が表示するプロンプトは、PFX キーファイルのパスワードの入力だけです。--quiet を指定すると、--keypwd がない場合に入力待ちで止まる代わりに明示的なエラーで失敗するため、CI ランナー、コンテナー、エージェントからの無人実行でも安全に使用できます。
lic MyApp.dll --quiet --keyfile signing.pfx --keypwd "$KEY_PWD" --sign--quiet は --format とは独立しています。text 出力と組み合わせると、バナーなしで人が読めるログを残せます。
—strict-exit
プロセスが意味を持つ終了コードを返すようにします。このフラグを指定しない場合、lic は、0 が成功、1 があらゆる失敗を表す従来の規約を維持します。
| 終了コード | 定数 | 意味 |
|---|---|---|
0 | success | コマンドはエラーなしで完了しました。 |
10 | invalidArguments | コマンドラインを解析できなかったか、無効な値(たとえば不明なオプション)が含まれていました。 |
20 | inputNotFound | アセンブリ、ライセンスファイル、またはその他の必要な入力ファイルが見つかりませんでした。 |
30 | processingFailure | ライセンスの処理に失敗しました。生成、更新、または署名の検証の失敗です。 |
40 | licensingFailure | ツール自体の Babel Licensing ライセンスが見つからないか、無効か、期限切れです。 |
50 | keyOrSigningFailure | キーファイルまたはキーコンテナーを読み込めなかったか、暗号処理に失敗しました。 |
番号は難読化ツールの --strict-exit の表と同じなので、呼び出し側は 1 つの終了コード表で babel と lic の両方を扱えます。唯一の違いは、コード 30 がここではライセンスの処理を、難読化ツールでは難読化を意味する点です。この分類は、--strict-exit が有効でない場合でも、JSON の結果に exitReason として出力されます。
lic MyApp.licenses --verify --keyfile keys.pem --strict-exit --quiet
echo "exit=$?"スキーマ:lic.cli.v1
構造化されたペイロードにはすべて、"schema": "lic.cli.v1" と、ドキュメントの種類を示す kind が含まれます。種類は event、result、help、version のいずれかです。このスキーマは難読化ツールの babel.cli.v1 と同じ構造ですが、2 つのツールでオプションのセットが異なるため、バージョンは別々に管理されます。スキーマのメジャーバージョン内では追加だけの変更が許容され、互換性のない変更があるとスキーマ名が変わります。
イベントレコード
実行中に出力されるメッセージは、すべてイベントに対応付けられます。
{
"schema": "lic.cli.v1",
"kind": "event",
"ts": "2026-09-03T06:31:54.1686900Z",
"level": "info",
"message": "License saved to 'MyApp.licenses'"
}| フィールド | 型 | 備考 |
|---|---|---|
ts | 文字列(ISO 8601、UTC) | イベントが生成された時点のタイムスタンプ。 |
level | debug | info | warning | error | 重大度。 |
code | 文字列 | 診断コード。メッセージにコードがある場合にのみ含まれます。 |
message | 文字列 | 人が読むためのメッセージ。 |
data | オブジェクト | 省略可能な構造化ペイロード。添付されている場合にのみ含まれます。 |
結果エンベロープ
—format=json
実行が終了すると、単一の JSON オブジェクトが stdout に書き出されます。このオブジェクトには、実行全体の要約と、実行中にバッファリングされたすべてのイベントが含まれます。
{
"schema": "lic.cli.v1",
"kind": "result",
"exitCode": 0,
"exitReason": "success",
"elapsedMs": 133,
"warnings": 0,
"errors": 0,
"events": [
{ "schema": "lic.cli.v1", "kind": "event", "ts": "2026-09-03T06:31:54.1686900Z", "level": "info", "message": "License saved to 'MyApp.licenses'" }
]
}実行が失敗した場合は、失敗の分類が exitReason に、エラーがイベントの中に報告されます。次の例では、入力アセンブリが存在しませんでした。
{
"schema": "lic.cli.v1",
"kind": "result",
"exitCode": 20,
"exitReason": "inputNotFound",
"elapsedMs": 34,
"warnings": 0,
"errors": 1,
"events": [
{ "schema": "lic.cli.v1", "kind": "event", "ts": "2026-09-03T06:30:27.4366510Z", "level": "error", "message": "Error: The specified file '/build/missing.dll' was not found." }
]
}—format=ndjson
各イベントは、生成されるとすぐに、それぞれ 1 行としてフラッシュされます。最後のイベントの後に、最終的な結果の行が追加されます。イベントはすでにストリームとして出力されているため、この行に events 配列はありません。
{"schema":"lic.cli.v1","kind":"event","ts":"2026-09-03T06:31:54.3357790Z","level":"info","message":"License saved to 'MyApp.licenses'"}
{"schema":"lic.cli.v1","kind":"result","exitCode":0,"exitReason":"success","elapsedMs":141,"warnings":0,"errors":0}| フィールド | 型 | 備考 |
|---|---|---|
exitCode | 整数 | プロセスが実際に返した数値の終了コード(--strict-exit の有無に応じて、従来のコードまたは厳密なコード)。 |
exitReason | 文字列 | 安定した分類トークン。--strict-exit を指定しない場合でも、常に意味上の分類を反映します。 |
elapsedMs | 整数 | 実経過時間の合計(ミリ秒)。 |
warnings | 整数 | warning レベルのイベントの数。 |
errors | 整数 | error レベルのイベントの数。 |
events | 配列 | json モードで含まれ、ndjson では省略されます。 |
機械可読な —help
lic --help --format=json は、公開されているすべてのオプションの完全な説明を出力します。シェル補完、AI エージェント、ドキュメント生成ツールなど、CLI の仕様を調べる必要があるツールに適しています。
{
"schema": "lic.cli.v1",
"kind": "help",
"version": "12.0.0.0",
"usage": "lic.exe <assembly|licensefile> [<other assemblies>...] [options]",
"options": [
{
"name": "trial",
"aliases": [],
"description": "Add or update trial license restriction",
"args": "<key=value>",
"argRequired": true,
"argOptional": false,
"negatable": false,
"incremental": false,
"container": "hash",
"type": "string",
"group": "- License Restrictions -",
"details": "Set trial restriction properties entering key-value pairs:\n\nid=<id> Restriction id\nexpire=<date> Set expiration date\ndays=<n> Set number of trial days\n..."
}
]
}| フィールド | 意味 |
|---|---|
name、aliases | オプション名と、その別の書き方。否定形と 1 文字のエイリアスを含みます。 |
args | 使用方法に表示される引数のプレースホルダー。スイッチの場合は空です。 |
argRequired、argOptional | オプションが必須の引数を取るか、省略可能な引数を取るか。 |
negatable | オプションが no プレフィックスを受け付けるかどうか。 |
container | 単一の値は scalar、繰り返し指定できるオプションは array、key=value のペアは hash。 |
type | string または integer。 |
group | オプションが属する、ヘルプ出力のセクション。 |
details | 詳細な説明。lic --help <option> が表示するものと同じテキストです。 |
範囲を絞った形式もサポートされています。lic --help trial --format=json は、trial オプションだけを含む同じエンベロープを出力します。非表示のオプションと内部オプションが返されることはありません。
機械可読な —version
lic --version --format=json は、製品、バージョン、ランタイム、プラットフォームの情報を出力します。
{
"schema": "lic.cli.v1",
"kind": "version",
"product": "Babel Licensing",
"version": "12.0.0.0",
"fileVersion": "12.0.0.1",
"runtime": ".NET 10.0.0",
"platform": "osx-arm64"
}platform フィールドには、.NET 5 以降では .NET のランタイム識別子(RID)が、従来のターゲットでは合成した <os>-<arch> 形式の文字列が使用されます。
エージェントからの lic の操作
lic を見たことがないエージェントでも、JSON のヘルプだけで操作できます。オプションのスキーマを読み、args と container の情報からコマンドラインを組み立て、--format json --quiet --strict-exit を付けて実行し、exitReason で処理を分岐します。ライセンスを発行する典型的な流れは次のとおりです。
lic --help --format json > lic-options.json
lic MyApp.dll --keyfile keys.pem --sign --licensee name="Contoso" --expiredate 365 --output MyApp.licenses --format json --quiet --strict-exit > result.json
jq -r '.exitReason' result.json同じ規約、終了コード、フラグ名が難読化ツールのコマンドラインにも適用されます。こちらは難読化ツールのマニュアルの AI に適したモードで説明しており、1 つの統合で両方のツールに対応できます。
後方互換性
--formatの既定値はtextです。新しいフラグを指定しない場合、従来のテキスト出力、終了コード、動作は変わりません。--strict-exitを指定しない場合、プロセスはこれまでどおり成功時に0、失敗時に1を返すため、$?で分岐する既存のゲートは引き続き機能します。--quietは独立しており、構造化出力を有効にしなくても使用できます。