DEV Community

Cover image for AIエージェント向けおすすめCLIツール
Akira
Akira

Posted on • Originally published at apidog.com

AIエージェント向けおすすめCLIツール

AIエージェントはGUIを読み取りません。コマンドを実行し、標準出力を読み、終了コードを確認して、次の行動を決定します。このループが機能するのは、呼び出すCLIが予測可能に動作する場合だけです。人間向けの装飾的な表を出力する、よろしいですか? (y/n) のような確認で停止する、失敗しても終了コード0を返す――こうしたCLIは、エージェントの自動化を壊し、原因調査も難しくします。

今すぐApidogを試す

重要なのは「最も強力なCLIはどれか」ではなく、「エージェントが出力を根拠に次のアクションを選べるCLIはどれか」です。必要なのは散文ではなく構造化JSON、プロンプトで停止しない非対話モード、成功・失敗を分岐できる終了コードです。

このリストは2つに分けられます。

  • エージェントランタイム: Claude Code、Codex CLI、Gemini CLI、Cursor CLIのように、推論・計画・実行を行うCLI
  • ツールCLI: gh、ripgrep、jq、HTTPie、apidog-cli のように、エージェントが「手」として利用するCLI

APIワークフローへエージェントを組み込む場合は、Apidog CLI完全ガイドも参照してください。

AIエージェントに適したCLIツールの条件

エージェントフレンドリーなCLIには、少なくとも次の3つの特性が必要です。

1. 構造化された出力

エージェントは整形済みテーブルよりJSONを確実に扱えます。--json--output-format json を持つCLIなら、列の位置を推測する代わりにフィールド名で値を取得できます。

gh pr list --json number,title,author \
  --jq '.[] | {number, title, author: .author.login}'
Enter fullscreen mode Exit fullscreen mode

2. 非対話型モード

確認プロンプトで停止するCLIは、CIやヘッドレス環境で動くエージェントをハングさせます。--non-interactive--yes-p などを使い、最初のコマンドで必要な入力をすべて渡してください。

# 悪い例: 対話入力を待つ可能性がある
some-cli deploy

# 良い例: 自動化向けの明示的な実行
some-cli deploy --non-interactive --yes
Enter fullscreen mode Exit fullscreen mode

3. 決定論的な終了コード

成功時は0、失敗時は0以外を返す必要があります。エージェントやCIは、本文を解析する前に終了コードで再試行・中断・次工程への進行を判断できます。

apidog run
if [ "$?" -ne 0 ]; then
  echo "テスト失敗: 後続のデプロイを停止します" >&2
  exit 1
fi
Enter fullscreen mode Exit fullscreen mode

さらに、次に実行できるアクションを出力で示すCLIは、エージェントのオーケストレーションを簡単にします。


Claude Code

Claude Codeは、ターミナルで実行するAnthropicのコーディングエージェントです。-p(プリントモード)を使うと、対話UIを起動せずにエージェントを1回実行し、結果を出力して終了できます。

npm install -g @anthropic-ai/claude-code

claude -p "summarize the failing tests in this repo" \
  --output-format json
Enter fullscreen mode Exit fullscreen mode

--output-format json は、結果、session_idtotal_cost_usd を含む構造化ペイロードを返します。呼び出し側のスクリプトでは、実行結果とコストをまとめて記録できます。

claude -p "summarize the failing tests in this repo" \
  --output-format json |
  jq '{session_id, total_cost_usd, result}'
Enter fullscreen mode Exit fullscreen mode

リアルタイムイベントが必要な場合は、--verbosestream-json を使用します。標準入力を渡すことも可能です。

cat build-error.txt | claude -p 'explain this error'
Enter fullscreen mode Exit fullscreen mode

最も得意なこと: 計画・実装・検証を含む多段階のコーディングタスク。

正直な限界: 有料のクローズドモデルをAPI経由で利用するため、長時間・高頻度の自律実行ではコストが積み上がります。


Codex CLI

Codex CLIは、OpenAIのオープンソースターミナルエージェントです。codex execcodex e も利用可能)は非対話的に実行し、結果を標準出力へストリームします。

npm install -g @openai/codex

codex exec --json "add input validation to the signup handler"
Enter fullscreen mode Exit fullscreen mode

--json を付けると、コマンド実行、ファイル変更、エージェントメッセージなどがJSONLイベントとして出力されます。jq で必要なイベントだけを取り出してください。

codex exec --json "add input validation to the signup handler" |
  jq 'select(.type == "item.completed")'
Enter fullscreen mode Exit fullscreen mode

安定した最終出力をCIへ渡したい場合は、--output-schema を使用してJSON Schemaに準拠させます。

codex exec \
  --output-schema ./release-summary.schema.json \
  "summarize the changes for this release"
Enter fullscreen mode Exit fullscreen mode

最も得意なこと: スキーマ検証済みの最終出力が必要な、CI駆動のコード変更。

正直な限界: JSONLは詳細なため、必要なイベントだけを抽出するjq処理が必要です。スキーマ制約付き出力は、実際のプロンプトとCI環境で事前に検証してください。


Gemini CLI

Gemini CLIはGoogleのオープンソースターミナルエージェントです。非TTY環境では自動的にヘッドレスモードになり、-p / --prompt を渡した場合も対話UIなしで実行できます。

npm install -g @google/gemini-cli

gemini --non-interactive \
  --output-format json \
  -p "list the public endpoints in this service"
Enter fullscreen mode Exit fullscreen mode

--output-format json は、応答と使用統計を含む単一のJSONオブジェクトを返します。パイプラインでは、必要なフィールドだけを抽出します。

gemini --non-interactive \
  --output-format json \
  -p "list the public endpoints in this service" |
  jq '.response'
Enter fullscreen mode Exit fullscreen mode

最も得意なこと: Googleツール環境での利用、コードベースの要約・検査など読み取り中心のタスク。

正直な限界: 構造化JSON出力は比較的新しいため、依存する前に対象バージョンでフラグと出力形式を確認し、必要ならバージョンを固定してください。


Cursor CLI

Cursorのcursor-agentは、エディターから独立してコーディングエージェントをターミナルで利用できるCLIです。-p / --print を使用すると、対話UIなしで実行できます。

curl https://cursor.com/install -fsS | bash

cursor-agent -p "refactor utils/date.js to use date-fns" \
  --output-format json
Enter fullscreen mode Exit fullscreen mode

--output-format には textjsonstream-json を指定できます。json では完了時に単一オブジェクトが出力され、ツールイベントは集約されます。

ヘッドレスで書き込みツールやシェルツールを使う場合は、--trust が必要です。

cursor-agent --trust \
  -p "refactor utils/date.js to use date-fns" \
  --output-format json
Enter fullscreen mode Exit fullscreen mode

最も得意なこと: Cursorを標準エディターとして使っており、同じエージェントをCIやGitフックでも使いたいチーム。

正直な限界: 一部のビルドやプラットフォームでは、ヘッドレスの-pモードがハングするという報告があります。対象OSで事前検証し、動作確認済みバージョンを固定してください。トークンは最小権限にし、変更内容をレビューしてください。


gh(GitHub CLI)

ghは、リポジトリ、Issue、Pull Request、Releaseを操作するエージェントにとって重要なCLIです。特に--json--jqの組み合わせが有用です。

brew install gh

gh pr list --json number,title,author \
  --jq '.[].author.login'
Enter fullscreen mode Exit fullscreen mode

必要なフィールドだけを明示すれば、エージェントは余計なテキストを解析せずに済みます。

gh pr list \
  --json number,title,isDraft,mergeStateStatus \
  --jq '.[] | select(.isDraft == false) | {
    number,
    title,
    mergeStateStatus
  }'
Enter fullscreen mode Exit fullscreen mode

サブコマンドにない操作は、gh apiでRESTまたはGraphQL APIを呼び出せます。

gh api repos/OWNER/REPO/issues \
  -f title="自動作成されたIssue" \
  -f body="CIで検出された問題です。"
Enter fullscreen mode Exit fullscreen mode

最も得意なこと: PR状態の取得、Issue作成、Release操作など、GitHub上のあらゆる自動化。

正直な限界: GitHub専用です。また、--jsonで指定できるフィールドはサブコマンドごとに異なるため、コマンド単位で確認が必要です。


ripgrep

ripgrep(rg)は、大規模なコードベースで対象箇所を高速に探すためのCLIです。エージェント用途では、--jsonで構造化された一致イベントを出力するのが重要です。

brew install ripgrep

rg --json "TODO" src/ |
  jq 'select(.type == "match") | .data.path.text'
Enter fullscreen mode Exit fullscreen mode

各マッチには、ファイルパス、行番号、一致テキストなどが型付きフィールドとして含まれます。file:line:textのような文字列を分割するよりも安全です。

対象ファイルと行番号を取得する例です。

rg --json "TODO" src/ |
  jq -r '
    select(.type == "match") |
    "\(.data.path.text):\(.data.line_number)"
  '
Enter fullscreen mode Exit fullscreen mode

最も得意なこと: 編集前の調査として行う、高速かつ構造化されたコード検索。

正直な限界: --json出力は冗長です。単発の手動検索ではプレーンテキストの方が簡単な場合があります。


jq

jqはJSONパイプラインの接着剤です。上記のCLIが出力するJSONを、エージェントの次のコマンドが必要とする形へ変換します。

brew install jq

curl -s https://api.github.com/repos/cli/cli |
  jq '{name, stars: .stargazers_count}'
Enter fullscreen mode Exit fullscreen mode

CIでは、JSONを検証してから後続処理へ渡すようにすると安全です。

result="$(gh pr list --json number,title)"
echo "$result" |
  jq -e 'type == "array"' >/dev/null ||
  exit 1

echo "$result" |
  jq '.[] | {number, title}'
Enter fullscreen mode Exit fullscreen mode

jq -eは条件が偽の場合に0以外を返せるため、壊れた入力を早期に検出できます。

最も得意なこと: 任意のCLIのJSONを、後続ステップに必要な最小の構造へ変換すること。

正直な限界: クエリ言語には学習コストがあります。またJSON専用なので、生ログはまずJSONに変換するか、JSONを出力できるCLIと組み合わせてください。


HTTPie

HTTP APIを直接呼び出す場合、HTTPie(http)は生のcurlよりJSONを扱いやすいCLIです。コマンドラインのフィールドをJSONリクエストボディとして扱い、レスポンスも自動的に解析します。

brew install httpie

http --print=b POST httpbin.org/post \
  name=apidog \
  role=cli
Enter fullscreen mode Exit fullscreen mode

--printで標準出力の内容を制御できます。JSON本文だけを後続のjqへ渡すにはbを指定します。

http --print=b GET https://api.github.com/repos/cli/cli |
  jq '{name, stars: .stargazers_count}'
Enter fullscreen mode Exit fullscreen mode

最も得意なこと: JSON入出力が前提の、素早いスクリプト可能なAPI呼び出し。

正直な限界: curlは多くの環境に標準搭載されていますが、HTTPieは追加依存です。ストリーミングや特殊なプロトコルではcurlの方が適する場合があります。


apidog-cli

多くのCLIは人間向けに作られ、後から--jsonが追加されています。apidog-cliは、構造化JSONを前提に設計されたAPIプロジェクト向けCLIです。レスポンスにはagentHints.nextStepsが含まれ、呼び出し元のエージェントが次に実行できる操作を判断できます。

apidog-cliでは、エンドポイント、スキーマ(データモデル)、モック、環境、インポート・エクスポート、ドキュメント、テストシナリオ、ブランチを管理できます。

npm install -g apidog-cli

apidog login --with-token <YOUR_TOKEN>
apidog run --help
Enter fullscreen mode Exit fullscreen mode

CIやエージェントでは、終了コードでテスト結果を分岐してください。apidog runは、すべてのテストが成功した場合に0を返し、いずれかが失敗した場合は0以外を返します。

apidog run

case "$?" in
  0)
    echo "APIテスト成功: 後続ステップを実行します"
    ;;
  *)
    echo "APIテスト失敗: デプロイを停止します" >&2
    exit 1
    ;;
esac
Enter fullscreen mode Exit fullscreen mode

ライブAPIプロジェクトへの書き込み権限を持つエージェントは、エンドポイントやスキーマを誤って上書き・削除する可能性があります。ApidogのAIブランチでは、エージェント用の分離ブランチを作成できます。

apidog branch --type ai
Enter fullscreen mode Exit fullscreen mode

元ブランチは変更されず、マージリクエストを承認するまで変更は確定しません。詳細はAIエージェントのためのAIブランチAIエージェントテストハーネスの構築AIエージェントワークフローでのApidog CLIを参照してください。

最も得意なこと: APIライフサイクル全体を扱う、JSONネイティブなエージェント用ツールチェーン。次のステップのヒントと分離編集ブランチを利用できます。

正直な限界: Apidogはオープンソースではありません。無料プランのある商用製品であり、jqやripgrepのような単一目的のMITライセンスバイナリとは異なる選択肢です。またOpenAPIリンターはないため、スタイル強制が必要な場合はSpectralまたはRedoclyと組み合わせてください。


選び方

万能な勝者はいません。ランタイムは推論を担い、ツールCLIは実際の作業を担います。まず1つのランタイムを選び、その上で作業に必要なCLIを組み合わせてください。

ツール 最適な用途 インストール オープンソース? エージェント適合メモ
Claude Code 多段階コーディング、計画 npm i -g @anthropic-ai/claude-code いいえ -p + --output-format json、コスト情報を出力
Codex CLI スキーマ型付きCIコード変更 npm i -g @openai/codex はい codex exec --json--output-schema
Gemini CLI Googleスタック、読み取り中心タスク npm i -g @google/gemini-cli はい --non-interactive --output-format json
Cursor CLI Cursorチーム、エディターとCIの統一 `curl cursor.com/install \ bash` いいえ
gh GitHub操作全般 brew install gh はい --jsonフィールド + 組み込み--jq
ripgrep 高速な構造化コード検索 brew install ripgrep はい --jsonによる型付き一致イベント
jq JSONの変換・検証 brew install jq はい 決定論的なパイプラインの接着剤
HTTPie スクリプト可能なJSON API呼び出し brew install httpie はい JSONファースト、--printで出力制御
apidog-cli エージェント向けAPIライフサイクル npm i -g apidog-cli いいえ(無料プランあり) ネイティブJSON + agentHints.nextSteps

実装では、以下のように役割を分けると扱いやすくなります。

# 1. エージェントが変更を実施
codex exec --json "fix the failing API validation tests"

# 2. APIテストを実行
apidog run || exit 1

# 3. GitHubへ結果を反映
gh pr comment 123 --body "APIテストが成功しました。"
Enter fullscreen mode Exit fullscreen mode

APIに触れるワークフローでは、curl、モックサーバー、テストランナーを個別に組み合わせることもできます。一方で、次のステップを示せるJSONネイティブなCLIを使うと、接着コードを減らせるという利点があります。

まとめ

エージェント適合性はマーケティング用語ではありません。確認すべき具体的な条件は次の3つです。

  1. エージェントが解析できる構造化出力
  2. ハングしない非対話型モード
  3. 分岐可能な終了コード

Claude Code、Codex CLI、Gemini CLI、Cursor CLIのようなランタイムが推論を担当し、gh、ripgrep、jq、HTTPie、apidog-cliのようなツールCLIが作業を実行します。

apidog-cliは、JSON出力、信頼できる終了コード、agentHints.nextStepsによる次アクションのヒントを提供します。エージェントの仕事がAPIに関わる場合は、ApidogをダウンロードしてCLIを試すか、Apidog CLI完全ガイドから始めてください。その後CIへ組み込むと、エージェントネイティブな出力の効果を活かせます。

Top comments (0)