3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Managed AgentsにIaC的に管理する機能が追加されたゾ!!

3
Posted at

Claude Developer PlatformのantCLIにv1.30.0でapplyコマンドが追加されました。

ドキュメントではこちらに該当します。

クラウド環境はIaCが主流になっていますが、Manged Agents時代のIaC(Infrastructure as Code)っぽい感じです!

ドキュメントのタイトルはManage resources as codeです

やってみます。

ant cliをインストール

公式のインストール手順には、macOSの場合、brewでインストールする手順が書かれています。

が、私の趣味で、miseを使ってインストールします。

mise use 'github:anthropics/anthropic-cli[exe=ant]@latest'

インストール後、mise.tomlが生成されます。

mise.toml
[tools]
"github:anthropics/anthropic-cli" = { version = "latest", exe = "ant" }

antを呼び出してみましょう。

mise exec -- ant --version
ant version 1.32.0

ant cliの設定

これも完全に個人の趣味ですが、antコマンドでのログイン状態をグローバルに保持させず、今回のプロジェクトは以下に保持するようにしました。

方法としてはANTHROPIC_CONFIG_DIR環境変数で設定ファイルの保存先を指定します。で、環境変数の設定もmiseでできます。

mise.toml
[tools]
"github:anthropics/anthropic-cli" = { version = "latest", exe = "ant" }

[env]
ANTHROPIC_CONFIG_DIR = "{{config_root}}/.anthropic"

設定ファイルはコミットすべきではないので.gitignoreに追加します。

.gitignore
.anthropic

ant auth login

antコマンドを実行するためにログインします。

ant auth login

ブラウザでログイン後、設定ファイルが先ほど指定したANTHROPIC_CONFIG_DIRの場所に出力されました。

ant apply

さて、いよいよ今回の本題です。

私の作ったClaude Managed Agentsのワークショップのこれをやってみましょう。

私、Claude Community Ambassadorやってます!イベントやります!

Osaka | Fable 5.1 Build Day

エージェントのリソースをyamlファイルとして作成します。

.
├── agents
│   └── az900-quiz-bot.md
├── environments
│   └── learn-limited.yaml
└── mise.toml
az900-quiz-bot.md
---
name: Azure Fundamentals Quiz Bot
description: Microsoft Learn MCPサーバーの最新情報を使ってAZ-900(Azure Fundamentals)の練習問題を出題し、回答履歴から苦手分野を優先出題する学習アシスタント。
model: claude-sonnet-5
mcp_servers:
  - name: microsoft-learn
    url: https://learn.microsoft.com/api/mcp
    type: url
tools:
  - type: agent_toolset_20260401
  - type: mcp_toolset
    mcp_server_name: microsoft-learn
    default_config:
      permission_policy:
        type: always_allow
skills: []
---

あなたはMicrosoft Learn MCPサーバーを使ってAZ-900(Azure Fundamentals)の練習問題を作成する学習アシスタントです。Microsoft Learnの最新の公式ドキュメントを参照し、選択式の問題を1問ずつ出題してください。

ルール:
- 問題文と選択肢を提示したら、ユーザーが回答するまで正解を明かさない。
- ユーザーの回答後、正誤を伝え、各選択肢について正誤のポイントを1行ずつで説明する。
- 学習の参考になるMicrosoft Learnドキュメントの実在するURLを3つ提示する。
- 会話内でユーザーの過去の回答(正解・不正解、出題分野)を記憶し、間違えた分野・苦手なトピックを優先的に次の問題として出題する。
- 一度に1問だけ出題し、テンポよく進める。
- 出題時は冒頭に【分野: ○○】と対象トピックを明示する。
- 解説の最後に、これまでの正答率を「正解 n/N」の形式で1行表示する。
learn-limited.yaml
name: az900-learn-limited
description: learn.microsoft.com へのアクセスだけを許可したクラウドサンドボックス。
config:
  type: cloud
  networking:
    type: limited
    allowed_hosts:
      - learn.microsoft.com

applyする前にドライランができます。

ant apply --dry-run .
First apply  ./claude-lock.json does not exist yet and will be created

Resources will be created with
  credentials   profile default
  host          api.anthropic.com
  organization  moritalous (e83bd1e7-d952-44a0-a9c4-7cb64d06e410)
  workspace     2026-09-12-ant (wrkspc_01L2h1f8pmvd1TbPRdNo42aC)

Preview  ./claude-lock.json (new)

± Name                               Plan
+ ./environments/learn-limited.yaml  create   
    name: "az900-learn-limited"

+ ./agents/az900-quiz-bot.md         create   
    model: "claude-sonnet-5"
    name: "Azure Fundamentals Quiz Bot"

Resources  + 2 to create

期待通りですので実際にapplyしましょう。

ant apply .

リソース作成前に確認が入ります。

Apply these changes? (y)es / (n)o / (d)etails 

yで回答すると作成が始まります。

Apply  ./claude-lock.json

± Name                               Status
+ ./environments/learn-limited.yaml  created    env_01JkwhfjfaQLMefaBxwLgwYx
+ ./agents/az900-quiz-bot.md         created    agent_01GCfaZCGB3cct6Na8HtsUNu

Resources  + 2 created

State written to ./claude-lock.json

リソースが作成され、claude-lock.jsonが生成されます。

claude-lock.json
{
  "version": 1,
  "origin": {
    "base_url": "https://api.anthropic.com",
    "organization_id": "e83bd1e7-d952-44a0-a9c4-7cb64d06e410",
    "workspace_id": "wrkspc_01L2h1f8pmvd1TbPRdNo42aC"
  },
  "resources": {
    "./agents/az900-quiz-bot.md": {
      "kind": "agent",
      "id": "agent_01GCfaZCGB3cct6Na8HtsUNu",
      "version": "1",
      "hash": "ae0d65d5188fd375f8dec8a1bf5c87c9",
      "remote_hash": "1e2962767199c50daf436f29439b40da"
    },
    "./environments/learn-limited.yaml": {
      "kind": "environment",
      "id": "env_01JkwhfjfaQLMefaBxwLgwYx",
      "hash": "af5c395ac0bae9da726c0edf4d7f5d15",
      "remote_hash": "2482dd7ec9f42b4c252c67e2fbd27cef"
    }
  }
}

ハッシュも保持されていて、変更の有り無しが判断できるようです。

何も変更せずにant applyを実行すると、変更無しと出ます。

Preview  ./claude-lock.json

Everything is up to date.

Resources  2 unchanged

プロンプトをちょっと変えてant apply . --dry-runを実行すると、変更を検知し、変更点が表示されます。

Preview  ./claude-lock.json

± Name                        Plan
~ ./agents/az900-quiz-bot.md  update     agent_01GCfaZCGB3cct6Na8HtsUNu
    ~ system: あなたはMicrosoft Learn MCPサーバーを使ってAZ-900(Azure Fundamentals)の練習問題を作成する学習アシスタントです。Microsoft
        Learnの最新の公式ドキュメントを参照し、選択式の問題を1問ずつ出題してください。⏎たまにAWSの試験問題も紛れ込ませてください。⏎⏎ルール:⏎-
        問題文と選択肢を提示したら、ユーザーが回答するまで正解を明かさない。⏎-
        ユーザーの回答後、正誤を伝え、各選択肢について正誤のポイントを1行ずつで説明する。⏎- 学習の参考になるMicrosoft
        Learnドキュメントの実在するURLを3つ提示する …18 words…

Resources  ~ 1 to update · 1 unchanged

リソースの削除の検知はありますが、Managed Agents環境側は勝手には削除されません。
agentsファイル以下を削除した場合はこのような動作となり、警告は出ますが、自動での削除はされません。

Preview  ./claude-lock.json
warning: ./agents/az900-quiz-bot.md is in the lockfile but was not loaded this run; pass --prune to remove it, or name it on the command line to keep it tracked

Everything is up to date.

Resources  1 unchanged

削除する場合は、--pruneオプションを明示的に指定します。

ant apply . --dry-run --prune
Preview  ./claude-lock.json

± Name                        Plan
- ./agents/az900-quiz-bot.md  archive    agent_01GCfaZCGB3cct6Na8HtsUNu

Resources  - 1 to remove · 1 unchanged

applyで作れるもの、作れないもの

この節はClaudeに聞いて書いてもらいました。

ドキュメントにはエージェント・環境・メモリストア・デプロイメント・スキルの5種類と書いてあります。ほんとに5種類だけなのか、typeを適当に変えて総当たりしてみました。

unknown type "vault" (expected one of skill, environment, memory_store, agent, deployment)

エラーメッセージが仕様を教えてくれました。5種類だけです。ちなみにスキルだけは単一ファイルで宣言できません。

./probe.yaml: skill resources cannot be declared in a file

skills/<name>/SKILL.mdのディレクトリ丸ごと1バンドル、という扱いです。

逆に作れないもの。セッション、セッションイベント、Files、メモリストアの中身、Vault、トンネル、それとbeta:organization配下の管理系(ワークスペース、APIキー、ユーザー、フェデレーション設定など)は全部対象外でした。「エージェントを動かすための静的な設定」だけがapplyの守備範囲で、実行・データ・組織管理は命令的なコマンド側、という線引きになっています。シークレットをリポジトリに置かせない設計とも読めます。

CFnじゃなくてTerraform

この節はClaudeに聞いて書いてもらいました。

ここまでやって思ったのは、これCloudFormationっぽいな、でした。が、よく見ると状態の持ち方が逆です。

ant apply CloudFormation Terraform
定義 agents/*.mdなど テンプレート .tf
状態 claude-lock.json(手元、コミットする) スタック(AWS側) tfstate
事前確認 プラン表示→y/n/d Change Set terraform plan
手動変更 remote_hashで検知して中断 ドリフト検出 plan時に差分

状態が手元のファイルにあって、それをコミットして共有する。Terraformです。

CFnとの一番大きな違いはロールバックがないところ。更新が途中で失敗してもスタックごと巻き戻ったりはせず、部分適用がそのまま残ります。だからドキュメントにも「CIでapplyが失敗してもclaude-lock.jsonは必ずコミットしろ」と書いてあります。あとファイルを消してもリソースは消えません(警告だけ出て、--pruneで初めてarchive)。事故防止に倒した設計だと思います。

一番気をつけたいのはimportがないこと。コンソールで作ったリソースをあとから取り込むことはできなくて、同じ内容のファイルをapplyすると2つ目が作られます。コンソールのExport as codeでダウンロードするとclaude-lock.jsonごと落ちてくるので、既存のものを移行するときはそっちを起点にするのが正解です。

まとめ

この節は人力で書きました。1行ですが

もともとそんなに色々設定があるわけではないので、スクリプトを組めばいいレベルでしたが、公式サポートは嬉しいですね!

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?