LoginSignup
22
26

More than 5 years have passed since last update.

設定ファイルをバージョン管理するためのブランチ戦略

Posted at

解決したい問題

設定ファイルに環境に依存した項目があり、これをローカル環境と本番環境とで変更する必要がある。しかし、環境変数等で適切に切り替える仕組みが存在せず、いちいち手動で修正している。

設定ファイル

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

開発フロー

  1. developブランチからtopicブランチを切る。
  2. 開発→コミットする。
  3. local/mynameブランチに切り替え、topicブランチからrebaseする。
  4. 動作確認を行う。
  5. 不具合が見つかったら、hotfixブランチを切り、そこに修正をコミット。
  6. 動作確認が終わったらtopicブランチに戻る。
  7. hotfixブランチから変更をcherry-pickで取り込む。
  8. 使い終わったhotfixブランチは破棄する。
  9. topicブランチをpushする。
  10. レビュー後、topicブランチはdevelopにマージされる。

local/mynameブランチは使い回しでOKです。
元の設定ファイルへの変更は、リベースにより取り込まれます。もちろん、設定ファイルに対する変更はそれぞれ(master,develop <=> local/myname)でバージョン管理されます。
うっかりミスでローカル修正分がdevelopに混入する危険もありません。

22
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
26