godotenv.Load で本番環境変数を守りながらローカル env 階層を作る
Go
設計判断
環境変数
Go アプリで本番はプラットフォーム注入の環境変数を使い、ローカルだけ env ファイルを補助的に読みたい場合は、godotenv.Load の「既存の環境変数を上書きしない」挙動を前提に設計すると影響範囲を小さくできる。
判断基準:
- 本番の env を絶対に上書きしたくない場合、
godotenv.Overloadは使わない。Loadなら OS 環境変数がすでに存在するキーは維持される。 - worktree や個人設定でデフォルトを上書きしたい場合は、上書きファイルを先に
Loadし、その後に secrets、最後にデフォルトを読む。先に読まれた値は後続のLoadで上書きされないため、Overloadなしで「worktree > secrets > default」の優先順位を作れる。 - 相対パスだけで読むと、テストやサブディレクトリからの起動で env ファイルが見つからない。
go.modなどのリポジトリ境界を親方向に探索してから絶対パスで読むと安定する。
検証方法: 本番相当の環境変数をシェルで明示した状態で起動し、env ファイル側に同名キーがあってもシェル値が維持されることを確認する。次にシェル値なしで worktree/default の同名キーを用意し、先に読んだ worktree 値が採用されることを確認する。