Anthropic ant CLI実践ガイド — curlを卒業してClaude APIをターミナルからスマートに叩く
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を叩く場合を見てみよう。
# 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で書くとこうなる。
# 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パターン
# 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では、インストール後に以下のコマンドを必ず実行する。これを忘れるとバイナリが実行できない。
xattr -d com.apple.quarantine "$(brew --prefix)/bin/ant"
APIキーを設定して疎通確認する。
export ANTHROPIC_API_KEY="sk-ant-..."
ant models list
モデル一覧が表示されれば準備完了だ。
Messages APIをant CLIで使いこなす
基本のメッセージ送信
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の中でも個人的に最も気に入っている機能がこれだ。@ プレフィックスでファイルの中身を直接フィールドに展開できる。
# テキストファイルを渡す
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ではない点に注意。
# テキスト本文だけ抽出
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"
--format は auto、explore、json、jsonl、pretty、raw、yaml から選べる。explore はレスポンスの構造をTUI上で折りたたみ・検索できるモードで、APIの戻り値を調査するときに便利だ。なお、--transform と --format raw は併用できない(--format raw 指定時は --transform が無視される)ため、--transform を使う場合は --format yaml を推奨する。
YAMLでManaged Agentsを定義・デプロイする
エージェント定義の作成
Managed Agents関連のコマンドはすべて beta: プレフィックスが必要だ。正直、最初は agents create と書いてエラーになり戸惑った。
# エージェント作成
ant beta:agents create \
--name "summarizer" \
--model claude-sonnet-4-5-20250929 \
--description "テキスト要約エージェント" \
--system "渡されたテキストを3行以内に要約してください"
環境・セッション・イベントの操作フロー
エージェントの作成からメッセージの送受信まで、一連の操作をCLIだけで完結できる。
# 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キーは自動マスク)。開発中のデバッグに重宝する。
# デバッグモードで実行
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機能も多いが、今のうちに手に馴染ませておいて損はないはずだ。
