解決したい問題
設定ファイルに環境に依存した項目があり、これをローカル環境と本番環境とで変更する必要がある。しかし、環境変数等で適切に切り替える仕組みが存在せず、いちいち手動で修正している。
例
設定ファイル
LOG_DIR=/var/log/hoge
ソース
File logDir = new File(properties.getProperty("LOG_DIR");
理想
設定ファイル
LOG_DIR=/var/log/hoge
LOG_DIR_DEV=C:\log\hoge
ソース
if (env.equals("production")) { // 本番環境
File logDir = new File(properties.getProperty("LOG_DIR");
} else {
File logDir = new File(properties.getProperty("LOG_DIR_DEV");
}
むしろ今なら「動作確認用の環境をVagrant等で作る」のが王道ですかね?
現実
設定ファイル
# LOG_DIR=/var/log/hoge
LOG_DIR=C:\log\hoge
- 設定ファイルを「変更なしを想定」にして、ブランチを切り替えるたびに修正
→ めんどくさい!! - あれ、いつの間にか「変更なしを想定」じゃなくなってる…
→ 間違えて本番リリースしてしまった!!!
解決方法
- 設定ファイル専用ブランチを用意し、それに修正をコミットする。
- 動作確認時にrebaseする。
例
設定ファイル@master,developブランチ
LOG_DIR=/var/log/hoge
あるタイミングでdevelopブランチからlocal/mynameブランチを切り、そちらでローカル用の修正&コミットを行う。
LOG_DIR=C:\log\hoge
開発フロー
- developブランチからtopicブランチを切る。
- 開発→コミットする。
- local/mynameブランチに切り替え、topicブランチからrebaseする。
- 動作確認を行う。
- 不具合が見つかったら、hotfixブランチを切り、そこに修正をコミット。
- 動作確認が終わったらtopicブランチに戻る。
- hotfixブランチから変更をcherry-pickで取り込む。
- 使い終わったhotfixブランチは破棄する。
- topicブランチをpushする。
- レビュー後、topicブランチはdevelopにマージされる。
local/mynameブランチは使い回しでOKです。
元の設定ファイルへの変更は、リベースにより取り込まれます。もちろん、設定ファイルに対する変更はそれぞれ(master,develop <=> local/myname)でバージョン管理されます。
うっかりミスでローカル修正分がdevelopに混入する危険もありません。