メインコンテンツへスキップ
ブログ一覧

Anthropic ant CLI実践ガイド — curlを卒業してClaude APIをターミナルからスマートに叩く

(更新: 2026年04月12日)
ant CLIClaude APIManaged AgentsCLI自動化Anthropic

2026年4月8日、AnthropicはClaude APIの公式CLIクライアント「ant」をリリースした。Go製のシングルバイナリで、curlで長大なJSONを手書きしていた日々に終わりを告げるツールだ。@pathでファイルを直接渡し、--transformでレスポンスからほしいフィールドだけ抜き出す。この記事では、インストールから実践的なワークフロー構築まで、ant CLIの全貌をコード付きで解説する。

ant CLIとは何か — curl/Postmanとの決定的な違い

APIクライアントとしてのポジション

ant CLIは、GitHubリポジトリ anthropics/anthropic-cli で公開されているMIT Licenseのオープンソースツールだ。コマンド体系は ant <resource>[:<subresource>] <action> [flags] で統一されており、Claude APIのリソース構造がそのままコマンドにマッピングされている。

curlとの比較:同じMessages API呼び出しで何が変わるか

まず、curlでMessages APIを叩く場合を見てみよう。

bash
# curlの場合 — JSONの手書きが必要
curl -X POST https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-4-5-20250929",
    "max_tokens": 1024,
    "messages": [
      {"role": "user", "content": "日本の首都は?"}
    ]
  }'

同じことをant CLIで書くとこうなる。

bash
# ant CLIの場合 — フラグ指定でシンプル
ant messages create \
  --model claude-sonnet-4-5-20250929 \
  --max-tokens 1024 \
  --message '{role: user, content: [{type: text, text: "日本の首都は?"}]}'

ヘッダーの手書きが不要になり、認証は環境変数 ANTHROPIC_API_KEY から自動で読み取られる。--base-url フラグでカスタムエンドポイントにも対応しているので、プロキシ経由の利用も問題ない。

インストールと初期設定

Homebrew / Go installの2パターン

bash
# 1. Homebrew(macOSで最も簡単)
brew install anthropics/tap/ant

# 2. Goソースビルド(Go 1.22以上が必要)
go install github.com/anthropics/anthropic-cli/cmd/ant@latest

macOSのquarantine解除

macOSでは、インストール後に以下のコマンドを必ず実行する。これを忘れるとバイナリが実行できない。

bash
xattr -d com.apple.quarantine "$(brew --prefix)/bin/ant"

APIキーを設定して疎通確認する。

bash
export ANTHROPIC_API_KEY="sk-ant-..."
ant models list

モデル一覧が表示されれば準備完了だ。

Messages APIをant CLIで使いこなす

基本のメッセージ送信

bash
ant messages create \
  --model claude-sonnet-4-5-20250929 \
  --max-tokens 1024 \
  --system "あなたは優秀なプログラマーです" \
  --message '{role: user, content: [{type: text, text: "FizzBuzzをPythonで書いて"}]}'

@pathでファイルを直接渡す

ant CLIの中でも個人的に最も気に入っている機能がこれだ。@ プレフィックスでファイルの中身を直接フィールドに展開できる。

bash
# テキストファイルを渡す
ant messages create \
  --model claude-sonnet-4-5-20250929 \
  --max-tokens 2048 \
  --message '{role: user, content: [{type: text, text: "@./prompt.txt"}]}'

# 画像をbase64自動変換して渡す
ant messages create \
  --model claude-sonnet-4-5-20250929 \
  --max-tokens 1024 \
  --message '{role: user, content: [{type: image, source: {type: base64, media_type: "image/png", data: "@data://./screenshot.png"}}]}'

@file:// でテキスト読み込みを明示、@data:// でbase64変換を明示できる。メールアドレスなどリテラルの @ を含む文字列は @ でエスケープする。

--transformでレスポンスを加工する

--transform はGJSON構文でレスポンスから必要なフィールドだけを抽出する。jqではない点に注意。

bash
# テキスト本文だけ抽出
ant messages create \
  --model claude-sonnet-4-5-20250929 \
  --max-tokens 1024 \
  --message '{role: user, content: [{type: text, text: "今日の日付は?"}]}' \
  --transform 'content.0.text' \
  --format yaml

# シェル変数に代入するパターン
RESULT=$(ant messages create \
  --model claude-sonnet-4-5-20250929 \
  --max-tokens 256 \
  --message '{role: user, content: [{type: text, text: "Hello"}]}' \
  --transform 'content.0.text' \
  --format yaml)
echo "$RESULT"

--formatautoexplorejsonjsonlprettyrawyaml から選べる。explore はレスポンスの構造をTUI上で折りたたみ・検索できるモードで、APIの戻り値を調査するときに便利だ。なお、--transform--format raw は併用できない(--format raw 指定時は --transform が無視される)ため、--transform を使う場合は --format yaml を推奨する。

YAMLでManaged Agentsを定義・デプロイする

エージェント定義の作成

Managed Agents関連のコマンドはすべて beta: プレフィックスが必要だ。正直、最初は agents create と書いてエラーになり戸惑った。

bash
# エージェント作成
ant beta:agents create \
  --name "summarizer" \
  --model claude-sonnet-4-5-20250929 \
  --description "テキスト要約エージェント" \
  --system "渡されたテキストを3行以内に要約してください"

環境・セッション・イベントの操作フロー

エージェントの作成からメッセージの送受信まで、一連の操作をCLIだけで完結できる。

bash
# 1. エージェント作成 → IDを取得
AGENT_ID=$(ant beta:agents create \
  --name "code-reviewer" \
  --model claude-sonnet-4-5-20250929 \
  --system "コードレビューを行い、改善点を指摘してください" \
  --transform id --format yaml)

# 2. 環境作成
ENV_ID=$(ant beta:environments create \
  --name "review-env" \
  --transform id --format yaml)

# 3. セッション作成
SESSION_ID=$(ant beta:sessions create \
  --agent "{id: $AGENT_ID}" \
  --environment-id "$ENV_ID" \
  --transform id --format yaml)

# 4. メッセージ送信
ant beta:sessions:events send \
  --session-id "$SESSION_ID" \
  --event '{type: user.message, content: [{type: text, text: "def add(a, b): return a + b のレビューをお願いします"}]}'

# 5. ストリーミングで結果取得
ant beta:sessions stream --session-id "$SESSION_ID"

--transform id --format yaml でIDだけを抽出し、次のコマンドに変数として渡すチェーンパターンは、シェルスクリプトでの自動化に非常に使いやすい。

YAMLファイルをGit管理してCIで同期する

エージェント定義をYAMLファイルに書き出してGit管理し、CIパイプラインで ant beta:agents update を実行すれば、エージェントのバージョン管理がコードと同じ感覚で行える。--version フラグで明示的にバージョンを指定してデプロイすることも可能だ。

Claude Codeとの連携とシェルスクリプト自動化

Claude Codeからantコマンドを実行する

Claude Codeはant CLIをネイティブのCLIツールとして認識する。「antコマンドでManaged Agentsのセッション一覧を取得して」と指示するだけで、適切なコマンドを組み立てて実行し、結果をパースしてくれる。

パイプラインに組み込む実践パターン

--debug フラグを使うと、HTTPリクエスト/レスポンスの全容がstderrに出力される(APIキーは自動マスク)。開発中のデバッグに重宝する。

bash
# デバッグモードで実行
ant messages create \
  --model claude-sonnet-4-5-20250929 \
  --max-tokens 256 \
  --message '{role: user, content: [{type: text, text: "test"}]}' \
  --debug 2>debug.log

エラーレスポンスの加工には --format-error--transform-error が用意されている。正常系と異常系で異なるフォーマットを指定できるため、スクリプト内のエラーハンドリングもきれいに書ける。

ハマりポイントと注意点

  • macOSのquarantine: Homebrewインストール後に xattr -d com.apple.quarantine を実行しないと「開発元が未確認」エラーで実行できない。最初にやるべき手順だが忘れがち
  • beta:プレフィックス必須: Managed Agents関連は beta:agents create であり、agents create ではコマンドが見つからない
  • stdinとフラグの競合: stdinからJSON/YAMLを渡す場合、同じフィールドがフラグでも指定されているとフラグ側が優先される
  • @pathのバイナリファイル: 自動でbase64変換されるが、明示的に @data:// を使うほうが意図が明確で安全
  • --transformと--format rawの併用不可: --format raw を指定すると --transform は無視される。--transform を使いたい場合は --format yaml を指定する
  • beta扱いの機能: v1.1.0時点ではManaged Agents、Sessions、Environments関連はすべてbeta — APIが今後変更される可能性がある

まとめ

ant CLIは、Claude APIをターミナルから操作する体験を根本的に変えるツールだ。curlの長いJSON手書きから解放されるだけでなく、--transform によるレスポンス加工やエージェント操作のCLI完結など、API開発者の日常ワークフローを着実に改善してくれる。

特にManaged Agentsのセッション操作をCLIから行えることで、エージェント開発のイテレーション速度が上がる。まだv1.1.0でbeta機能も多いが、今のうちに手に馴染ませておいて損はないはずだ。

もっと読む他の技術記事も読む