ビルドセットアップスキル
SETUP.md — インポート後の設定とコンテンツ置換ガイド — を生成し、NL固有のメタデータでbuild.jsonを更新します。このスキルはbuild-contentの後、ZIPパッケージングの前に実行されます。
入力変数(build-theme と build-content によって設定):
| 変数 | ソース | 説明 |
|---|---|---|
BUILD_DIR | build-scaffold | ビルド作業ディレクトリの絶対パス |
NL_PROMPT | COMMAND.md セクション1 | 元の自然言語サイト記述 |
THEME_SLUG | build-theme | インストールされたテーマのスラッグ |
THEME_NAME | build-theme | 人間が読めるテーマ名 |
THEME_VERSION | build-theme | インストールされたテーマのバージョン文字列 |
THEME_INSTALLED | build-theme | ブール値 — テーマが正常にインストールされた場合はtrue |
INSTALLED_PLUGINS | build-content | 正常にインストールされたプラグインの スラッグ:名前:バージョン の配列 |
FAILED_PLUGINS | build-content | インストールまたはアクティベーションに失敗したプラグインのスラッグの配列 |
PAGES_CREATED | build-content | 作成されたページの整数カウント |
POSTS_CREATED | build-content | 作成された投稿の整数カウント |
MENU_ASSIGNED | build-content | ブール値 — ナビゲーションメニューがテーマのロケーションに割り当てられた場合はtrue |
MENU_LOCATION | build-content | 使用されたテーマロケーション名(割り当てられていない場合は空文字列) |
セクション1: SETUP.mdの生成
利用可能な全てのコンテキスト(インストール済みプラグイン、テーマ、ページ数、NLプロンプト)を使用して $BUILD_DIR/SETUP.md を書き、ユーザーがサイトをLocal WPにインポートした直後に従える優先順位付けされたセットアップガイドを生成します。
echo "[Build] SETUP.mdを生成中..."
# ── インストール済みのものを記述するセクションの構築 ────────────────────────────────────────
SETUP_FILE="$BUILD_DIR/SETUP.md"
# SETUP.mdの書き出し開始
cat > "$SETUP_FILE" << 'SETUP_HEADER'
# セットアップガイド
このガイドは、WordPressサイトをLocal WPにインポートした後に行う設定手順を説明します。項目は優先順位順に並んでいます — 最初に「重要(Critical)」の手順を完了し、その後「重要度中(Important)」と「任意(Optional)」を自分のペースで進めてください。
---
## インストール済みのもの
SETUP_HEADER
# テーマエントリ
echo "- **テーマ:** ${THEME_NAME} (v${THEME_VERSION})" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
# プラグインリスト
if [ ${#INSTALLED_PLUGINS[@]} -gt 0 ]; then
echo "- **プラグイン:**" >> "$SETUP_FILE"
for plugin_entry in "${INSTALLED_PLUGINS[@]}"; do
# フォーマット: スラッグ:名前:バージョン
PLUGIN_SLUG=$(echo "$plugin_entry" | cut -d: -f1)
PLUGIN_NAME=$(echo "$plugin_entry" | cut -d: -f2)
PLUGIN_VER=$(echo "$plugin_entry" | cut -d: -f3)
# Claudeがプラグインのスラッグと名前に基づいて、各プラグインの目的を一行で生成
PLUGIN_PURPOSE="<${PLUGIN_NAME}の機能の一行説明 — Claudeがプラグインの知識から生成>"
echo " - **${PLUGIN_NAME}** (v${PLUGIN_VER}) — ${PLUGIN_PURPOSE}" >> "$SETUP_FILE"
done
echo "" >> "$SETUP_FILE"
fi
# 失敗したプラグイン(ある場合)
if [ ${#FAILED_PLUGINS[@]} -gt 0 ]; then
echo "- **インストールに失敗したプラグイン:**" >> "$SETUP_FILE"
for slug in "${FAILED_PLUGINS[@]}"; do
echo " - ${slug} — ビルド中にインストールを試みましたが失敗しました" >> "$SETUP_FILE"
done
echo "" >> "$SETUP_FILE"
fi
次に、優先順位付けされたアクションリストを作成します。これはAIの判断タスクです — Claudeは、各プラグインの設定ワークフローに関する知識に基づき、NLプロンプトのコンテキストを使って、この特定のサイトにとって最も重要なものを判断して、実際のステップバイステップの指示を生成します。
# ── 次に行うことセクションの構築 ────────────────────────────────────────
cat >> "$SETUP_FILE" << 'SETUP_NEXT'
---
## 次に行うこと(優先順位順)
SETUP_NEXT
# ── 重要(CRITICAL)項目 ────────────────────────────────────────────────────────────
echo "### 重要(Critical)" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
STEP_NUM=1
# 設定が必要な各インストール済みプラグインについて、Claudeが完全なWordPress管理画面のナビゲーションパスを含むステップバイステップの指示を生成します。
# WPForms Liteの例:
#
# echo "${STEP_NUM}. **WPFormsの設定 — お問い合わせフォームを作成**" >> "$SETUP_FILE"
# cat >> "$SETUP_FILE" << 'EOF'
# 移動先: **WPForms > 新規追加**
# 手順:
# 1. 「テンプレートを選択」をクリックし、**シンプルなお問い合わせフォーム** を選択
# 2. 「テンプレートを使用」をクリック — フォームビルダーが開く
# 3. (任意)左パネルからフィールドをドラッグして追加・削除
# 4. 右上の **保存** をクリック
# 5. **ページ > お問い合わせ > 編集** に移動
# 6. 新しいブロックを追加し、「WPForms」を検索してWPFormsブロックを選択
# 7. ドロップダウンから作成したフォームを選択
# 8. **更新** をクリックしてページを保存
# EOF
# STEP_NUM=$((STEP_NUM + 1))
# Claudeは、ユーザー設定が必要なINSTALLED_PLUGINS内の全てのプラグインに対して同等のブロックを生成します。
# 設定なしで動作するプラグイン(例:サイレントでアクティベートされるキャッシュプラグイン)は、「重要度中(Important)」に文書化するか、アクションが不要な場合は省略できます。
# ── お問い合わせページのプレースホルダー置換(常に重要(Critical)) ────────────────────────────────────
echo "${STEP_NUM}. **お問い合わせページのプレースホルダー情報を置換**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'CONTACT_STEP'
移動先: **ページ > お問い合わせ > 編集**
以下のプレースホルダーコンテンツを実際の詳細に置き換えてください:
- ページ見出しにある架空の事業者名
- 架空の住所(例:「123 Example Street, Sample City」)
- 架空の電話番号
- 架空のメールアドレス
- 架空の営業時間や所在地の詳細
CONTACT_STEP
STEP_NUM=$((STEP_NUM + 1))
# ── 重要度中(IMPORTANT)項目 ───────────────────────────────────────────────────────────
echo "" >> "$SETUP_FILE"
echo "### 重要度中(Important)" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
# Aboutページのコンテンツ置換
echo "${STEP_NUM}. **Aboutページのコンテンツを更新**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'ABOUT_STEP'
移動先: **ページ > About > 編集**
以下のプレースホルダーコンテンツを置き換えてください:
- 架空の事業者/人物の名前と経歴
- 架空のチームメンバーの説明
- プレースホルダーのヘッドショットやプロフィール画像(メディアブロックを使ってアップロード)
- 架空の経歴、歴史、または設立ストーリー
ABOUT_STEP
STEP_NUM=$((STEP_NUM + 1))
# Homeページのコンテンツ置換
echo "${STEP_NUM}. **Homeページのヒーローとイントロコンテンツを更新**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'HOME_STEP'
移動先: **ページ > Home > 編集**
以下のプレースホルダーコンテンツを置き換えてください:
- ヒーローの見出しとタグライン(あなたのビジネスや提供内容に合わせて具体的に)
- ヒーローの背景画像や注目画像(カバー/画像ブロックを使ってアップロード)
- あなたの活動内容を説明する導入パラグラフ
- 任意のコールトゥアクションボタンのラベルとリンク
HOME_STEP
STEP_NUM=$((STEP_NUM + 1))
# サイトタイプに基づく追加ページ — Claudeは、Home、About、Contact以外のPAGES_CREATED内の各ページに対して、ページ固有のガイダンスを生成します。例:
#
# Portfolioページ:
# echo "${STEP_NUM}. **制作実績をPortfolioページに追加**" >> "$SETUP_FILE"
# ...
# STEP_NUM=$((STEP_NUM + 1))
#
# Servicesページ:
# echo "${STEP_NUM}. **実際のサービス内容でServicesページを更新**" >> "$SETUP_FILE"
# ...
# STEP_NUM=$((STEP_NUM + 1))
#
# ClaudeはNL_PROMPTのコンテキストを使用して、どの追加ページが存在し、それらにどのようなプレースホルダーコンテンツが含まれているかを判断し、ターゲットを絞ったガイダンスを作成します。
# 重要度中(Important)(重要(Critical)ではない)に該当する追加のプラグイン設定
# Claudeは、設定が必要だが未設定でもサイトが壊れないプラグイン(例:SEOプラグイン設定、ギャラリー設定)の手順をここに追加します
# ── 任意(OPTIONAL)項目 ────────────────────────────────────────────────────────────
echo "" >> "$SETUP_FILE"
echo "### 任意(Optional)" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
# サンプル投稿の置換
echo "${STEP_NUM}. **実際のブログ投稿を追加してサンプルコンテンツを置換**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'POSTS_STEP'
サンプル投稿は、テーマがブログコンテンツをどのように表示するかを示しています。これらは、サイトのテーマに関連した現実的でありながら架空のトピックを使用しています。
移動先: **投稿 > すべての投稿** で既存のサンプルを編集するか、新しいものを追加してください。
自分のコンテンツを公開したら、サンプル投稿を削除できます。
POSTS_STEP
STEP_NUM=$((STEP_NUM + 1))
# プレースホルダー画像の置換
echo "${STEP_NUM}. **プレースホルダー画像を自分の写真に置換**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'IMAGES_STEP'
レイアウトの意図を示すために、ビルド中に単色のプレースホルダー画像が生成されました。これらを実際の画像に置き換えてください:
移動先: **メディア > 新規追加** で写真をアップロード
その後、各ページ/投稿を編集し、プレースホルダー画像ブロックをアップロードしたものに差し替えます。
IMAGES_STEP
STEP_NUM=$((STEP_NUM + 1))
# メニュー割り当て(自動割り当てされていない場合 — FSEブロックテーマのエッジケース)
if [ "$MENU_ASSIGNED" = "false" ] || [ "$MENU_ASSIGNED" = "" ]; then
echo "${STEP_NUM}. **サイトエディターでナビゲーションメニューを割り当て**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'MENU_STEP'
ナビゲーションメニューはビルド中に作成されましたが、テーマロケーションに自動的に割り当てることができませんでした(ブロックテーマでは想定内です)。
移動先: **外観 > エディター > ナビゲーション**
「プライマリメニュー」を選択し、ヘッダーナビゲーションエリアに配置してください。
MENU_STEP
STEP_NUM=$((STEP_NUM + 1))
fi
# SETUP.mdの終了
echo "---" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
echo "*WordPress Expert Plugin — CoWork Build Systemによって生成されました*" >> "$SETUP_FILE"
SETUP_ITEM_COUNT=$((STEP_NUM - 1))
echo "[Build] SETUP.mdを生成しました (${SETUP_ITEM_COUNT}個のセットアップ項目)"
Claudeのための実装メモ:
- プラグインの指示はAIの判断タスクです。 各
INSTALLED_PLUGINS内のプラグインに対して、Claudeはそのプラグインの設定ワークフローに関する知識を使用して、詳細なステップバイステップの指示を生成します。指示には完全なWP管理画面ナビゲーションパスを含める必要があります(例:「WPForms > 新規追加 > お問い合わせフォームテンプレートを選択 > 保存 > ショートコードをコピー > お問い合わせページを編集 > ショートコードブロックを追加」に移動)。 - コンテキストが優先順位を決定します。 Claudeは
NL_PROMPTを読み、どのセットアップ項目を「重要(Critical)」と「重要度中(Important)」に分類するかを判断します。写真ポートフォリオサイトの場合、ポートフォリオ画像の置換は「重要(Critical)」です。レストランの場合、予約プラグインの設定が「重要(Critical)」です。 - ページごとの網羅。 build-contentによって作成された全てのページに、含まれるプレースホルダーコンテンツに関する具体的なガイダンスを記載した専用エントリが作成されます。
- 汎用的な指示はありません。 全てのガイダンスはプラグインとサイトタイプに固有のものであり、「プラグインを設定してください」といった汎用的なアドバイスではありません。
セクション2: build.json NLメタデータの更新
既存の build.json(build-scaffold セクション6で作成)を読み込み、NL固有のフィールドを追加します。build-mcp セクション4で確立された同じPython3 JSON解析パターンを使用します。
echo "[Build] NLメタデータでbuild.jsonを更新中..."
BUILD_JSON="$BUILD_DIR/build.json"
# JSONシリアライゼーション用の配列を構築
INSTALLED_JSON=""
for plugin_entry in "${INSTALLED_PLUGINS[@]}"; do
PLUGIN_SLUG=$(echo "$plugin_entry" | cut -d: -f1)
PLUGIN_NAME=$(echo "$plugin_entry" | cut -d: -f2)
PLUGIN_VER=$(echo "$plugin_entry" | cut -d: -f3)
if [ -n "$INSTALLED_JSON" ]; then
INSTALLED_JSON="${INSTALLED_JSON},"
fi
INSTALLED_JSON="${INSTALLED_JSON}{\"slug\":\"${PLUGIN_SLUG}\",\"name\":\"${PLUGIN_NAME}\",\"version\":\"${PLUGIN_VER}\",\"installed\":true}"
done
FAILED_JSON=""
for slug in "${FAILED_PLUGINS[@]}"; do
if [ -n "$FAILED_JSON" ]; then
FAILED_JSON="${FAILED_JSON},"
fi
FAILED_JSON="${FAILED_JSON}\"${slug}\""
done
# Pythonスクリプトを一時ファイルに書き込み(build-contentの画像生成と同じパターン)
NL_META_SCRIPT="/tmp/update_build_json_$$.py"
cat > "$NL_META_SCRIPT" << PYEOF
import json, sys
build_file = sys.argv[1]
nl_prompt = sys.argv[2]
theme_slug = sys.argv[3]
theme_name = sys.argv[4]
theme_version = sys.argv[5]
theme_installed = sys.argv[6] == 'true'
pages_created = int(sys.argv[7])
posts_created = int(sys.argv[8])
menu_assigned = sys.argv[9] == 'true'
installed_json = sys.argv[10]
failed_json = sys.argv[11]
with open(build_file) as f:
data = json.load(f)
data['mode'] = 'nl'
data['nl_prompt'] = nl_prompt
data['theme'] = {
'slug': theme_slug,
'name': theme_name,
'version': theme_version,
'installed': theme_installed
}
data['plugins'] = json.loads('[' + installed_json + ']') if installed_json else []
data['content'] = {
'pages_created': pages_created,
'posts_created': posts_created,
'menu_assigned': menu_assigned
}
if failed_json:
data['failed_plugins'] = json.loads('[' + failed_json + ']')
with open(build_file, 'w') as f:
json.dump(data, f, indent=2)
print('[Build] NLメタデータでbuild.jsonを更新しました')
PYEOF
python3 "$NL_META_SCRIPT" \
"$BUILD_JSON" \
"$NL_PROMPT" \
"$THEME_SLUG" \
"$THEME_NAME" \
"$THEME_VERSION" \
"${THEME_INSTALLED:-true}" \
"$PAGES_CREATED" \
"$POSTS_CREATED" \
"${MENU_ASSIGNED:-false}" \
"$INSTALLED_JSON" \
"$FAILED_JSON"
# 一時スクリプトのクリーンアップ
rm -f "$NL_META_SCRIPT"
NLメタデータ更新後のbuild.json:
{
"build_id": "nl-photography-portfolio-20260220-143022",
"mode": "nl",
"nl_prompt": "フリーランス写真家のポートフォリオサイト",
"wp_version": "6.7",
"php_version": "8.2",
"site_url": "http://localhost",
"site_title": "フリーランス写真家のポートフォリオサイト",
"created_at": "2026-02-20T14:30:22Z",
"theme": {
"slug": "blocksy",
"name": "Blocksy",
"version": "2.0.50",
"installed": true
},
"plugins": [
{ "slug": "envira-gallery-lite", "name": "Envira Gallery Lite", "version": "1.9.0", "installed": true },
{ "slug": "wpforms-lite", "name": "WPForms Lite", "version": "1.9.0", "installed": true }
],
"content": {
"pages_created": 4,
"posts_created": 3,
"menu_assigned": false
},
"failed_plugins": [],
"mcp_adapter": {
"included": true,
"activated": true,
"version": "0.4.1"
}
}
セクション3: ビルドサマリーの拡張
追加
…
[翻訳のため省略]