Objective
GitリポジトリにAPIキーやパスワードなどの秘密情報をうっかりコミットしてしまうことを防ぎ,安全に設定ファイルや認証情報を扱えるようにする.
Goal
秘密情報を Gitのバージョン管理から除外しつつ,チームやデプロイ環境で 再現性のある設定方法を提供する.
Guidline
.gitignore
に秘密情報のあるファイルやディレクトリを追加するconfig.yml
,.env
,secrets.json
などのファイルを.gitignore
に追加します設定ファイルのテンプレート(雛形)をリポジトリに含める
config/config_template.yml
や.env.example
のような中身がダミーのファイルを追加し,必要な構造を共有します.その後,READMEなどに,実際の設定ファイルの作成方法を記載しますコードでは環境変数を使って設定を読み込む
ソースコードにAPIキーのような機密情報をハードコーディングする代わりに,実行時に環境変数から読み込むようにします
import yaml with open("../config/config.yml", "r") as file: = yaml.safe_load(file) config
もし秘密情報を誤ってコミットしてしまったら?
APIキーなどの秘密情報を誤ってコミットしてしまった場合,ファイルを削除したりキーを更新しても,Gitの履歴には依然として残っており,他人がアクセスできる可能性があります.履歴から完全に削除する必要があり,そのためには
BFG Repo-Cleaner
のようなツールを使うことが推奨されます.
Example in my project
開発環境におけるシークレット管理
.gitignore
にconfig/
を記載# .gitignore config/
テンプレートファイルの準備:
config/config_template.yml
実際の認証情報の構造を示す,安全で機密情報を含まないサンプルの設定ファイルを作成します
# config/config_template.yml api_config: api_url: "https://hogehoge" api_key_id: "hogehoge" api_secret: "hogehoge"
.gitignore
で無視されているフォルダ内にあるため,-f
(強制)オプションを付けて手動でコミットしますgit add -f config/config_template.yml git commit -m "ENV: Add config template for API config"
config.yml
の作成方法手順書作成実際の設定ファイルの作成方法を簡単に説明したメモ(例:READMEファイル内)を用意します.
cp config/config_template.yml config/config.yml
その後,
config.yml
を手動で編集し,各プレースホルダーの値を実際の秘密情報に置き換えます.api_config: api_url: "https://your.api.endpoint" api_key_id: "your_api_key_id" api_secret: "your_secret_token"
Create passwords.txt under config/ for use with BFG Repo-Cleaner
もし秘密情報を誤ってコミットしてしまった場合に備え,Git履歴から削除するための秘密情報リストを準備します
your_api_key_here==>REMOVED secret_token_123==>REMOVED
BFG Repo-Cleaner用
password.txt
のフォーマットは以下original_string==>replacement_string
もし秘密情報を誤ってコミットしてしまったら?
Gitの履歴から機密情報を削除するためのBFGの使い方は以下の通りです:
bfg --replace-text .bfg/passwords.txt
git reflog expire --expire=now --all
git gc --prune=now --aggressive
git push -f
コマンド | 説明 |
---|---|
bfg --replace-text ... |
リポジトリの履歴内の秘密情報を置き換えます |
git reflog expire |
内部のバックアップ参照を削除します |
git gc |
不要なコミットをガベージコレクト(削除)します |
git push -f |
クリーンな履歴を強制的にリモートにプッシュします(⚠️ チームと調整してください) |
Appendix: :BFG Repo-Cleaner のインストール方法
2025年6月3日現在、最新バージョンは v1.15.0 です。
BFG JAR ファイルのダウンロード
wget
コマンドを使って、BFG バージョン 1.15.0 の JAR(Java ARchive)ファイルを Maven Central(公式のJavaパッケージリポジトリ)からダウンロードします。% cd <your-target-directory> % wget https://repo1.maven.org/maven2/com/madgag/bfg/1.15.0/bfg-1.15.0.jar
ダウンロードが完了すると、次のようにファイルが確認できます:
% ls bfg-1.15.0.jar
(任意)ツール用ディレクトリに移動してエイリアスを作成する
macOS や多くの Linux 環境で一般的な Zsh を使用している場合は、
.zshrc
にエイリアスを追加します:% echo "alias bfg='java -jar <your-target-directory>/bfg-1.15.0.jar'" >> ~/.zshrc % source ~/.zshrc
Bash を使用している場合は、代わりに
.bashrc
を編集してください:% echo "alias bfg='java -jar ~/.tool.d/bfg-1.15.0.jar'" >> ~/.bashrc % source ~/.bashrc
設定が正しく動作するか確認
以下のコマンドを実行して、bfg エイリアスが正しく機能するかを確認します:
% bfg --help