Skip to content

feat: env-sync.yaml の変数ごとに送信先 Vercel プロジェクトを指定可能に#36

Merged
polidog merged 1 commit into
mainfrom
feat/33
Jun 28, 2026
Merged

feat: env-sync.yaml の変数ごとに送信先 Vercel プロジェクトを指定可能に#36
polidog merged 1 commit into
mainfrom
feat/33

Conversation

@polidog

@polidog polidog commented Jun 27, 2026

Copy link
Copy Markdown
Member

タスク

env-sync.yaml の variables の各エントリ(および defaults)で、送信先 Vercel プロジェクトを name で指定できるようにする(vercel_project: app-a / vercel_project: [app-a, app-b])。同期先 ID は認証 config の vercel.projects[].name を参照するため、git コミット対象の env-sync.yaml に機密 ID を書かずに済む。

Closes #33

変更内容

  • internal/config/config.go: VarConf / Definition.DefaultsVercelProject *ProviderVal(yaml: vercel_project)を追加(既存 ProviderVal の string/[]string 両対応を流用)
  • internal/provider/provider.go: EntryVercelProjects []string を追加
  • internal/sync/entry.go: ResolveEntries で「変数個別 > defaults」の優先順位で解決
  • internal/provider/vercel/vercel.go: Sync をターゲット別 items 構成に再構成。filterEntriesByVercelProject(未指定=全ターゲット, name 一致のみ)と validateEntryVercelProjects(単一解決モードでの指定エラー・存在しない name エラー)を追加
  • env-sync.yaml コメント / README.md にドキュメント追記

完了条件

  • vercel_project: app-a / [app-a, app-b] 両記法の YAML 解析
  • 解決優先順位: 変数個別 > defaults
  • vercel_project を持つ変数は name 一致ターゲットにのみ同期、未指定は全ターゲット(後方互換)
  • CLI --vercel-project との AND 絞り込み
  • 存在しない name はエラー / 単一解決モードでの指定はエラー
  • 既存テストパス + 新テスト追加

動作確認

  • lint / build 通過(gofmt clean / go vet / golangci-lint で変更箇所に指摘なし)
  • 設計・計画適合レビュー通過(Critical なし)
  • 自動テスト(ユニットテスト追加: YAML 解析 / 解決優先順位 / 絞り込み / バリデーション)
  • コード品質チェック通過(Critical なし)
  • 受け入れテスト通過

受け入れテスト結果(--dry-run

app-a / app-b を定義した config と以下の env-sync.yaml で検証:

シナリオ 結果
全プロジェクト app-a に 3 件(API_URL+COMMON_KEY+SHARED_URL)、app-b に 2 件(API_URL 除外)✅
--vercel-project app-b app-b のみ・app-b 向け 2 件(AND)✅
存在しない name app-x 日本語エラー + exit 1 ✅
単一解決モードで指定 日本語エラー + exit 1 ✅
vercel_project 未使用(後方互換) 全ターゲットに全変数 ✅

品質チェック結果

  • 🔴 Critical: 0 / 🟡 Warning: 0 / 🔵 Info: 0(変更箇所)

パフォーマンス診断

  • 静的解析のみ。filterEntriesByVercelProject / validateEntryVercelProjects は変数数×プロジェクト名数の小さな二重ループでホットパスでなく問題なし。perTargetItems 事前計算も API 呼び出し回数は既存と同一(N+1 なし)。

🤖 Generated with Claude Code

https://claude.ai/code/session_01MUNfaHdh77j6ZEA2v8oieH

variables / defaults で vercel_project(string / []string)を指定すると、
認証 config の vercel.projects[] のうち name 一致するターゲットにのみ
その変数を同期する。未指定なら従来どおり全ターゲットへ(後方互換)。

- config: VarConf / Defaults に VercelProject フィールド追加(ProviderVal 流用)
- provider.Entry に VercelProjects []string を追加
- sync.ResolveEntries で「変数個別 > defaults」解決
- vercel.Sync をターゲット別 items 構成に再構成し filterEntriesByVercelProject /
  validateEntryVercelProjects を追加(CLI --vercel-project とは AND)
- 存在しない name・単一解決モードでの指定はエラー
- env-sync.yaml コメント / README にドキュメント追記
- ユニットテスト追加(YAML 解析 / 解決優先順位 / 絞り込み / エラーケース)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MUNfaHdh77j6ZEA2v8oieH

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@polidog polidog merged commit 98ed1d0 into main Jun 28, 2026
1 of 2 checks passed
@polidog polidog deleted the feat/33 branch June 28, 2026 00:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

env-sync.yaml の変数ごとに送信先 Vercel プロジェクトを指定可能にする

2 participants