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