Conversation
env-sync.yaml の environments を「対象になりうる環境の宣言」と位置づけ、 実際の書き込み先を --environments(カンマ区切り)との積集合に限定する。 - 積集合が空の変数はスキップ(正常終了・stderr に警告) - 未指定時は完全な後方互換 - 不正な環境名(標準3種 + 定義内 Custom Environment 名以外)はエラー終了 - prune の削除判定も指定環境の範囲内に限定 - Vercel: レコードの全環境(Target + customEnvironmentIds)が指定範囲内のときのみ削除 - GitHub: repo レベルスコープを除外し指定 named environment のみスキャン - i18n(en/ja)・README.md / README.ja.md 追記 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VLKa78rpZRLCUrEiv2uAMw
There was a problem hiding this comment.
Pull request overview
env-sync.yaml の environments を「宣言(対象になりうる環境)」として扱い、実際の書き込み・prune 対象を CLI の --environments フラグで絞り込めるようにする変更です。フィルタ時は「変数ごとの宣言 environments ∩ フラグ指定値」の積集合に限定し、空になる変数は警告してスキップします。
Changes:
--environments(カンマ区切り)を追加し、エントリの書き込み先環境を積集合でフィルタ- prune の削除スコープを
--environments指定時に限定(Vercel: レコード単位で範囲内のみ削除 / GitHub: repo レベルを除外し指定 named env のみスキャン) - i18n(en/ja)・README(en/ja)・サンプル定義コメント・テストを追加更新
Reviewed changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| README.md | --environments の目的・挙動・ユースケースを追記し、オプション一覧に追加 |
| README.ja.md | 同上(日本語) |
| internal/sync/entry.go | FilterEntriesByEnvironments を追加し、宣言 environments とフラグ値の積集合でエントリを絞り込み |
| internal/sync/entry_test.go | FilterEntriesByEnvironments のユニットテストを追加 |
| internal/provider/vercel/vercel.go | Vercel prune に --environments フィルタを反映(Custom Env slug→ID 解決も追加) |
| internal/provider/vercel/prune_test.go | Vercel prune のフィルタ挙動(標準/Custom/後方互換)テストを追加 |
| internal/provider/provider.go | provider.Options に Environments []string を追加 |
| internal/provider/github/github.go | GitHub prune のスコープ導出を --environments 対応(repo レベル除外・指定 env のみ) |
| internal/provider/github/prune_test.go | GitHub pruneScopes の --environments 対応テストを追加 |
| internal/i18n/keys.go | --environments バリデーションエラー/スキップ警告のメッセージキーを追加 |
| internal/i18n/catalog_ja.go | 新規メッセージ(ja)を追加し usage に --environments を追記 |
| internal/i18n/catalog_en.go | 新規メッセージ(en)を追加し usage に --environments を追記 |
| internal/config/config.go | --environments のフラグ解析(カンマ分割)を追加 |
| internal/config/config_test.go | --environments のフラグ解析テストを追加 |
| env-sync.yaml | --environments の説明コメントを追記 |
| cmd/env-sync/main.go | --environments の許容値バリデーション、エントリの環境フィルタ適用、スキップ警告出力を追加 |
| cmd/env-sync/main_test.go | --help に --environments が含まれること、許容環境名収集と不正値エラーのテストを追加 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+132
to
136
| case arg == "--environments" || arg == "-environments": | ||
| opts.Environments = splitEnvironments(next()) | ||
| case strings.HasPrefix(arg, "--environments="): | ||
| opts.Environments = splitEnvironments(strings.TrimPrefix(arg, "--environments=")) | ||
| case arg == "--vercel-project" || arg == "-vercel-project": |
- `--environments=` や `--environments ,` のように空・空白のみの値を渡した場合、 splitEnvironments() が空スライスを返してフィルタ無効扱い(全環境書き込み)になる問題を修正。 フラグが指定されてパース結果が空ならエラー終了させ、意図せぬスコープ拡大を防ぐ。 - env-sync.yaml のコメント「重複が無い変数はスキップ」を 「積集合が空の変数はスキップ」に修正("重複" は誤解を招く表現のため)。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
タスク
env-sync.yaml の
environmentsを「対象になりうる環境の宣言」と位置づけ、実際にどの環境へ書き込むかを CLI フラグで絞り込めるようにする。--environments(カンマ区切り、例:--environments staging,preview)を追加--environments指定時、削除判定も指定環境の範囲内に限定ユースケース例:
完了条件
--environmentsフラグが追加され、カンマ区切りで複数環境を指定できる--environments指定時、prune が指定環境以外の変数を削除しない--environmentsの説明が追記されている実装のポイント
internal/sync/entry.goのFilterEntriesByEnvironments(ResolveEntries直後に適用)。environments 未宣言の変数はフラグ指定時「宣言なし」としてスキップ(Vercel の暗黙[production, preview]デフォルトによるフラグ外書き込みを防止)target+customEnvironmentIds)が指定範囲内に収まる場合のみ削除。Custom Environment は slug→ID を API 解決(read-only GET、dry-run でも実行しプレビューと実実行を一致させる)。解決失敗時は保持の安全側environmentラベル値が変わる副作用は README に明記動作確認
go test ./...およびgo test -race ./...全 green)品質チェック結果
🟡 Warning(レビューで検出→修正済み)
!opts.DryRunを除去して解消--environmentsバリデーションの自動テスト欠如 → ユニットテスト 4 件 + バイナリ統合テスト 1 件を追加して解消🟡 Warning(設計判断として許容・README に明記)
Entry.Environmentsをラベルとして使うため、積集合でラベル値が変わる副作用がある(書き込み先の分岐は無い)🔵 Info
パフォーマンス診断
🔵 Info (1件)
vercelEnvWithinFilterがcomputeVercelPruneのループ内でフィルタセットのマップを毎回再構築する。リモート変数は通常 100 件未満で実害なし(改善するならフィルタセット構築のループ外への括り出し)良い点:
vercelFetchCustomEnvironmentsの API 呼び出しは「prune 有効かつフラグに Custom 環境名を含む場合」のみに限定。N+1 的な API パターンの新規追加なし。🤖 Generated with Claude Code
https://claude.ai/code/session_01VLKa78rpZRLCUrEiv2uAMw