モダンなクラウドアプリケーション開発のベストプラクティスの一つである「The twelve-Factor App」が取り上げられることが多くなった。ビジネスの変化にICTが遅れずについていくためには、エンタープライズ分野の開発も、このプラクティスを取り入れていくべきだ。本稿では、エンタープライズシステムの開発・運用の視点から、従来行われてきたことと比較しながらTwelve-Factor Appを読み解く。シリーズ第2週となる今週は、「環境への展開を迅速にするためのプラクティス」をみていく。

 前回の5.ビルド、リリース、実行に続き、今回は「3.設定」を解説する。

3.設定

 「設定」という言葉は実に様々なものを表している。例えば、データベース接続先アドレスなどの実行環境の違いに対応するための設定。あるいは、O/RマッピングやURLマッピングといったアプリケーション実装のための設定。ショートカットキーなど、利用者の利便性向上のための設定もある。このように、一口に「設定」と言っても実はその目的や役割に応じて全く別のものを示している。

 これらの中、Twelve-Factor Appが議論の対象としている「設定」は「実行環境の違いに対応するための設定」である。

OSの環境変数で設定する

 実行環境の違いに対応する設定を実現するためには、いくつかの方法が存在する。例えば開発フレームワークやアプリケーション独自形式の設定ファイル。それから、Javaのシステムプロパティのような開発言語固有の設定方式。あるいは、OSの環境変数などである。

 もちろん「アプリケーションの処理コード中にリテラルとして設定値を記述する」といったこともできなくはないが、実行環境の違いに対応しにくくなる。

 Twelve-Factor Appは実行環境の違いに対応する設定を実現するための手段として「OSの環境変数」を利用することを説く。環境変数は開発言語や開発フレームワークに依存しない。それゆえにアプリケーションのコードと環境依存の設定値を厳密に分離でき、ソースコード内に設定値が紛れ込むことを未然に防止できる、というのがその理由だ。

 また、これはTwelve-Factor Appに明言されているわけではないが、「設定箇所を選ばない」というのも環境変数の魅力だと筆者は考える。例えばJava のシステムプロパティをJava VMの外部から設定するためには、Java VMの起動オプションとして記述するしかないが、OSの環境変数であればそういった制約はない。設定・参照ともに自由度が非常に高いと言える。また、環境依存の設定値を1箇所にまとめて保存しておけるようになる、というメリットもある。