GitHub 連携¶
立ち位置¶
automedia は spin-dd org GitHub にあるサイト別 HubSpot テーマリポ群 をテンプレ/ルールの SoT かつ実行ランタイムの場所として利用する。各リポは独立しており、サイトと 1:1 対応する(運用前提 参照)。
GitHub の役割は 2 つ:
- コードと設定の保管:
.automedia/配下のテンプレ・ルール、.claude/skills/automedia-*/のスキル - 実行ランタイム: GitHub Actions で Claude Code を起動して配信を実行(Claude Code ランタイムモデル)
| サイト | テーマリポ |
|---|---|
| 馬頭ゴルフ | spin-dd/bato-hubspot-theme |
| おかだ | spin-dd/okada-hubspot-theme |
| ラテール | spin-dd/laterre-hubspot-theme |
| いちの | spin-dd/ichino-hubspot-theme |
| 太平エンジニアリング | spin-dd/taihei-hubspot-theme |
| 太平人事 | spin-dd/recruit-hubspot-theme |
| TAC | spin-dd/tac-hubspot-theme |
| SPIN D&D | spin-dd/spindd-hubspot-theme |
配置案の比較¶
| 案 | 配置先 | 長所 | 短所 |
|---|---|---|---|
| A. テーマリポ内サブディレクトリ | spin-dd/<key>-hubspot-theme/.automedia/ |
サイトの資産(テーマ + SNS テンプレ)が同一リポで一覧できる。既存 PR フローを踏襲 | テーマと SNS テンプレのリリースサイクルが結合する |
| B. 独立共有リポ | spin-dd/automedia-templates(projects/<key>/) |
SNS テンプレだけ独立リリース。横断改修が楽 | テーマと別管理になり整合確認が増える |
| C. 各サイトに独立リポ | spin-dd/<key>-automedia |
完全分離・権限独立 | リポ数が増える |
暫定採用:案 A(テーマリポ内サブディレクトリ)
理由:
- 既に各テーマリポに
.claude/skills/を置く文化があり、サイト固有ルールはリポ内に集約する流儀が定着している - HubSpot のテンプレ更新と SNS メッセージのテンプレ更新は概念的に近い(同一の "デザイン資産")
- リリースを結合するデメリットは、
.automedia/の変更だけはマージ即反映に振り分けるトリガで回避可能
案 A を採用しても、複数サイトで共有したいテンプレが出てきた段階で案 B を併用する余地は残す(
spin-dd/automedia-sharedのような snippets リポ)。
リポジトリ規約(暫定 / 採用案 A)¶
spin-dd/bato-hubspot-theme/
├─ ... 既存 HubSpot テーマファイル群
├─ .claude/
│ └─ skills/
│ ├─ html-rules/ # 既存
│ ├─ automedia-line/ # 新規(LINE 配信スキル)
│ ├─ automedia-backlog/ # 新規(Backlog 操作スキル)
│ └─ automedia-deliver/ # 新規(配信全体の手順)
├─ .automedia/ # ← automedia 設定とテンプレ
│ ├─ project.yml # Project メタ
│ ├─ templates/
│ │ ├─ line/
│ │ │ ├─ announce_open.yml
│ │ │ ├─ restaurant_menu.yml
│ │ │ └─ welcome_coupon.yml
│ │ ├─ instagram/
│ │ │ └─ event_repost.yml
│ │ └─ tiktok/
│ │ └─ event_repost.yml
│ ├─ rules/
│ │ ├─ targeting/
│ │ │ └─ sweets_clickers.yml
│ │ └─ schedule/
│ │ └─ weekly_open_hours.yml
│ └─ assets/
│ └─ rich_menu/
│ └─ q2_2026.png
└─ .github/workflows/
└─ automedia-validate.yml # PR で .automedia/ が触られたら validate
Phase 1c で
.automedia/配下が更新されると automedia の sync Lambda が GitHub Push event を受けて S3 (s3://spin-dd-automedia-tenants/<tenant>/...) にミラーする。テーマリポ側に repository_dispatch / workflow_dispatch 用ワークフローは不要。
project.yml¶
name: bato-golf
display_name: 馬頭ゴルフ倶楽部
backlog_project_key: GENERAL # 暫定。Backlog 構造合意後に確定
channels:
- kind: line
account_ref: secret://line/bato
- kind: instagram
account_ref: secret://ig/bato
default_timezone: Asia/Tokyo
analytics:
ga4_property: G-X8PXD0E1JY
Template(LINE Flex Message 例)¶
id: announce_open
channel: line
kind: flex
schema_version: 1
variables:
- name: date
- name: hours
content:
type: flex
altText: "{{date}}の営業案内"
contents: ...
Rule(ターゲティング例)¶
id: sweets_clickers
project: bato-golf
match:
any:
- tag: sweets_interest
- and:
- clicked_link_contains: "/sweets/"
- within_days: 30
取り込み方式¶
GitHub Push event を automedia の sync Lambda が受け、.automedia/ 配下のファイル変更を S3 (spin-dd-automedia-tenants bucket) にミラーする。
- URL:
POST https://api.automedia.spin-dd.com/github/webhook - 認証:
X-Hub-Signature-256(/automedia/_meta/github.webhook_secret) - private repo の Raw fetch 用 PAT:
/automedia/_meta/github.pat(Fine-grained, Contents: Read)
各テーマリポに individually Webhook を仕掛けるため、新規プロジェクト追加時の手順に Webhook 設定を含める。詳細は Webhook 受信 参照。
バージョニング¶
- Template / Rule は
schema_versionを持つ - ContentTask は
template_refsに commit SHA を凍結 して保存 → 後追いで再実行しても同じ版が再現 - ロールバックは Git で(テーマリポ全体のリリースを引きずらないよう、
.automedia/だけ revert する PR を出す運用を可能にする)
既存 HTML ルールとの関係¶
HTML ルール で定義された HubSpot Rich Text サニタイズ前提 は、LINE Flex Message とは別の制約。
- HubSpot 投稿の自動配信を
09-hubspot-integrationで扱うときに改めて適用する - LINE / TikTok / Instagram のテンプレは HTML ルールの影響を受けない
- 既存テーマリポの
.claude/skills/html-rules/を参考に、.automedia/.claude/配下に automedia 用スキルを置くことも検討
権限¶
- sync Lambda → GitHub Raw API: Fine-grained PAT (
/automedia/_meta/github.pat、scope: Contents Read、対象 repo 限定) - テーマリポ Webhook 認証: HMAC-SHA256 共有シークレット (
/automedia/_meta/github.webhook_secret) - OpenTofu deploy: GitHub Actions OIDC + AWS IAM Role (
automedia-deploy-role)、長期 PAT 不要
失敗時¶
- sync Lambda 内部失敗 (IAM / Raw fetch 401-403 等) → 500 を返却 → GitHub Webhook Delivery 一覧で可視化 + 自動リトライ
- バリデーション失敗:
automedia-validate.ymlが PR を fail させる (テーマリポ側 CI として残す)