0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

.gitignore の .env 1行では .env.local も .env.bak も無視されない:5つの書き方を git status で比べた(git 2.47で確認)

0
Posted at

この記事の要点

  • .gitignore に .env と1行書いただけでは、.env.local・.env.bak・.env~・prod.env などは無視されません。git 2.47.3 で、ダミー値のファイル10個を置いて確かめました。
  • /.env と先頭にスラッシュを付けると、backend/.env のようなサブフォルダの .env も無視されなくなります(公式の「先頭か途中に / があると、その .gitignore の階層からの相対パスになる」のとおり)。
  • 今回の10個をすべて止めて .env.example だけ残せたのは、次の3行でした。
.env*
*.env
!.env.example
  • 無視されていない env 系ファイルは、次の1行で一覧できます。
git ls-files --others --exclude-standard | grep -i env

ファイル名だけで .env や鍵の置き場所を点検する CLI も作っています(今回の確認では .env.bak は表示され、.env~ と prod.env は表示されませんでした。対応は Issue にしています)。

npx github:supportapp3-lab/ai-secret-check scan

試した内容

使い捨てのリポジトリに、次の10個のファイル(中身はすべて API_KEY=dummy-not-real)を置きました(Debian の box、git 2.47.3)。

.env  .env.local  .env.bak  .env~  .env.old  env.bak  .env.example
backend/.env  backend/.env.production  config/prod.env

.gitignore を1パターンずつ書き換えて、git status --short --untracked-files=all で「無視されずに残ったファイル」(?? の行)を見ました。

パターン別の結果

.env

?? .env.bak
?? .env.example
?? .env.local
?? .env.old
?? .env~
?? backend/.env.production
?? config/prod.env
?? env.bak

無視されたのは .env と backend/.env だけです。.env というパターンは名前が .env のファイルにしか当たらないので、.env.local もバックアップの .env.bak・.env~ も、AI エージェントに git add -A を任せればそのまま入ります。

/.env

?? .env.bak
?? .env.example
?? .env.local
?? .env.old
?? .env~
?? backend/.env
?? backend/.env.production
?? config/prod.env
?? env.bak

backend/.env まで残りました。公式の gitignore に「If there is a separator at the beginning or middle (or both) of the pattern, then the pattern is relative to the directory level of the particular .gitignore file itself」とあり、先頭の / で一番上の階層だけに限られたためです。モノレポや backend/・frontend/ に分けた構成では注意が必要です。

.env*

?? config/prod.env
?? env.bak

.env で始まる名前はすべて無視されました。ただし .env.example も無視されるので、見本ファイルをコミットしたいなら !.env.example を足す必要があります。

.env.*

?? .env
?? .env~
?? backend/.env
?? config/prod.env
?? env.bak

. の後ろに何か続くものだけに当たるので、.env 本体と .env~ が残りました。.env.* だけを書く場合は .env の行も必要です。

*.env

?? .env.bak
?? .env.example
?? .env.local
?? .env.old
?? .env~
?? backend/.env.production
?? env.bak

prod.env は無視されましたが、.env.local などは残りました。

組み合わせ

$ cat .gitignore
.env*
*.env
!.env.example
$ git status --short --untracked-files=all
?? .env.example
?? .gitignore
?? env.bak
$ git check-ignore -v .env.bak backend/.env.production config/prod.env .env.example
.gitignore:1:.env*	.env.bak
.gitignore:1:.env*	backend/.env.production
.gitignore:2:*.env	config/prod.env
.gitignore:3:!.env.example	.env.example
  • env.bak(先頭に . がない)はどのパターンにも当たりませんでした。名前の付け方がばらばらなら、パターンを増やすより、後で紹介する洗い出しの1行で見るほうが確実です。
  • git check-ignore -v は、どの行に当たったかを表示します。! で始まる行に当たったときは「無視されない」という意味です(git-check-ignore の -v)。

無視されていない env 系ファイルを洗い出す

.gitignore を .env 1行に戻した状態で実行しました。

$ git ls-files --others --exclude-standard | grep -iE 'env'
.env.bak
.env.example
.env.local
.env.old
.env~
backend/.env.production
config/prod.env
env.bak

--others は追跡していないファイル、--exclude-standard は .gitignore などの無視ルールを効かせる指定です(git-ls-files)。ここに出たものは、次の git add -A で入ります。environment.ts のように名前に env を含むだけのファイルも出るので、目で見て判断してください。

すでに追跡されている .env には .gitignore が効かない点は、前回の記事で確かめています。

まとめ

.gitignore 無視されなかったもの(今回の10個のうち)
.env .env.local・.env.bak・.env~・prod.env など8個
/.env 上に加えて backend/.env(9個)
.env* prod.env・env.bak(.env.example も無視される)
.env.* .env 本体・.env~ など5個
*.env .env.local・.env.bak など7個
.env* + *.env + !.env.example env.bak だけ(.env.example は残る)

参考

※ 仕様は 2026-11-01 時点の公式ドキュメントに基づきます。動作は git 2.47.3 の使い捨てリポジトリで、ダミー値だけを使って試しました。

更新情報やちょっとしたTipsは X(@supportapp3_lab)で発信しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?