🚀 新規事業

TERASU_Lab_git移行記録_2026-06-15

最終更新 2026年06月15日 / 40_新規事業/TERASU/TERASU_Lab_git移行記録_2026-06-15.md

TERASU Lab git移行記録(Drive同期 → git + entries分割)

なぜやったか(背景)

TERASU Lab(lab.terasu.scale-group.co.jp/sections)は、制作担当が「自分が作ったHPの良い部分」を還元してためていく共有ライブラリ。
複数メンバーが各自のPCから同時にセクションを追加する場面が頻繁にある。

旧構成では事故が構造的に起きていた:
- 問題1: 1ファイル集中 — 全セクションが sections.htmlSECTIONS 配列に直書き。2人が同時に同じファイルを編集すると後勝ち上書き=片方の追加が消える
- 問題2: Drive同期 — Google Drive同期は同時編集で「ファイル名 2.ext」競合コピーを作り、本体が壊れる/消える。実際に大串PCでsections一式が欠落していた(同期ズレ)。

→ この2つを根絶するため、git管理 + 1セクション=1ファイル(entries分割) に移行した。

Before / After

旧(〜2026-06-14) 新(2026-06-15〜)
正本 Drive マイドライブ/AI/lab-terasu/(同期) ~/dev/lab-terasu(git・GitHub: scale-group-jp/lab-terasu)
セクション格納 sections.htmlSECTIONS 配列に直書き(1ファイル集中) entries/<id>.json(1セクション=1ファイル)
描画 HTML内の配列を直接render build.py が entries/*.json → sections-data.json を生成 → sections.html が fetch
同時編集 競合・データ消失 競合ゼロ(新規ファイルなので衝突しない)
同期 Drive(不安定) git push/pull(履歴・復元可能)

競合ゼロの肝 = id命名規則

セクション追加 = entries/<id>.json新規作成するだけ。新規ファイルなので、他メンバーが同時に追加してもファイルが被らない=競合が物理的に起きない

ただし「ファイル名が被らない」ことが絶対条件。そのため id を必ずこの形式にする:

<案件>-<種別>-<担当>-<MMDD>
例: babuutalk-fv-saki-0615
    petomo-press-ogushi-0615

担当名+日付が入るので、別メンバーが同じ案件の同じ種別を還元しても絶対に被らない
(補足:claudeのアカウントは「大串垢」と「バックオフィス垢(2名共用)」があり、ファイル名からPCや個人を自動判別はできない。だからid内に担当名を手で入れる運用で competゼロを担保する。)

新しい運用フロー(制作担当・さき向け)

  1. 初回だけ: git clone git@github.com:scale-group-jp/lab-terasu.git ~/dev/lab-terasu
  2. セクション追加:
    - entries/<案件>-<種別>-<担当>-<MMDD>.json を新規作成
    - 画像 img/sections/<id>.png(動きは .mp4)/ コード code-previews/<id>.html を配置
    - python3 build.py(entries → sections-data.json 再生成)
    - git add -A && git commit -m "lab: add <id>" && git push
    - デプロイ: unset CLOUDFLARE_API_TOKEN; npx wrangler pages deploy . --project-name=lab-terasu --branch=main --commit-dirty=true
  3. sections.html は手編集しない(entries を fetch するだけの器になった)

詳細は git版リポジトリの README_運用.md / コマンド hp-flow Step9 に記載。

Drive版は凍結

  • Drive マイドライブ/AI/lab-terasu/_FROZEN_git移行済み_編集しないで.md を設置
  • Drive版を編集しても本番には反映されない(正本は git)

移行データ

  • entries: 25件(旧 SECTIONS 配列から自動分割。cats は旧 CATS マップを優先して継承)
  • メディア: png 26 / mp4 26 / code-previews 26
  • 公開: lab.terasu.scale-group.co.jp/sections(Cloudflare Pages lab-terasu

もし壊れたら(ロールバック)

git管理なので履歴から復元可能:

cd ~/dev/lab-terasu
git log --oneline          # 戻したいコミットを探す
git revert <hash>          # or git reset --hard <hash>(要注意)
python3 build.py
git push
# デプロイ

自動デプロイ(GitHub Actions・2026-06-15 追加)

git push すれば自動で本番反映されるようにした(手動 wrangler 不要)。

セクション追加 → git push → GitHub Actions が build.py 実行 → Cloudflare Pages 自動デプロイ(約30秒)
  • workflow: .github/workflows/deploy.yml(push to main / 手動実行 workflow_dispatch)
  • 仕組み: checkout → Python setup → python3 build.pycloudflare/wrangler-action@v3pages deploy
  • 認証: GitHub Secret CLOUDFLARE_API_TOKEN(Cloudflare Pages:Edit 権限)/ account_id は workflow に直書き
  • 同時 push 対策: concurrency: deploy-lab-terasu(デプロイは1本ずつ直列)
  • 稼働確認済み: 手動トリガーで build-deploy 29秒・本番25件・HTTP 200・画像200
  • 既知の warning: Node.js 20 deprecation(2026-06-16〜Node24強制)。現状動作に影響なし。将来 action のバージョンを上げれば消える
  • 大串/さきの運用: もう「デプロイ」を意識しなくてよい。push(or claudeに「ラボ更新して」)→ 30秒後にさきが本番で見える

関連

  • コマンド: hp-flow Step9(TERASU Lab還元・entries方式+自動デプロイに更新済み)
  • リポジトリ: GitHub scale-group-jp/lab-terasu
  • 凍結マーカー: マイドライブ/AI/lab-terasu/_FROZEN_git移行済み_編集しないで.md