mcpField
H
handover-developer

handover-developer

github.com/adobeドキュメント316721 回インストール今日更新
リポジトリ

handover-developer について

AEM Edge Delivery Services のコードベースを分析し、開発者向け技術ガイドと PDF を作成するスキルです。保守や拡張を担う開発者向けに、アーキテクチャ、デザインシステム、カスタムブロック、スクリプト、モデル、テンプレートを記録します。

主な機能

  1. 01プロジェクト構成と設定の分析
  2. 02カスタムブロックとテンプレートの記録
  3. 03デザイントークンとフォントの整理
  4. 04スクリプトと依存関係の調査
  5. 05開発者ガイドと PDF の生成

活用シーン

  1. 01開発チーム向けの技術引き継ぎを準備
  2. 02カスタムブロックとサイト構成を文書化
  3. 03AEM プロジェクトの保守ガイドを作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/adobe/skills --skill handover-developer

インストール後、Claude Code で/handover-developerを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.releaserc.json
CHANGELOG.md
package.json
resources/
developer-guide-template.md

詳細

プロジェクトの引き継ぎ - 開発

開発者向けの包括的な技術ガイドを生成します。コードベースを分析し、開発者がプロジェクトを理解、保守、拡張するために役立つ実践的なドキュメントを作成します。


ステップ 0:プロジェクトルートへ移動(条件付き)

.claude-plugin/project-config.json で allGuides が設定されている場合はスキップします(オーケストレーターによる検証は完了しています)。

ALL_GUIDES=$(cat .claude-plugin/project-config.json 2>/dev/null | node -e "
  const d = require('fs').readFileSync(0,'utf8');
  try { console.log(JSON.parse(d).allGuides ? 'true' : ''); } catch(e) { console.log(''); }
")
if [ -z "$ALL_GUIDES" ]; then
  cd "$(git rev-parse --show-toplevel)"
  ls scripts/aem.js
fi

scripts/aem.js が存在しない場合は、このスキルには AEM Edge Delivery Services プロジェクトが必要であることをユーザーに伝え、終了します。

以降のすべてのステップはプロジェクトルートから実行します。ガイドは project-guides/ に作成します。


実行チェックリスト

- [ ] Phase 0: Get org name and authenticate
- [ ] Phase 1: Gather project information
- [ ] Phase 2: Analyze project architecture
- [ ] Phase 3: Document design system
- [ ] Phase 4: Document blocks, models, and templates
- [ ] Phase 5: Generate PDF

フェーズ 0:組織名の取得と認証

0.1 保存済みの組織名を確認する
cat .claude-plugin/project-config.json 2>/dev/null | node -e "
  const d = require('fs').readFileSync(0,'utf8');
  try { const o = JSON.parse(d).org; if(o) console.log('org: ' + o); } catch(e) {}
"
0.2 組織名を尋ねる(未保存の場合)

組織名が見つからない場合は、ユーザーに尋ねます。

「Config Service の組織名を教えてください。これは Edge Delivery Services の URL における {org} の部分です(例:https://main--site--{org}.aem.page)。組織名は GitHub の組織名と異なる場合があります。」

選択肢付きの AskUserQuestion ではなく、プレーンテキストで質問します。組織名は必須です。

0.3 組織名を保存する
mkdir -p .claude-plugin
grep -qxF '.claude-plugin/' .gitignore 2>/dev/null || echo '.claude-plugin/' >> .gitignore

if [ -f .claude-plugin/project-config.json ]; then
  cat .claude-plugin/project-config.json | sed 's/"org"[[:space:]]*:[[:space:]]*"[^"]*"/"org": "{ORG_NAME}"/' > /tmp/project-config.json && mv /tmp/project-config.json .claude-plugin/project-config.json
else
  echo '{"org": "{ORG_NAME}"}' > .claude-plugin/project-config.json
fi

{ORG_NAME} を実際の組織名に置き換えます。

0.4 認証トークンを確認する
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) {}
")

if [ -z "$AUTH_TOKEN" ]; then
  echo "AUTH_REQUIRED"
fi

AUTH_REQUIRED の場合は、認証スキルを呼び出します。

Skill({ skill: "aem-project-management:auth" })

フェーズ 1:プロジェクト情報を収集する

1.1 プロジェクト URL とリポジトリを取得する
git remote -v | head -1
git branch -a | head -10

次の情報を抽出します:リポジトリの所有者、リポジトリ名、メインブランチ名。

1.2 設定方法を確認する
ls helix-config.yaml 2>/dev/null && echo "Uses legacy helix-config" || echo "Uses Config Service (modern)"
1.3 Config Service API を使ってサイトを取得する

サイト情報の信頼できる唯一の情報源は Config Service API です。fstab.yaml、README、git のリモート URL は使用しないでください。

ORG=$(cat .claude-plugin/project-config.json | node -e "
  const d = require('fs').readFileSync(0,'utf8');
  console.log(JSON.parse(d).org || '');
")
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) {}
")

curl -s -H "x-auth-token: ${AUTH_TOKEN}" -H "Accept: application/json" \
  "https://admin.hlx.page/config/${ORG}/sites.json" > .claude-plugin/sites-config.json

node -e "
  const d = require('fs').readFileSync('.claude-plugin/sites-config.json', 'utf8');
  const j = JSON.parse(d);
  if (!j.sites || !j.sites.length) {
    console.error('No sites returned — verify org name and re-authenticate if needed');
    process.exit(1);
  }
  console.log('Found ' + j.sites.length + ' site(s): ' + j.sites.map(s => s.name).join(', '));
"

検証に失敗した場合は、組織名が正しいことを確認し、再認証してから再試行します。

サイトごとの設定を取得します。

curl -s -H "x-auth-token: ${AUTH_TOKEN}" \
  "https://admin.hlx.page/config/${ORG}/sites/{site-name}.json"

次の情報を抽出します:code.owner、code.repo、content.source.url、content.source.type。

複数のサイトがある場合は repoless セットアップ、単一のサイトの場合は標準セットアップです。この情報を記録してください。aem up のローカル開発手順に影響します。

1.4 Node.js の要件を確認する
cat .nvmrc 2>/dev/null || cat package.json | grep -A2 '"engines"'

フェーズ 2:プロジェクトのアーキテクチャを分析する

サイト設定を読み込みます。

cat .claude-plugin/sites-config.json
2.1 プロジェクト構造を把握する
ls -la && ls -la blocks/ && ls -la scripts/ && ls -la styles/
ls -la templates/ 2>/dev/null || echo "No templates folder"
2.2 ボイラープレートとカスタムファイルを特定する

実際にカスタマイズされたファイルのみをドキュメントに記載します。

git log --oneline --follow {file_path} | head -5
git log --format="%an - %s" --follow {file_path} | head -5
Git の履歴対応
「Initial commit」のみスキップ — ボイラープレートのデフォルトであり、作業されたことがない
aem-aemy[bot] によるコミットのみスキップ — 自動生成されたもの
チームによる複数のコミット記載 — カスタマイズ済み
2.3 scripts/aem.js を分析する(コアライブラリ)
grep -E "^export" scripts/aem.js

プロジェクトが aem.js からインポートしている関数(例:sampleRUM、loadHeader、loadFooter、decorateBlock、loadBlock、loadCSS)を記載します。

2.4 scripts/scripts.js を分析する
grep -E "^import|^export|^function|^async function|buildAutoBlocks|loadTemplate|getLanguage|getSiteRoot|decorateMain|loadEager|loadLazy|loadDelayed" scripts/scripts.js

次の項目を記載します。

パターン記載する内容
import 文aem.js および utils.js からインポートしているもの
loadEager / loadLazyE-L-D フェーズに追加されたカスタムロジック
buildAutoBlocks自動ブロック化のロジック
loadTemplate / テンプレート処理テンプレートシステム
getLanguage / 言語検出多言語設定
getSiteRoot / サイト検出マルチサイト設定
外部スクリプトの読み込み読み込みフェーズ — eager にある場合はフラグを付ける(パフォーマンスリスク)
2.5 scripts/delayed.js を分析する
grep -E "^import|function|google|analytics|gtag|alloy|martech|OneTrust|launch|chatbot|widget" scripts/delayed.js

分析、マーケティングツール、パフォーマンス監視との連携を記載します。レンダリングに不可欠なコードがこのファイルにないことを確認します。

2.6 ユーティリティ関数を確認する
grep -E "^export|^function" scripts/utils.js 2>/dev/null || echo "No utils.js"
ls scripts/*.js
grep -rl "utils.js" blocks/ scripts/ 2>/dev/null

共有ユーティリティ関数と、それらをインポートしているブロックやスクリプトを記載します。

2.7 外部依存関係を確認する
grep -A 20 '"dependencies"' package.json 2>/dev/null | head -25
grep -r "cdn\|unpkg\|jsdelivr" scripts/ blocks/ --include="*.js" 2>/dev/null

フェーズ 3:デザインシステムをドキュメント化する

3.1 CSS カスタムプロパティを抽出する
grep -E "^\s*--" styles/styles.css

タイポグラフィ、色、間隔、レイアウトのカテゴリに分類します。

3.2 フォントの設定を記載する
grep -E "@font-face|font-family|font-weight|src:" styles/fonts.css 2>/dev/null
ls fonts/ 2>/dev/null

次の項目を記載します:フォントファイルと形式、ファミリー名、ウェイト、フォールバックフォント。

3.3 ドキュメントのブレークポイント
grep -E "@media.*min-width|@media.*max-width" styles/styles.css | sort -u

標準のブレークポイント:モバイル 600px 未満、タブレット 600〜899px、デスクトップ 900px 以上、大画面 1200px 以上です。異なる設定がある場合は記録してください。

3.4 セクションスタイルのドキュメント化
grep -A 5 "\.section\." styles/styles.css
grep -A 5 "\.section\[" styles/styles.css

フェーズ 4:ブロック、モデル、テンプレートのドキュメント化

ボイラープレートのフィルタリング

サイレントに実行してください。ユーザーには出力を表示しないでください。

  • 含める項目:コミットが 2 件以上あり、少なくとも 1 件が「Initial commit」より後にある項目
  • 除外する項目:「Initial commit」のみ、または aem-aemy[bot] によるコミットのみの項目
4.1 カスタマイズされたブロックの特定と分析
head -30 blocks/{blockname}/{blockname}.js
grep -E "^\." blocks/{blockname}/{blockname}.css | head -30
grep -E "classList\.contains|classList\.add" blocks/{blockname}/{blockname}.js

カスタマイズされた各ブロックについて、以下を記録してください。

項目記録する内容
名前ブロックのフォルダー名
目的ブロックの機能
DOM 入力CMS から想定される HTML 構造
DOM 出力装飾後の変換された構造
バリアント動作を変更する CSS クラス
依存関係外部ライブラリ、他のブロック、ユーティリティ
4.2 Universal Editor モデルのドキュメント化(カスタマイズされている場合)

models/*.json にボイラープレートのフィルタリングを適用します。変更されていない標準のボイラープレートモデル(_page.json、_section.json、_button.json、_image.json、_text.json、_title.json)は除外してください。すべてのモデルがボイラープレートの場合は、このセクションを省略してください。

4.3 カスタマイズされたテンプレートのドキュメント化

templates/*/ にボイラープレートのフィルタリングを適用します。カスタマイズされた各テンプレートについて、目的、適用方法(メタデータ内の template: name)、および変更内容を記録してください。


フェーズ 5:開発者ガイドの生成

5.1 出力ファイル

project-guides/DEVELOPER-GUIDE.md に保存します(最初に mkdir -p project-guides を実行してください)。

resources/developer-guide-template.md を読み、ドキュメント全体の構成を確認してください。フェーズ 1〜4 で収集したデータを使ってすべてのセクションを埋め、すべての [placeholder] をプロジェクトの実際の値に置き換えてください。

5.2 プロフェッショナルな PDF への変換

完成した Markdown を、YAML フロントマター(タイトル、完全な日付形式(例:「February 17, 2026」)の日付を含む)とともに project-guides/DEVELOPER-GUIDE.md に保存します。その後、直ちに PDF 変換を実行してください。

Skill({ skill: "aem-project-management:whitepaper", args: "project-guides/DEVELOPER-GUIDE.md project-guides/DEVELOPER-GUIDE.pdf" })

ホワイトペーパーのスキルによってソースファイルは自動的にクリーンアップされます。最終出力:project-guides/DEVELOPER-GUIDE.pdf。

ユーザーに次のように伝えてください:「開発者ガイドが完成しました:project-guides/DEVELOPER-GUIDE.pdf」


成功基準

カテゴリー確認項目
データソースConfig Service API が呼び出されている(https://admin.hlx.page/config/{ORG}/sites.json)
データソースサイト一覧は fstab.yaml やコードベースの分析ではなく、API のレスポンスから取得している
データソースRepoless/標準の判定はコードから推測せず、Config Service に基づいている
コンテンツすべてのプロジェクト URL を含むクイックリファレンス
コンテンツプロジェクトに即した正確なアーキテクチャの概要
コンテンツデザインシステムを完全に記録している(トークン、フォント、ブレークポイント)
コンテンツプロジェクト固有のブロックを記録している
コンテンツカスタムの scripts.js 関数を記録している
コンテンツdelayed.js の連携を記録している
コンテンツテンプレートを記録している(該当する場合)
コンテンツローカル開発環境のセットアップを検証している
コンテンツ一般的なタスクについて明確な手順がある
コンテンツトラブルシューティングのセクションで一般的な問題を扱っている
出力PDF が project-guides/DEVELOPER-GUIDE.pdf に生成されている
出力すべてのソースファイルがクリーンアップされている(PDF のみが残っている)

コミュニケーション:「EDS」という略語は使用しないでください。出力とドキュメントでは、必ず「Edge Delivery Services」または「AEM Edge Delivery Services」と記載してください。

コメント