おはようございます、YASUです。
以前、`.gitignore`の役割(Gitに管理してほしくないファイルを指定する門番リスト)について書きましたが、実際に運用する際、毎回すべてのパターンを自分で考えて書くのは大変です。今日は、その手間を省いてくれる「テンプレート」の活用方法を紹介します。
結論
GitHubには、プログラミング言語やツールごとに用意された`.gitignore`の公式テンプレートがあり、新しいプロジェクトを始める時、それをそのまま使うだけで、必要な除外設定のほとんどをカバーできます。ゼロから自分で書く必要はありませんでした。
なぜテンプレートが必要なのか
以前紹介した`.gitignore`の例では、`.env`や`node_modules/`など、いくつかの代表的なパターンを手で書きました。しかし実際には、使っている言語やツールによって「除外すべきファイル」の種類は驚くほど多岐にわたります。
- Pythonなら、キャッシュファイル(`__pycache__/`)や仮想環境フォルダ(`venv/`)
- Node.jsなら、依存パッケージ(`node_modules/`)やログファイル
- macOSなら、Finderが勝手に作る`.DS_Store`
- VS Codeなら、エディタ固有の設定フォルダ(`.vscode/`)
これを毎回、記憶を頼りに手で書いていくのは非効率ですし、書き漏らしによる事故(以前紹介したAWSキーの流出のような話)にもつながりかねません。
GitHubの公式テンプレートを使う
GitHubには、主要な言語・フレームワークごとに、あらかじめ用意された`.gitignore`のテンプレート集があります。新しくリポジトリを作る画面で、`.gitignore`テンプレートを選ぶ項目があり、そこで例えば「Python」や「Node」を選ぶだけで、その言語でよく使われる除外パターンが、最初から設定された状態でリポジトリが作成されます。
# 例:Python用テンプレートに含まれる代表的な内容
__pycache__/
*.py[cod]
venv/
.env
.pytest_cache/
*.egg-info/
自分の使っている言語名で検索して、その内容をコピーして使うだけでも十分です。GitHub上の`github/gitignore`という公式リポジトリに、こうしたテンプレートが集約されています。
複数のテンプレートを組み合わせる
実際のプロジェクトでは、1つの言語だけでなく、複数の要素が絡むことがよくあります。例えば「Pythonで書いていて、VS Codeを使っていて、Macで作業している」という場合、Python用・VS Code用・macOS用の内容を、1つの`.gitignore`ファイルにまとめて書くことができます。
# Python用
__pycache__/
venv/
.env
# VS Code用
.vscode/
# macOS用
.DS_Store
`.gitignore`は、こうして複数のブロックを縦に並べて書くだけで問題なく機能します。コメント(`#`から始まる行)で、どの部分が何のためのブロックかをメモしておくと、後から見返した時にも分かりやすくなります。
Terraform用のテンプレートもある
これまで扱ってきたTerraformにも、専用のテンプレートがあります。
*.tfstate
*.tfstate.*
.terraform/
*.tfvars
crash.log
以前紹介した通り、tfstateには機密情報が含まれることもあるため、`*.tfstate`や`.terraform/`(Terraformが自動で作る作業用フォルダ)を除外しておくのは、実務でもほぼ必須の設定とされています。`*.tfvars`も、環境ごとの設定値(場合によっては認証情報に近い値)が含まれることがあるため、除外対象に含まれています。
後からテンプレートを追加したい場合
すでにあるプロジェクトに、後からテンプレートの内容を追加したい場合は、GitHub上のテンプレートの中身をコピーして、自分の`.gitignore`ファイルに貼り付けるだけで大丈夫です。ただし、以前紹介した通り、`.gitignore`に追記しても、すでにコミット済みのファイルには効果がないため、その場合は`git rm –cached`で個別に対応する必要があります。
まとめ
- `.gitignore`は、GitHubが提供する公式テンプレートを使えば、ゼロから書く必要がない
- 言語・ツールごとにテンプレートが用意されており、複数を組み合わせて1つのファイルにまとめられる
- Terraform用のテンプレートには、tfstateや.terraform/など、実務で重要な除外設定が含まれている
- 後から追記する場合、すでにコミット済みのファイルには`git rm –cached`が別途必要
毎回自分で考えて書いていた設定にも、実は頼れるテンプレートがあったのだと知り、今後のプロジェクト開始時の手間がまた一つ減りそうです。それでは、また明日!

コメント