Skip to content

feat: Vercel Custom Environment(staging 等)対応 (#39)#41

Merged
polidog merged 2 commits into
mainfrom
feat/39
Jul 2, 2026
Merged

feat: Vercel Custom Environment(staging 等)対応 (#39)#41
polidog merged 2 commits into
mainfrom
feat/39

Conversation

@polidog

@polidog polidog commented Jul 2, 2026

Copy link
Copy Markdown
Member

タスク

Closes #39

env-sync の Vercel provider は環境変数の送信先環境として production / preview / development の 3 種のみ対応しており、Vercel の Custom Environment(例: staging)を environments に指定するとエラーになっていた。Custom Environment にも変数を同期できるようにする。

  • entriesToVercelItems の validTargets を「エラー判定」から「標準環境 / Custom Environment slug の振り分け判定」に変更
  • GET /v9/projects/{idOrName}/custom-environments(teamId 対応)で slug → ID(env_*)を解決する vercelFetchCustomEnvironments / applyCustomEnvironments を追加
  • item 構造体に customEnvironmentIds(omitempty)を追加。標準環境は従来どおり target、Custom Environment は customEnvironmentIds で送信(混在時は 1 item に同居)
  • 存在しない slug は利用可能一覧付きの i18n エラー(en/ja 両カタログ)
  • 一覧表示(environments=...)は標準環境 + Custom Environment slug を結合して表示(dry-run 含む)
  • README.md / README.ja.md / env-sync.yaml のコメントに指定方法を追記

完了条件

  • environments に Custom Environment slug(例: [staging])を指定した変数がエラーにならず該当環境に同期される
  • 標準環境のみ指定した既存挙動が変わらない(後方互換 — custom slug 未使用時は追加 API 呼び出しゼロ、送信 JSON も従来と同一)
  • 混在指定(例: [production, staging])で標準環境は target、Custom Environment は customEnvironmentIds で送信される
  • 存在しない slug で en/ja の分かりやすいエラー(利用可能 slug 一覧はソート済み・0 件時は事前作成を促す文言)
  • slug 解決の単体テスト・混在送信本文の検証テストを追加、go test ./... 通過
  • README.md / README.ja.md / env-sync.yaml に記載

動作確認

  • lint / build 通過(go vet / gofmt / go build / go test -race すべてグリーン)
  • 設計・計画適合レビュー通過(Critical なし)
  • 自動テスト生成・通過(統合テスト / E2Eテスト)— スキップ(test scope=unit のため。implementer の TDD 単体テストでカバー)
  • コード品質チェック通過(Critical なし)
  • 受け入れテスト通過(httptest モック全 PASS + ローカル dry-run で表示確認。実 Vercel 環境での確認はスキップ — 実環境なしのため)

設計メモ

  • 複数ターゲット時のエラー方針: 存在しない Custom Environment slug のエラーは(トークン未設定時の per-target 継続と異なり)Sync 全体を中止する。これは設定ミスの早期検出を優先した意図的な挙動(確認プロンプト前にエラーを surface し、部分送信による不整合を防ぐ)。
  • dry-run では slug → ID 解決の API を呼ばない(トークン不要で動作、表示は slug 名のまま)。

品質チェック結果

🔴 Critical: なし
🟡 Warning: 1 件(複数ターゲット時のエラー中止方針の非対称性)→ 上記「設計メモ」のとおり意図的な挙動として整理済み
🔵 Info: available 一覧の非決定的順序・重複 ID・0 件時メッセージ・パース失敗テスト不足 → すべて修正済み

パフォーマンス診断

指摘なし。slug → ID 解決はターゲットごとに GET 1 回のみ(エントリごとの都度呼び出しなし)、custom slug 未使用ターゲット・dry-run では API を呼ばない設計。

🤖 Generated with Claude Code

- production/preview/development 以外の environments 値を Custom Environment slug として許容
- GET /v9/projects/{id}/custom-environments で slug→ID を解決し customEnvironmentIds で送信
- 標準環境と Custom Environment の混在指定に対応(target と customEnvironmentIds を同居)
- 存在しない slug は利用可能一覧付きの i18n エラー(en/ja)
- custom slug 未使用ターゲットでは API を呼ばず後方互換を維持
- README / README.ja / env-sync.yaml に指定方法を追記

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

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.

Pull request overview

Vercel provider が production/preview/development 以外の environments 値(Custom Environment の slug、例: staging)を許容し、Vercel の Custom Environment へも環境変数を同期できるようにする変更です。既存の標準環境のみの挙動を維持しつつ、slug→ID 解決と送信ペイロード(customEnvironmentIds)対応を追加しています。

Changes:

  • entriesToVercelItems で標準環境は Target、それ以外は Custom Environment slug として customEnvSlugs に振り分け
  • GET /v9/projects/{idOrName}/custom-environments により slug→ID を解決して customEnvironmentIds を埋め、標準+カスタム混在送信を可能に
  • i18n(en/ja)エラーメッセージ追加、README/サンプル設定コメント更新、関連ユニットテスト追加

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated no comments.

Show a summary per file
File Description
README.md Custom Environment slug の指定方法を追記
README.ja.md Custom Environment slug の指定方法を追記(日本語)
internal/provider/vercel/vercel.go Custom Environment slug の解決・送信ペイロード拡張・一覧表示の改善を実装
internal/provider/vercel/vercel_test.go slug 振り分け、slug→ID 解決、混在時の JSON などのユニットテストを追加
internal/i18n/keys.go Custom Environment 関連の i18n キーを追加(旧 invalid env キーを整理)
internal/i18n/catalog_ja.go Custom Environment 関連メッセージ(ja)を追加
internal/i18n/catalog_en.go Custom Environment 関連メッセージ(en)を追加
env-sync.yaml environments に Custom Environment slug を指定できる旨をコメント追記

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

# Conflicts:
#	internal/provider/vercel/vercel.go
@polidog polidog merged commit 32e9a1a into main Jul 2, 2026
1 check passed
@polidog polidog deleted the feat/39 branch July 2, 2026 07:26
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: Vercel Custom Environment(staging 等)対応

2 participants