コンテンツにスキップ

GitHub 連携

立ち位置

automedia は spin-dd org GitHub にあるサイト別 HubSpot テーマリポ群 をテンプレ/ルールの SoT かつ実行ランタイムの場所として利用する。各リポは独立しており、サイトと 1:1 対応する(運用前提 参照)。

GitHub の役割は 2 つ:

  1. コードと設定の保管: .automedia/ 配下のテンプレ・ルール、.claude/skills/automedia-*/ のスキル
  2. 実行ランタイム: 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-templatesprojects/<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_refscommit 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.ymlPR を fail させる (テーマリポ側 CI として残す)