Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

解決したい問題

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

設定ファイル

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に混入する危険もありません。

fullkawa
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away