DEV Community

Cover image for 黄金律:CLIは事実を生成し、モデルは事実に基づいて動作する
Akira
Akira

Posted on • Originally published at apidog.com

黄金律:CLIは事実を生成し、モデルは事実に基づいて動作する

ApidogがAPIテストとAPIライフサイクル管理のためのコマンドラインツールであるApidog CLIをどのように開発したかを紹介する10部構成のシリーズです。順番に読むことも、必要なテーマに直接ジャンプすることもできます。

今すぐApidogを試す

モデルにすべてのルールを記憶させないでください。ルールは適切な場所で実行されるべきです。cli-schema validateは、スキーマを「知識」から「品質ゲート」へ変えます。


核となる原則:ルールは適切な場所で実行する

Agentにすべての仕様ルールを覚えさせるのではなく、決定論的に判定できるルールはCLIで実行します。

モデルにすべてのルールを記憶させないでください。ルールは適切な場所で実行されるべきです。

Agentの責務とCLIの責務は分けます。

指標タイプ 属する場所
決定論的指標 スクリプト、コード、自動チェック
意味的判断 LLM、モデル推論

Apidog CLI + SKILLでは、次のように分担します。

内容 場所
決定論的構造検証 CLI(cli-schema
タスクの判断と生成 Agent

実装上のポイントはシンプルです。

CLIで構造を検証し、Agentでコンテンツを生成します。


なぜモデルの記憶に頼ると危険なのか

AI AgentがApidogリソースの作成や更新を支援する場合、リスクは文章生成そのものだけではありません。

リスクが高いのは、十分な構造検証なしに生成結果を実プロジェクトへ書き込むことです。

Apidogリソースは構造化されています。たとえばテストケースやテストシナリオには、以下のような要素があります。

コンポーネント 複雑さ
リクエストデータ メソッド、URL、ヘッダー、ボディ、認証
アサーション 比較演算子、対象、ターゲット値、条件
変数抽出 変数名、型、抽出パス
プリプロセッサ リクエスト前のスクリプト
ポストプロセッサ レスポンス後のスクリプト
ステップ順序 シーケンス、依存関係
環境参照 環境ID、変数オーバーライド

Agentがこれらの構造を推測すると、次のような問題が起きます。

  • フィールド名の間違い → 書き込み失敗
  • 無効な列挙値 → サーバー拒否
  • 必須フィールドの欠落 → 不完全なリソース
  • 型の間違い → UI表示の問題
  • 不適切なネスト → テストが期待通りに動作しない

cli-schema validate: 書き込み前の品質ゲート

この問題に対する直接的な対策が、cli-schema validateです。

apidog cli-schema validate test-scenario-update --file ./scenario-update.json
Enter fullscreen mode Exit fullscreen mode

AgentがテストシナリオやテストケースのJSONを生成したら、APIへ書き込む前にローカルで検証します。

validateコマンドは、主に以下を確認します。

  • フィールド名が正しいか
  • 構造が有効か
  • 列挙値が有効か
  • 型制約を満たしているか

重要なのは、これらをすべて書き込みリクエストの前に実行することです。


cli-schemaが検出する典型的なエラー

Agentが生成しやすいエラーにはパターンがあります。

誤った値 正しい値 コンテキスト
global globals 変数スコープタイプ
contains include アサーション比較演算子
responseBody responseJson レスポンスボディ対象
"500"(文字列) 500(数値) ミリ秒単位の遅延
equals equal アサーション比較演算子
header headers リクエストヘッダーフィールド

これらは理論上の例ではありません。実際のAgentとのインタラクションから見つかったエラーです。

この種のエラーをAPI書き込み時に初めて検出すると、次のような無駄が発生します。

  • 書き込みリクエストの失敗
  • APIエラー応答の解析
  • Agentの誤った修正
  • 複数回の再試行
  • 不要なトークン消費

cli-schema validateを使うと、これらのエラーをネットワーク呼び出しの前にローカルで検出できます。


実装方針:プロンプトではなくローカル検証に寄せる

代替案1:プロンプトにすべてのルールを書く

すべてのフィールドルールをAgentのプロンプトに入れると、次のようになります。

  • すべてのフィールド名を文書化する
  • すべての列挙値を列挙する
  • すべての型制約を説明する
  • すべてのネスト構造を記述する

結果:コンテキスト負荷が大きすぎます。

包括的なテストシナリオのスキーマは、簡単に5,000トークン以上の説明になる可能性があります。しかも多くのタスクでは、その大半のルールは使われません。

代替案2:モデルの記憶に頼る

モデルが正しい構造を「知っている」ことに期待する方法もあります。

しかし実際には、以下の制約があります。

  • モデルは一般的なAPIパターンを学習している
  • しかしApidog固有のスキーマに最適化されているとは限らない
  • フィールド名は製品ごとに異なる
  • 列挙値も製品固有である

結果:エラー率が高くなります。

モデルはApidog固有の慣習を完全には記憶していません。推測はできますが、その推測はしばしば間違います。

推奨アプローチ:Agentに生成させ、CLIで検証する

実装フローは次のようにします。

# 1. AgentがJSONを生成する
# Agentはすべてのルールを記憶する必要はない

# 2. CLIが構造を検証する
apidog cli-schema validate test-case-create --file ./test-case-create.json

# 3. エラーがあればCLIが具体的に出力する
# Agentはエラー内容に基づいてJSONを修正する

# 4. 検証済みのJSONだけを書き込む
apidog test-case create --project <projectId> --file ./test-case-create.json
Enter fullscreen mode Exit fullscreen mode

この流れにすると、Agentは「仕様を暗記する」のではなく、「検証結果を読んで修正する」ワークフローに移行できます。


スキーマの役割を変える

cli-schema validateは、スキーマの扱い方を変えます。

スキーマ = モデルが記憶すべき知識 スキーマ = 通過しなければならない品質ゲート
書き込み失敗によってエラーを発見 ローカル検証によってエラーを発見
ネットワーク呼び出しで再試行 ローカル修正で再試行
コンテキストの負担 実行ゲート

ポイントは次の2つです。

  • 問題をネットワーク往復で消費しない
  • 品質チェックをローカルコマンドで完了させる

実践ワークフロー

実際のAgentワークフローでは、以下のように組み込みます。

# Agentがエンドポイント情報を取得する
apidog endpoint get <endpointId> --project <projectId>

# AgentがテストケースJSONを生成する
# ./test-case-create.json を作成する

# 書き込み前に検証する
apidog cli-schema validate test-case-create --file ./test-case-create.json
Enter fullscreen mode Exit fullscreen mode

検証が通った場合だけ、作成コマンドを実行します。

apidog test-case create --project <projectId> --file ./test-case-create.json
Enter fullscreen mode Exit fullscreen mode

検証に失敗した場合、CLIは具体的なエラーを返します。

エラー: フィールド "assertions[0].comparator" に無効な値 "contains" があります
有効な値: equal, not_equal, greater, less, include, not_include, exists, not_exists

エラー: フィールド "extractors[0].type" に無効な値 "global" があります
有効な値: globals, environment, collection, local

提案: これらのフィールドを修正し、書き込み前に再検証してください。
Enter fullscreen mode Exit fullscreen mode

Agentはこの出力を使って、次のループを実行します。

  1. エラー内容を読む
  2. 問題のフィールドを特定する
  3. JSONファイルを修正する
  4. cli-schema validateを再実行する
  5. 検証が通った場合のみ書き込む

このループにより、書き込み失敗、曖昧な再試行、不要なトークン消費を減らせます。


より広範な設計ルール

この考え方はスキーマ検証だけに限りません。

ルールタイプ 属する場所
フィールド名ルール cli-schema
列挙値ルール cli-schema
型制約 cli-schema
ワークフローシーケンス SKILL
次ステップガイダンス agentHints
タスク分解 Agent

判断基準は明確です。

決定論的ルール → エンジニアリングシステム

意味的判断 → Agent

Agentにすべてを任せるのではなく、決定論的に検証できるものはCLIやスクリプトへ移すべきです。


次は何ですか

検証の原則が確立されると、次の疑問が出てきます。

検証後、CLIはどのようにAgentを次のステップへ導くのか?

第4部、agentHints: CLIにAgentとの対話を教えるでは、次ステップの提案を含む構造化出力が、CLIを単なるコマンド実行者からワークフローナビゲーターへ変える方法を説明します。


重要なポイント

  • ルールはコンテキストではなく、実行可能な検証として配置する
  • cli-schema validateは書き込み前の品質ゲートである
  • よくあるエラーは、誤ったフィールド名、無効な列挙値、誤った型
  • ローカル検証により、ネットワーク往復と再試行を減らせる
  • スキーマは「記憶すべき知識」ではなく「通過すべきゲート」になる
  • 決定論的ルールはエンジニアリングへ、意味的判断はAgentへ任せる

Apidogをダウンロードして、APIの設計モックテストドキュメント化を1つのワークスペースで行いましょう。コマンドラインAPIテスト、CI自動化、AI Agentワークフローに関するApidog CLIの詳細をご覧ください。

Top comments (0)