「あ、それ上げちゃダメ!」は突然やってくる
コードレビューで先輩に「これ、今すぐ消して!」と顔面蒼白で言われた経験、ありませんか?
GitHubは世界中に公開される場所です。リポジトリをprivateにしていても、うっかり機密情報を含めてしまうと、チームメンバー全員がアクセスできてしまいます。さらに、一度でもpublicリポジトリにpushしてしまえば、数秒以内に世界中のBotがそれを検知し、悪用される可能性があります。
今回は、GitHub管理で絶対に守るべきセキュリティルールと、万が一流出してしまった時の対処法を実践的に解説します。

絶対にpushしてはいけない「危険ファイル」4選
まずは、セキュリティリスクが極めて高く、うっかりでは済まされないファイルから見ていきましょう。
.envファイル – 危険度MAX
環境変数を管理する.envファイルには、APIキー、データベースパスワード、秘密鍵などが直接記述されています。これを公開すると、数秒以内にBotがスキャンし、あなたのAPIキーを使って高額なクラウドインスタンスを立ち上げ始めます。
プロジェクトを作成したら、真っ先に.gitignoreに追加しましょう。
# .gitignoreに追加
.env
.env.local
.env.*.local実務のTips: .envを除外すると、他の開発者が「何の環境変数を設定すればいいの?」と迷います。.env.exampleというファイルを作り、キー名だけを記述して値は空にしておくと、チーム開発で感謝されます。
# .env.example(こちらはコミットOK)
DATABASE_URL=
API_KEY=
SECRET_TOKEN=クラウドサービスの認証ファイル
AWS、GCP、Azureなどのクラウドサービスから発行される認証ファイルも絶対にアップロードしてはいけません。
credentials.csv(AWS)google-service-account.json(GCP)aws_access_key_idazure-credentials.json
これらをダウンロードしてプロジェクトフォルダに置いたままgit add .してしまう事故が後を絶ちません。認証ファイルは必ずプロジェクト外の安全な場所に保管してください。
SSH秘密鍵 – サーバーアクセス権そのもの
id_rsaや*.pemなどのSSH秘密鍵は、サーバーへのアクセス権限そのものです。これを公開するのは、家の合鍵を駅前で配るようなもの。
SSH鍵は~/.ssh/ディレクトリに保管し、絶対にプロジェクトフォルダ内には置かないでください。
データベースファイル – 個人情報が含まれるリスク
db.sqlite3やdump.sqlなどのデータベースファイルも危険です。「テストデータだから大丈夫」と思っていても、本番データが混ざっていたり、個人情報が含まれていたりする可能性があります。
さらに、バイナリファイルや巨大なテキストファイルはGit管理に向きません。差分管理が困難になり、リポジトリサイズが爆発的に増加します。
リポジトリを汚染する「ノイズファイル」4選
次は、セキュリティリスクは低いものの、チームメンバーに迷惑をかけたり、リポジトリを汚染したりするファイルです。
node_modules – リポジトリ肥大化の元凶
Node.jsの依存ライブラリが格納されるnode_modulesディレクトリは、数千〜数万のファイルを含みます。これを含めると、リポジトリサイズが爆発的に増え、cloneやpullに時間がかかるようになります。
package.jsonとpackage-lock.jsonがあればnpm installで復元できるため、Gitに含める必要はゼロです。
# .gitignoreに追加
node_modules/
npm-debug.logOSが自動生成するファイル
macOSの.DS_StoreやWindowsのThumbs.dbは、フォルダを開いただけでOSが勝手に作成するファイルです。これが含まれていると、コミットログが汚れるだけでなく、「この人、Mac使ってるんだな」とバレます(笑)。
実務のTips: プロジェクトごとに毎回除外設定を書くのは面倒です。PC全体で無視設定をしましょう。
# ~/.gitignore_global を作成
echo ".DS_Store" >> ~/.gitignore_global
echo "Thumbs.db" >> ~/.gitignore_global
# グローバル設定に登録
git config --global core.excludesfile ~/.gitignore_globalビルド生成物・コンパイル済みファイル
dist/、build/、__pycache__/などのビルド生成物は、ソースコードから自動生成できるため、バージョン管理する必要がありません。
これらを含めると、コードを1行変えただけで大量のバイナリ差分が発生し、Gitが重くなります。
# .gitignoreに追加
dist/
build/
__pycache__/
*.pyc
*.class
*.oエディタ・IDEの個人設定ファイル
.vscode/や.idea/などのエディタ設定ファイルは注意が必要です。プロジェクト共通の推奨設定(例:.vscode/settings.jsonの一部)は共有すべきですが、個人の好みに属する設定は除外するのがマナーです。
補足: Marpなどのツールを使う場合、.vscode/settings.jsonにカスタムテーマ設定を記述する必要があるため、共有が必要なケースもあります。プロジェクトの性質に応じて判断しましょう。
.gitignoreの正しい書き方と便利ツール
これらのファイルをGitの監視対象から外すには、プロジェクトルートに.gitignoreファイルを作成します。
# .gitignore の基本テンプレート
# セキュリティ関連
.env
.env.local
.env.*.local
*.pem
*.key
id_rsa
credentials.csv
*-credentials.json
# 依存関係
node_modules/
vendor/
# ビルド生成物
dist/
build/
__pycache__/
*.pyc
# データベース
*.sqlite3
*.db
dump.sql
# ログファイル
*.log
npm-debug.log
# OS関連
.DS_Store
Thumbs.db便利ツール:gitignore.io
「いちいち書くのが面倒くさい!」という方は、gitignore.io を使いましょう。OS(macOS、Windows)や言語(Node、Python、Java)を入力するだけで、最適な.gitignoreの内容を自動生成してくれます。
「やべっ、もう上げちゃった!」緊急対処法
もし.envなどの機密情報をすでにGitHubにpushしてしまった場合、慌ててファイルを削除して再度pushしてもダメです。 Gitの履歴に残っているため、過去のコミットを見ればパスワードが見えてしまいます。
最優先:パスワード・APIキーを無効化する
何よりも先に、流出した鍵を無効化・再発行してください。 履歴から消す作業をしている間にも、攻撃者はBotを使って秒速で鍵を利用してきます。
- AWSの場合:IAMコンソールからアクセスキーを無効化
- GCPの場合:サービスアカウントキーを削除
- APIキーの場合:提供元のダッシュボードで再発行
補足: GitHubや主要クラウドには「シークレットスキャン機能」があり、公開されたコードの中にキーが含まれていないか自動監視しています。「GitHubから警告メールが来た」「AWSからキーを無効化したと連絡が来た」という場合は、この機能があなたを守ってくれた証拠です。
Git履歴から完全に抹消する
ただの削除コミットではなく、過去の履歴そのものを書き換える必要があります。現在推奨されているツールは以下の2つです。
- git-filter-repo(Git公式推奨):Python製で高速
- BFG Repo-Cleaner:Java製でコマンドがシンプル
昔はgit filter-branchが使われていましたが、処理が遅く事故りやすいため、現在は非推奨です。
# git-filter-repo を使った例
pip install git-filter-repo
git filter-repo --path .env --invert-paths
# リモートに強制プッシュ(注意:チーム開発では事前共有必須)
git push origin --force --all初心者向けの最終手段: コマンドでの履歴操作に自信がない場合、チーム開発でなく自分だけのリポジトリであれば、「リポジトリごと削除して作り直す」のが一番確実で安全な場合もあります。
まとめ:Gitは記録ツール、秘密は記録しない
GitHubは便利なバージョン管理ツールですが、「公開してはいけない秘密」まで記録する必要はありません。
- プロジェクト作成時に
.gitignoreを必ず設定 .env、認証ファイル、SSH鍵は絶対にpushしない- 流出してしまった場合は、鍵の無効化を最優先
- 履歴からの削除には専用ツールを使用
リポジトリを綺麗に保つことは、バグを防ぎ、チーム開発を円滑にする第一歩です。「あ、これ.gitignoreに入れてなかった!」と気づいたら、今すぐ追加しておきましょう。
安全で快適なGitHubライフを!
GitHub管理をさらに強化する関連記事
GitHubのセキュリティ管理を習得したら、開発環境全体のセキュリティと効率化も強化していきましょう:
開発環境のセキュリティ強化
- Claude Code Securityとは?AIが脆弱性を検出し修正パッチまで提案する新時代のセキュリティツール – AIを活用したコードセキュリティチェックで、pushする前に脆弱性を発見
- VS Code人気拡張機能に重大脆弱性!Live Server等3つの緊急対応ガイド – 開発環境のセキュリティリスクと対処法
- 個人開発の利用規約・プライバシーポリシーの作り方|テンプレ活用からAI生成まで実践ガイド – 公開前に必要な法的保護の準備
AIを活用した開発効率化
- git-lrc – Gitコミット時にAIが自動コードレビューする無料開発支援ツール – コミット前にAIがコードをチェックしてくれる便利ツール
- Straion – AIコーディングエージェントのルール管理を一元化する開発支援プラットフォーム – AI開発時代の新しいコード管理手法
- Claudebin – Claude Codeセッションを共有可能なURLで保存・復元できる開発者向けツール – AIコーディングセッションの効率的な共有方法

