Spring BootでGit管理したくない設定を扱う方法を考えてみた
モチベーション
VSCodeでSpring Boot Dashboard: Run ...するとカレントディレクトリー直下の.envファイルを読み取って[1]環境変数へ設定した状態でSpring Bootアプリケーションを起動してくれます。
この機能を利用するとクラウドサービスのAPIキーのようにGit管理したくない設定を.envへ書いておけるので便利です。
ただ、ターミナルからmvn spring-boot:runでアプリを起動[2]した場合やテストを実行した場合は.envを読み取ってくれません。
そのため、.env以外にGit管理したくない設定を扱う方法が欲しくなりました。
採用している方法
config/secret/application.propertiesを作成し、Git管理したくない設定をこちらに書きます。
プロジェクトのディレクトリー構成は次のようになります。
.
├── pom.xml
├── config
│ └── secret
│ ├── .gitignore
│ └── application.properties
└── src
└── main
├── java
└── resources
└── application.properties
config/secret/.gitignoreの内容を次のようにしてconfig/secretディレクトリ配下のファイルをGit管理しないようにします。
*
Spring Bootではリファレンスの2.3. External Application Propertiesにあるようにクラスパス直下以外にもいくつかの場所からapplication.propertiesを読み取ってくれますが、今採用している方法はこの仕様を利用しています。
これまで採用していた方法を紹介
前述の方法を採用するまでにもいくつかの方法を採用していましたので、それらを紹介しておきます。
環境変数を使用する
単純にターミナルで環境変数を設定するだけです。
ターミナルを開き直すたびに設定しないといけなくて煩わしかったです。
src/main/resources/application-default.propertiesに書く
Spring Bootはapplication-{profile}.propertiesも読み取ってくれます。
デフォルト[3]だとプロファイルは設定されておらずdefaultプロファイルへフォールバックされます。
そのためapplication-default.propertiesが読み取られます。
また、.gitignoreにapplication-default.propertiesを追加してGit管理されないようにします。
微妙な点はあるけれど悪くない方法だと思っていたのですが、次のようなことがあってやめました。
私は途中まで書いたけどボツにしたコードを消すため、git clean -xdf srcを実行することがたまにあります。
その際にsrc/main/resources/application-default.propertiesも一緒に消えてしまいました。
まとめ
以上のことからGit管理しない設定を扱うには、今はconfig/secret/application.propertiesを用いるのが良い方法だと感じています。
-
launch.jsonに書かれている"envFile": "${workspaceFolder}/.env"を編集すればパスを変更できると思います。 ↩︎ -
主にデバッグ目的でターミナルからアプリを起動したい場合もままあります。 ↩︎
-
Spring Initializrでプロジェクトを生成した直後の状態を指しています。 ↩︎
Discussion