さて、時代はクラウドですね。 ということでクラウド使う場合はどうなの?っていうケースです。
ASP.NET MVC では Web.config に設定を書きます。 開発中はローカルにあるエミュレーターとかを使うという感じにしておけば Web.config にはとりあえず開発ローカルエミュレーターとかに繋ぐために情報などを入れておけばいいでしょう。
こんな感じで。
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="webpages:Version" value="3.0.0.0"/> <add key="webpages:Enabled" value="false"/> <add key="ClientValidationEnabled" value="true"/> <add key="UnobtrusiveJavaScriptEnabled" value="true"/> <add key="Secret" value="ローカルの秘密情報だよ!"/> </appSettings> <!-- 省略 -->
もし、この情報すらリポジトリに入れたくない場合は、その1で紹介した方法で入れないようにすればいいでしょう。 読み取り方はいつも通り ConfigurationManager になります。
using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Web; using System.Web.Mvc; namespace SecretSample.Controllers { public class HomeController : Controller { // GET: Home public ActionResult Index() { ViewBag.Secret = ConfigurationManager.AppSettings["Secret"]; return View(); } } }
本筋とは関係ないですが、cshtml 側で以下のように表示するようにしました。
@{ ViewBag.Title = "Index"; } <h2>Index</h2> <p>@ViewBag.Secret</p>
実行すると以下のような感じです。
ここまでは問題ないでしょう。
本番環境ではどうする?
クラウドにデプロイしたらどうなるか?というところですが Microsoft Azure の App Service 系のサービスには「アプリケーション設定」という項目があって、そこに Web.config で設定している AppSettings や ConnectionStrings が指定可能です。
おそらくちゃんとやるなら、どこかの自動ビルドの仕組みからデプロイしてると思うので .gitignore とかに指定してれば変なファイルがもぐりこむこともありません。
完璧!しかも config ファイルに書くよりもこっちのほうが優先されます。
つづく
次はもっと秘密にしたい情報についてどうするかということを書きたいと思います。