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

 前回までの5.ビルド、リリース、実行3.設定に続き、今回は「4.バッキングサービス(連携サービス)」を解説する。

4.バッキングサービス(連携サービス)

 バッキングサービスとは、アプリケーションが通常の動作の中でネットワーク越しに利用する全てのサービスのことを言う。より分かりやすく言い換えるなら「連携サービス」のことである(以降、連携サービスと表記する)。Twelve-Factor Appでは、データストア、メッセージキューイングシステム、電子メールを送信するためのSMTPなどが挙げられている。

 連携サービスは、ローカルサービスとサードパーティーサービスに分けられる。ローカルサービスとは、企業が自社で保有するサービスである。近年では、このようなローカルサービスに加えて、サービス事業者によって提供されるサービスを利用することもあり、それがサードパーティサービスだ。例えば、Amazon S3のようなパブリッククラウドやWebAPIでアクセス可能なTwitterやGoogle Mapsのようなサービスのことである。

 Twelve-Factor Appでは、「バッキングサービス(ネットワーク越しの連携先)をアプリケーションにアタッチされるリソースと考え、コードの変更なしに切り替えられるべき」と説いている。

設定によって素早く切り替える

 Twelve-Factor Appの考えをもう少し詳しく解説する。Twelve-Factor Appでは、アプリケーションのコードに変更を加えなくても、設定に格納されたアクセス情報を変更するだけで、連携サービスの切り替えができるべきである、としている。具体的には、アプリケーションは設定に格納されたURIやその他のロケーター、情報資源などを参照することで連携サービスにアクセスする。コード内には連携サービスにアクセスする情報などを記述せず、コードと連携サービスを疎結合にする(図1)。

図1●Twelve-Factor Appが指摘するサービス連携の仕方
図1●Twelve-Factor Appが指摘するサービス連携の仕方
[画像のクリックで拡大表示]

 このように、設定によって連携サービスを切り替え可能にすることで、短時間で柔軟に連携サービスを変更できるようになる。簡単に連携サービスを切り替えられることは、アジャイル開発などで、短いサイクルでイテレーションを回すときなどに効果を発揮する。開発・本番などの実行環境ごとに、連携サービスを呼び出すコードを変更する必要もなくなる。運用時でも、連携先のシステム・サービスの動作がおかしいときに、素早く連携先を切り替えて、予備の連携サービスに切り替えられる。