VTuberに特化したディレクトリ+pSEO記事量産型WordPressサイト。
ディレクトリ : カスタム投稿タイプ(vtubers / vtuber_groups)でVtuber情報を管理
pSEO記事 : 通常投稿(posts)でreview / comparison / howto記事を量産
自動投稿 : n8n + Gemini Flash 2.5 でGoogle Sheetsからコンテンツを自動生成
WordPress : PHP 8.2(LocalWP)
テーマ : Bricks Builder + NextBricks
SEO : SEOPress Pro
CSS : TailwindCSS v3 + DaisyUI v4
自動投稿 : n8n(Hetzner自己ホスト)+ Gemini Flash 2.5
設定管理 : Google Sheets(.envは使用しない)
# 1. LocalWP を起動してから実行
bash scripts/setup.sh
このスクリプトが以下を自動実行します:
wp-cli.phar のダウンロード
theme/functions.php → app/public/wp-content/mu-plugins/vtuber-cpt.php にコピー
パーマリンク設定(投稿名形式)
CPT・タクソノミー登録確認
npm install + TailwindCSS ビルド
# WP CLI エイリアス設定(Bashに追記推奨)
PHP_BIN=" C:/Users/apple/AppData/Roaming/Local/lightning-services/php-8.2.29+0/bin/win64/php.exe"
WP_PATH=" C:/Users/apple/Local Sites/vtuber-wp/app/public"
alias wp=" $PHP_BIN wp-cli.phar --path='$WP_PATH ' --url=http://localhost:10004 --allow-root"
# ---- 確認系 ----
wp plugin list # プラグイン一覧
wp theme list # テーマ一覧
wp post-type list # 投稿タイプ一覧
wp taxonomy list # タクソノミー一覧
# ---- CPT操作 ----
wp post create --post_type=vtubers --post_title=" テストVtuber" --post_status=draft
wp post list --post_type=vtubers --fields=ID,post_title,post_status
wp post list --post_type=vtuber_groups --fields=ID,post_title,post_status
# ---- メタフィールド ----
wp post meta get < POST_ID> vt_subscribers_yt
wp post meta update < POST_ID> vt_subscribers_yt 100000
wp post meta update < POST_ID> vt_is_retired false
# ---- タクソノミー ----
wp term list vtuber_genre
wp term list vtuber_game
wp term list vtuber_group_tax
wp term create vtuber_genre " ゲーム実況" --slug=gaming
wp term create vtuber_game " Minecraft" --slug=minecraft
# ---- メンテナンス ----
wp rewrite flush --hard # パーマリンクフラッシュ
wp cache flush # キャッシュクリア
wp db optimize # DB最適化
# ---- REST API確認 ----
wp eval ' echo get_option("permalink_structure");'
エンドポイント
メソッド
説明
/wp-json/wp/v2/vtubers
GET
Vtubers一覧取得
/wp-json/wp/v2/vtubers/{id}
GET
Vtuber詳細取得
/wp-json/wp/v2/vtubers
POST
Vtuber投稿作成
/wp-json/wp/v2/vtubers/{id}
PATCH
Vtuber更新
/wp-json/wp/v2/vtuber_groups
GET
グループ一覧
/wp-json/wp/v2/posts
POST
pSEO記事作成
/wp-json/wp/v2/genre
GET
ジャンル一覧
/wp-json/wp/v2/games
GET
ゲームタグ一覧
認証方法(Application Password)
# Basic認証でアクセス(n8nでも同様に設定)
curl -u " admin:xxxx xxxx xxxx xxxx xxxx xxxx" \
-X POST http://localhost:10004/wp-json/wp/v2/vtubers \
-H " Content-Type: application/json" \
-d ' {"title": "テスト", "status": "draft", "meta": {"vt_subscribers_yt": 10000}}'
npm install # 初回のみ
npm run build # 本番ビルド → assets/css/output.css
npm run watch # 開発時ウォッチ
npm run lint # ESLint
assets/css/output.css を Bricks Builder の「カスタムCSS」設定で読み込む。
ファイル
説明
スケジュール
wf01-directory-post.json
Vtubers CPT自動投稿
毎日9:00
wf02-article-post.json
pSEO記事自動生成・投稿
毎日10:00
wf03-yt-update.json
YouTube登録者数更新(TODO)
毎日3:00
n8n にログイン
「Import from file」 → n8n-workflows/wf0X-XXX.json を選択
認証情報(Credentials)を設定:
Google Sheets OAuth2
WordPress Application Password
Google AI Studio(Gemini API)
スプレッドシートID : 1WwyRbzS7XfVqcaH6Ipe2JFqMtD-X1c5NKXJViaZAtvM
列名
説明
例
status
処理状態
pending / published
slug
URLスラッグ
kizuna-ai
vt_name_jp
日本語名
キズナアイ
vt_name_en
英語名
Kizuna AI
vt_debut_date
デビュー日
2016-11-29
vt_subscribers_yt
登録者数
3000000
vt_sns_youtube
YouTubeURL
https://www.youtube.com/ ...
genres
ジャンル(カンマ区切り)
ゲーム実況,雑談
group_name
所属グループ
(なし)
列名
説明
例
status
処理状態
pending / published
article_type
記事タイプ
review / comparison / howto
target_name
対象VTuber名
にじさんじ
target_keywords
ターゲットKW
にじさんじ おすすめ
slug
URLスラッグ
nijisanji-review
compare_name
比較対象(comparisonのみ)
ホロライブ
theme
テーマ(howtoのみ)
Minecraft実況
vtuber-wp/
├── .ai/ AIコンテキスト・タスク管理
│ ├── context.md サイト設計・URL構造・収益モデル
│ ├── tasks.md 実装タスクチェックリスト
│ └── decisions.md 技術選定の意思決定ログ
├── .claude/
│ └── settings.json Claude Code設定
├── assets/
│ └── css/
│ ├── tailwind.css TailwindCSSエントリーポイント
│ └── output.css ビルド成果物(.gitignore済み)
├── docs/
│ ├── architecture.md ハイブリッドpSEO構成の全体設計
│ └── bricks-templates.md Bricksテンプレート設計
├── n8n-workflows/
│ ├── wf01-directory-post.json ディレクトリ投稿
│ ├── wf02-article-post.json 記事生成・投稿
│ └── wf03-yt-update.json YouTube更新(スケルトン)
├── scripts/
│ ├── setup.sh 初回セットアップ
│ └── test-rest-api.sh REST API疎通確認
├── seopress/
│ └── title-templates.md SEOPressタイトルテンプレート
├── theme/
│ └── functions.php CPT・メタ定義(mu-pluginsにコピーして使用)
├── app/public/ WordPress本体(.gitignore済み)
├── .env.example 環境変数テンプレート
├── .gitignore
├── CLAUDE.md Claude Code起動時コンテキスト
├── README.md
├── package.json
└── tailwind.config.js
PHPコメント : 日本語
WordPress コーディング標準 準拠
コミットメッセージ : 日本語OK・prefix付き
feat: 新機能
fix: バグ修正
docs: ドキュメント
chore: 設定・ビルド