はじめに
初めてDjangoで開発を行う際、Gitで管理しようと思ったときに、「どのファイルをGitで管理すればいいんだろう?」と思ったことはありませんか?
フレームワークを使って開発を行うと、たくさんのファイルがあって、どれを管理するのかがわからなくなることもあると思います。ものによっては全く使わないファイルもあるので結構ややこしく感じる方もいると思います。
そこで、Gitに上げるべき・上げないべきファイルの判別方法をお伝えします!
誤って.envやvenv/を上げてしまうとセキュリティや容量面で問題が発生することもありますので、ここで一緒に知識を深められたらと思います!
以下に、Gitに上げるべき・上げないファイルを具体的なファイル例や理由も併せて解説します!
Gitに上げるべきファイル
Gitは「他の開発者が同じ状態を再現できるようにする」ための仕組みです。その観点から、以下のようなファイルはGitで管理すべきです。
| 種別 | ファイル例 | 理由 |
|---|---|---|
| ソースコード |
views.py, models.py, urls.py など |
アプリケーションの本体。開発・レビュー・保守の対象となるため |
| テンプレート |
templates/index.html など |
ユーザー画面の構成に関与するため |
| 静的ファイル(配布用) |
static/css/style.css, static/js/app.js, 画像がある場合は画像ファイル |
表示・挙動に影響し、ビルド対象となることもある |
| マイグレーションファイル |
migrations/0001_initial.py など |
DB構造を再現するために必要(※ただし __pycache__ は除外。理由は後述。) |
| パッケージ情報 |
requirements.txt, Pipfile
|
同じライブラリ環境を構築できるようにするため |
| 設定ファイル(非機密) |
settings.py, manage.py
|
プロジェクト構成の中核になるため |
| ドキュメント | README.md |
プロジェクトの概要、使い方、開発方針などを記述するためのドキュメント |
Gitに上げるべきではないファイル
一方、次のようなファイルはGitに含めるべきではありません。
Gitに上げないファイルについては後述の.gitignoreに記載することでGitに上げないようにできます。
| 種別 | ファイル例 | 理由 |
|---|---|---|
| 秘密情報 |
.env, settings_local.py, secrets.json
|
APIキーやパスワード等が含まれる。漏洩リスクが高い |
| 仮想環境 |
venv/, .venv/
|
ローカル限定。requirements.txtの入力内容をもとにpipで環境を再現可能 |
| キャッシュファイル |
__pycache__/, *.pyc
|
Pythonがソースコードを実行する際に自動生成するバイトコードキャッシュ。実行環境ごとに再生成されるため、Gitで管理する意味がなく、むしろ肥大化や差分ノイズの原因になる。 |
| OS・エディタ依存 |
.DS_Store, Thumbs.db, .vscode/, .idea/
|
プロジェクトには関係なく、他人にとって無意味 |
| 一時ファイル |
*.log, tmp/, *.swp
|
デバッグやローカル処理の副産物で、再現性に無関係 |
| データベース(ローカル開発用) | db.sqlite3 |
マイグレーションファイルがあればDB構造は再構築できるため |
.gitignoreの役割
こうした「上げたくないファイル」を除外するために使うのが .gitignore です。
このファイルにパターンを記述することで、Gitが無視すべきファイルやディレクトリを明示的に指定できます。
Djangoプロジェクトの .gitignore 例
# 仮想環境
venv/
.env
# Pythonキャッシュ
__pycache__/
*.pyc
# エディタ・OS依存
.vscode/
.idea/
.DS_Store
# Django特有
db.sqlite3
*.log
.gitignoreはプロジェクトのルートに1つ置くのが基本です。複雑な場合はディレクトリ単位で個別に置くこともできます。ただし、一般的なプロジェクトではルートに1つ設置して一括管理する方が混乱が少なくおすすめです。
まとめ
| ファイルの種類 | 例 | Gitに上げる? | 理由 |
|---|---|---|---|
| ソースコード | views.py |
✅ Yes | アプリの本体 |
| DB定義 | migrations/0001_initial.py |
✅ Yes | 構造を再現するため |
| ドキュメント | README.md |
✅ Yes | プロジェクトの概要・使い方を記載するための情報源 |
| 機密情報 | .env |
❌ No | 漏洩リスクあり |
| 仮想環境 | venv/ |
❌ No | ローカル限定 |
| キャッシュ | __pycache__/ |
❌ No | 自動生成される |
| IDE・OS依存 |
.DS_Store, .vscode/
|
❌ No | 他人に不要な情報 |
| ローカルDB | db.sqlite3 |
❌ No | マイグレーションで再現可能なため |
Gitで管理するかどうかは、「再現性が必要か?」「漏洩・無駄のリスクがないか?」を基準に判断するのがポイントです。
おわりに
Django開発に限らず、Gitは「構成の最小単位」を扱うツールです。どこまで含めるか、どこから除外するかを論理的に整理することは、安全で保守しやすい開発の第一歩になります。
もしこの記事が役立ったら、ぜひ .gitignore のテンプレートをプロジェクトに導入してみてください。また、他のフレームワーク(React、Node.jsなど)でも同様の考え方が応用できます。
「参考になった!」と思ったらいいねしていただけると励みになります!