ops について
AEM Edge Delivery Services プロジェクトの管理者向けに、自然言語で運用タスクを実行するスキルです。コンテンツや設定、アクセス権、インデックスなどを扱い、機密操作には認証と確認手順を設けています。
主な機能
- 01自然言語による管理コマンド
- 02コンテンツとキャッシュの操作
- 03コード、インデックス、サイトマップ管理
- 04ユーザー、ジョブ、サイト設定
- 05シークレット、APIキー、トークン管理
- 06破壊的操作の確認
活用シーン
- 01コンテンツパスのプレビューや公開
- 02サイトユーザーとロールの管理
- 03ジョブ、ログ、インデックス済みページの確認
- 04設定や認証情報の更新
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ adobe/ skills --skill opsインストール後、Claude Code で/opsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.releaserc.jsonCHANGELOG.mdpackage.jsonREADME.mdresources/apikeys.mdcache.mdcode.mdconfig-api.mdconfig.mdcontent.mdda.mderrors.mdindex-config.mdindex.mdjobs.mdlogs.mdpages.mdprofiles.mdsecrets.mdsecurity.mdsensitive.mdsitemap-config.mdsitemap.mdsites.mdsnapshots.mdtokens.mdusers.mdversioning.md詳細
Edge Delivery Services の管理操作
自然言語コマンドを使用して、AEM Edge Delivery Services プロジェクトの管理操作を実行します。
クイックリファレンス
| カテゴリ | 例 |
|---|---|
| コンテンツ | preview /path、publish /path、unpublish /path、status /path |
| キャッシュ | clear cache /path、force clear cache |
| コード | sync code、deploy code |
| インデックス | reindex /path、remove from index |
| サイトマップ | generate sitemap |
| スナップショット | create snapshot X、publish snapshot X、approve snapshot X |
| ログ | show logs、show logs last hour |
| ユーザー | add user@email as author/publish/develop、remove admin user@email、who am i |
| ジョブ | list jobs、job status X、stop job X |
| サイト | list sites、switch to site-X、use branch feature-X |
| 設定 | show org config、show site config、update robots.txt |
| シークレット | list secrets、create secret、delete secret |
| API キー | list API keys、create API key、revoke API key |
| トークン | list tokens、create token、revoke token |
| プロファイル | show profile config、create profile、delete profile |
| インデックス設定 | show index config、update index config (query.yaml) |
| サイトマップ設定 | show sitemap config、update sitemap config (sitemap.yaml) |
| バージョン管理 | list versions、restore version、rollback config |
| ページ | list pages、list all pages、show indexed pages |
| DA(ドキュメント作成) | da list、da source /path、da copy、da move、da delete、da config、da update config、da versions、da create version、da upload media、da auth |
コミュニケーションガイドライン
- どのような応答でも、Edge Delivery Services の略語として「EDS」を絶対に使用しないでください
- 常に正式名称「Edge Delivery Services」または「AEM Edge Delivery Services」を使用してください
- 操作が失敗した場合は、明確で実行可能なエラーメッセージを表示してください
- 破壊的な操作を実行する前に確認してください。
resources/security.mdを参照してください
ウェルカムメッセージ
ユーザーが特定のコマンドを指定せずにスキルを呼び出した場合(例:/ops のみ、または「opsについて教えて」)、次を表示します。
Edge Delivery Services Operations
Quick commands to try:
list pages - Show all indexed pages
who am i - Check your user profile
list sites - Show available sites
show site config - View site configuration
preview /path - Preview a content path
show logs - View recent activity
For the full command list: type help, /ops help, or what can you do?
クロスプラットフォームに関する注意
シェルコマンドは POSIX 互換の構文を使用します(macOS/Linux で動作します)。Windows では、Git Bash または WSL をそのまま使用できます。エージェントはユーザーの環境に合わせて構文を調整してください。
インテントルーター
Step 0:組織とサイトを取得する(最初に必ず実行)
以前に保存した組織とサイトを ~/.aem/ops-config.json で確認します。
eval $(node -e "
const fs = require('fs');
try {
const c = JSON.parse(fs.readFileSync(process.env.HOME + '/.aem/ops-config.json', 'utf8'));
console.log('ORG=' + JSON.stringify(c.org || ''));
console.log('SITE=' + JSON.stringify(c.site || ''));
} catch(e) {
console.log('ORG='); console.log('SITE=');
}
")
echo "org=${ORG:-NOT SET} site=${SITE:-NOT SET}"
ORG と SITE の両方が設定されている場合は、ユーザーに確認します。
"以前に使用した値:org=
{ORG}、site={SITE}。これらを引き続き使用しますか?使用しない場合は、別のサイト URL を指定してください(例:https://main--mysite--myorg.aem.page/)。"
- ユーザーが確認した場合 → 続行します
- ユーザーが URL を指定した場合 → URL から org と site を解析し、新しい値を保存します
ORG または SITE が空の場合は、次のように尋ねます。
"操作を実行するサイトのプレビュー URL またはライブ URL を入力してください(例:
https://main--mysite--myorg.aem.page/)。"
URL から org と site を解析します。
URL="$USER_INPUT"
if echo "$URL" | grep -q '\.aem\.page\|\.aem\.live'; then
HOST_PART=$(echo "$URL" | cut -d'/' -f3 | cut -d'.' -f1)
ORG=$(echo "$HOST_PART" | awk -F'--' '{print $NF}')
SITE=$(echo "$HOST_PART" | awk -F'--' '{print $(NF-1)}')
echo "Parsed from URL: org=$ORG site=$SITE"
fi
ユーザーが有効な .aem.page または .aem.live URL 以外を指定した場合は、もう一度尋ねます。
org と site を保存します。
mkdir -p "${HOME}/.aem"
node -e "
const fs = require('fs');
const p = process.env.HOME + '/.aem/ops-config.json';
let c = {};
try { c = JSON.parse(fs.readFileSync(p, 'utf8')); } catch(e) {}
c.org = '${ORG}';
c.site = '${SITE}';
fs.writeFileSync(p, JSON.stringify(c, null, 2));
"
org/site には、~/.aem/ops-config.json またはユーザーから直接入力された値のみを使用します。git remote、fstab.yaml、フォルダー名やリポジトリ名から推測しないでください。
org と site の両方が確認されるまで、続行しないでください。
Step 1:認証する(必須)
API 呼び出しを行う前に必ず、認証トークンがあるか確認します。
AUTH_TOKEN=$(node -e "
const fs = require('fs');
try {
const t = JSON.parse(fs.readFileSync(process.env.HOME + '/.aem/ims-token.json', 'utf8'));
if (t.authToken && t.authTokenExpiry > Math.floor(Date.now()/1000) + 60) {
process.stdout.write(t.authToken);
}
} catch (e) {}
")
echo "auth=${AUTH_TOKEN:+set}"
AUTH_TOKEN が空の場合は、続行する前に認証スキルを呼び出します。
Skill({ skill: "aem-project-management:auth" })
すべての admin.hlx.page API 呼び出しに、-H "x-auth-token: ${AUTH_TOKEN}" ヘッダーを使用します。
機密性の高いエンドポイントや破壊的な操作については、続行する前に resources/security.md と resources/sensitive.md を読んでください。
ステップ 2:完全な設定を読み込み、ロールを確認する
eval $(node -e "
const fs = require('fs');
try {
const c = JSON.parse(fs.readFileSync(process.env.HOME + '/.aem/ops-config.json', 'utf8'));
console.log('ORG=' + JSON.stringify(c.org || ''));
console.log('SITE=' + JSON.stringify(c.site || ''));
console.log('REF=' + JSON.stringify(c.ref || 'main'));
} catch(e) {
console.log('ORG='); console.log('SITE='); console.log('REF=main');
}
")
AUTH_TOKEN=$(node -e "
const fs = require('fs');
try {
const t = JSON.parse(fs.readFileSync(process.env.HOME + '/.aem/ims-token.json', 'utf8'));
process.stdout.write(t.authToken || '');
} catch (e) {}
")
echo "Config: org=$ORG site=$SITE ref=$REF auth=${AUTH_TOKEN:+set}"
認証を確認し、ユーザーの本人情報を記録するため、プロフィールを取得します。
PROFILE_RESPONSE=$(curl -s -w "\n%{http_code}" \
-H "x-auth-token: ${AUTH_TOKEN}" \
"https://admin.hlx.page/profile")
HTTP_CODE=$(echo "$PROFILE_RESPONSE" | tail -n1)
PROFILE=$(echo "$PROFILE_RESPONSE" | sed '$d')
if [ "$HTTP_CODE" = "401" ]; then
echo "Auth token expired. Need to re-authenticate..."
echo "REAUTH_REQUIRED"
exit 1
elif [ "$HTTP_CODE" != "200" ]; then
echo "Failed to fetch profile (HTTP $HTTP_CODE). Check network/API status."
exit 1
fi
eval $(echo "$PROFILE" | node -e "
const d = require('fs').readFileSync(0,'utf8');
try {
const p = JSON.parse(d).profile || {};
console.log('USER_EMAIL=' + JSON.stringify(p.email || ''));
console.log('USER_NAME=' + JSON.stringify(p.name || ''));
} catch(e) { console.log('USER_EMAIL=\"\"'); console.log('USER_NAME=\"\"'); }
")
echo "Authenticated as: $USER_EMAIL ($USER_NAME)"
REAUTH_REQUIRED が返された場合は、認証スキルを呼び出して再試行します。
サイト上でのユーザーのロールを確認するには、サイトのアクセス設定を確認します。
curl -s -H "x-auth-token: ${AUTH_TOKEN}" \
"https://admin.hlx.page/config/${ORG}/sites/${SITE}.json"
操作で 403 が返された場合は、必要なロールをユーザーに伝えます。
| 権限 | 必要なロール |
|---|---|
| プレビュー | basic_author、author、publish、または admin |
| ライブ環境への公開 | basic_publish、publish、または admin |
| 公開の取り消し | publish または admin |
| コードの同期 | develop または admin |
| 設定の読み取り | config、config_admin、または admin |
| 設定の書き込み | config_admin または admin |
| スナップショットの管理 | author、publish、または admin |
今後使用するため、email を ~/.aem/ops-config.json に保存します。
サイトやその他の値が不足している場合は、resources/config.md を読みます。
ステップ 3:意図に応じて振り分ける
| ユーザーの意図 | リソースモジュール |
|---|---|
| プレビュー、公開、公開の取り消し、ステータス、プレビューの削除 | resources/content.md |
| キャッシュ、パージ、キャッシュのクリア、無効化 | resources/cache.md |
| コードの同期、コードのデプロイ、コードの更新 | resources/code.md |
| 再インデックス、インデックス、インデックスからの削除、検索 | resources/index.md |
| サイトマップ、サイトマップの生成 | resources/sitemap.md |
| スナップショット、ステージング済みリリース、バンドル | resources/snapshots.md |
| ログ、監査、アクティビティ | resources/logs.md |
| ユーザー、アクセス、権限、自分のユーザー情報、ユーザーの追加、ユーザーの削除 | resources/users.md |
| ジョブ、一括操作、ジョブの停止 | resources/jobs.md |
| サイト、ブランチ、切り替え、サイト一覧 | resources/sites.md |
| 組織設定、サイト設定、robots.txt | resources/config-api.md |
| シークレット、シークレットの作成、シークレットの削除 | resources/secrets.md |
| API キー、apikey、キーの作成、キーの取り消し | resources/apikeys.md |
| トークン、アクセストークン | resources/tokens.md |
| プロフィール設定、プロフィールの設定 | resources/profiles.md |
| インデックス設定、helix-index、検索設定 | resources/index-config.md |
| サイトマップ設定、helix-sitemap、サイトマップルール | resources/sitemap-config.md |
| バージョン、履歴、ロールバック、復元 | resources/versioning.md |
| ページ、ページ一覧、インデックス済みページ、すべてのページ | resources/pages.md |
| da、da の一覧、da のソース、da のコピー、da の移動、da の削除、da の設定、da のバージョン | resources/da.md |
| 破壊的操作、確認が必要な操作 | resources/security.md |
| 機密性の高いエンドポイント(メールアドレス、認証情報、API キー) | resources/sensitive.md |
ステップ 4:リソースを読み、実行する
resources/から適切なリソースファイルを読みます- そのリソースの指示に従います
- 設定を更新する場合:必ず最初に現在の設定を GET で取得し、変更する前にユーザーに表示します
- コードを同期する場合:同期する前に必ず repoless のステータスを確認します(
code.mdを参照) - 破壊的操作を行う場合:
resources/security.mdを読み、確認プロトコルに必ず従います(例外なし。操作を述べ、影響を説明し、「yes/no」と尋ね、「yes」の後にのみ実行します) - API 呼び出しを実行します
- 以下の完了基準に従って応答を処理します
完了基準
| HTTP レスポンス | 意味 | 必須の対応 |
|---|---|---|
| 200/201 | 成功 | 完全な URL(https://{ref}--{site}--{org}.aem.page{path})とともに結果を表示します |
| 202 | 非同期ジョブを開始 | ジョブ名を伝え、進捗を追跡するには check job status {jobName} と入力するよう案内します |
| 204 | 成功(レスポンス本文なし) | 「{path} の {action} が完了しました」と確認します |
| 4xx/5xx | エラー | API エラーをそのまま表示し、resources/errors.md に従って解決策を提案します |
成功を報告する前に:
- コンテンツ操作の場合:該当する場合はプレビュー URL とライブ URL の両方を含めます
- 一括操作の場合:ジョブが完了するまでは「公開しました」や「プレビューしました」と言わず、「ジョブを開始しました」と伝えます
- 破壊的操作の場合:何が削除され、何が残っているかを確認します
URL 解析ヘルパー
ユーザーが組織/サイト/パスの値を個別に指定せず、AEM URL を指定した場合:
# Pattern: https://{ref}--{site}--{org}.aem.page{path}
URL="$USER_INPUT"
if echo "$URL" | grep -q '\.aem\.page\|\.aem\.live'; then
DOMAIN=$(echo "$URL" | cut -d'/' -f3)
HOST_PART=$(echo "$DOMAIN" | cut -d'.' -f1)
REF=$(echo "$HOST_PART" | awk -F'--' '{print $1}')
ORG=$(echo "$HOST_PART" | awk -F'--' '{print $NF}')
SITE=$(echo "$HOST_PART" | awk -F'--' '{
r=""; for(i=2;i<NF;i++) r=(r==""?"":r"--")$i; print r
}')
URL_PATH=$(echo "$URL" | sed 's|https://[^/]*||')
URL_PATH=${URL_PATH:-/}
echo "Parsed from URL: org=$ORG site=$SITE ref=$REF path=$URL_PATH"
fi
例:uat--hmns-uat-kw--alshaya-axp.aem.page → ref=uat、site=hmns-uat-kw、org=alshaya-axp。
前提条件
- Admin Service へのオンボーディング済み — プロジェクトに admin.hlx.page へのアクセス権が必要です
- ユーザーがアカウントを持っている — 認証に必要です(フェデレーションログインに対応)
- ユーザーにサイトロールがある — サイト設定(
access.admin.role)で定義されるロールです。ロールは 8 種類あります:admin、author、publish、develop、basic_author、basic_publish、config、config_admin。ユーザーにロールがない場合、API は 403 を返します。 - ネットワークアクセス — admin.hlx.page に接続できること
ヘルプレスポンス
ユーザーがコマンド一覧を求めた場合(トリガー:help、what can you do?、/ops help、list commands):
Content Operations:
preview /path - Update preview
publish /path - Publish to live
unpublish /path - Remove from live
status /path - Check preview/live status
Cache Operations:
clear cache /path - Purge CDN cache
force clear cache - Force purge
Code Operations:
sync code - Deploy latest code
Index Operations:
reindex /path - Re-index for search
Sitemap:
generate sitemap - Create sitemap.xml
Snapshots:
create snapshot {name} - Create staged release
publish snapshot {name}- Publish all in snapshot
Logs:
show logs - View recent logs
show logs last hour - Filtered by time
Users:
add user@email as role - Grant access
remove role user@email - Revoke access
who am i - Current user
Jobs:
list jobs - Show bulk operations
stop job {name} - Cancel job
Sites:
list sites - Show all sites
switch to site-x - Change active site
use branch feat-x - Set branch
Config:
show org config - View org settings
show site config - View site settings
update robots.txt - Modify crawler rules
Secrets:
list secrets - Show secrets
create secret {name} - Add new secret
delete secret {name} - Remove secret
API Keys:
list API keys - Show API keys
create API key {name} - Generate new key
revoke API key {id} - Delete key
Profiles:
show profile config - View profile settings
create profile {id} - Create profile config
delete profile {id} - Remove profile config
Index Config:
show index config - View query.yaml
update index config - Modify indexing rules
Sitemap Config:
show sitemap config - View sitemap.yaml
update sitemap config - Modify sitemap rules
Versioning:
list versions - Show config history
restore version {id} - Rollback to version
Pages:
list pages - Show all indexed pages
list pages /blog - Filter by path prefix
Document Authoring (DA):
da auth - Authenticate with DA
da list - List DA organizations
da list /path - List files in DA path
da source /path - Get file content from DA
da copy /src to /dest - Copy file/folder in DA
da move /src to /dest - Move/rename in DA
da delete /path - Delete from DA
da upload /path - Upload content to DA
da upload media /path - Upload image/media to DA
da config - View DA site config
da update config - Update DA site config
da versions /path - List file versions
da create version - Create labeled version snapshot
da restore version X - Restore a previous version
da preview /path - Preview DA content
da publish /path - Publish DA content