Communitygithub.com

dr-robert-li/cowork-wordpress-expert

優先順位付けされたプラグイン設定とコンテンツ置換ガイドを含むSETUP.mdを生成し、NL固有のメタデータでbuild.jsonを更新します。

cowork-wordpress-expert とは?

このスキルはWordPressサイト構築プロセスの一部として、インポート後の設定手順書(SETUP.md)を自動生成し、自然言語(NL)サイト記述に基づくメタデータでbuild.jsonを更新します。主にCoWorkビルドシステム内で使用され、build-contentステップの後、ZIPパッケージングの前に実行されます。インストール済みプラグイン、テーマ情報、作成済みページ・投稿数などの変数を入力とし、AIが各プラグインの設定手順を優先順位付きで生成します。これにより、開発者やユーザーはLocal WPにサイトをインポートした直後から、クリティカルな設定から順に作業を進められます。対応プラットフォームはLocal WPなどのWordPress開発環境で、標準的なビルドパイプラインを拡張します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/dr-robert-li/cowork-wordpress-expert/tree/HEAD/skills/build-setup

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

ビルドセットアップスキル

SETUP.md — インポート後の設定とコンテンツ置換ガイド — を生成し、NL固有のメタデータでbuild.jsonを更新します。このスキルはbuild-contentの後、ZIPパッケージングの前に実行されます。

入力変数(build-theme と build-content によって設定):

変数ソース説明
BUILD_DIRbuild-scaffoldビルド作業ディレクトリの絶対パス
NL_PROMPTCOMMAND.md セクション1元の自然言語サイト記述
THEME_SLUGbuild-themeインストールされたテーマのスラッグ
THEME_NAMEbuild-theme人間が読めるテーマ名
THEME_VERSIONbuild-themeインストールされたテーマのバージョン文字列
THEME_INSTALLEDbuild-themeブール値 — テーマが正常にインストールされた場合はtrue
INSTALLED_PLUGINSbuild-content正常にインストールされたプラグインの スラッグ:名前:バージョン の配列
FAILED_PLUGINSbuild-contentインストールまたはアクティベーションに失敗したプラグインのスラッグの配列
PAGES_CREATEDbuild-content作成されたページの整数カウント
POSTS_CREATEDbuild-content作成された投稿の整数カウント
MENU_ASSIGNEDbuild-contentブール値 — ナビゲーションメニューがテーマのロケーションに割り当てられた場合はtrue
MENU_LOCATIONbuild-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: ビルドサマリーの拡張

追加

…

[翻訳のため省略]

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

関連スキル