2020-01-07 更新

複数の環境(開発、ステージング、本番)で処理を分ける方法

ASP.NET Coreで作成したWebアプリケーション内で、開発やステージング、本番といった環境毎に処理を分けたり、デバッグでそれぞれの環境をテストしたい場合などの設定についてです。

目次

  • 開発環境
  • 本番、ステージング環境
  • 参考リンク

開発環境

開発環境の場合、Visual Studio(2017)のプロジェクトのデバッグ設定にある環境変数に、開発、ステージング、本番といった状態を設定します。

※プロジェクトの新規作成時にデフォルトで「ASPNETCORE_ENVIRONMENT」に「Development」が設定されています。

この環境変数には基本的に以下の値を設定することが可能。

  • Development:開発
  • Staging:ステージング
  • Production:本番

上記以外のものを設定した場合、エラーにはなりませんが、デフォルトで判定用のメソッドが用意されていないので、自分で作成する必要があります。

環境によって処理を変える場合、以下のように呼び出して使用します(下記のコードはコントローラで呼び出した場合の例)。


public class HomeController : Controller
{
    protected readonly HostingEnvironment env;

    public HomeController(IHostingEnvironment env)
    {
        this.env = (HostingEnvironment)env;
    }

    public IActionResult Index()
    {
        if (this.env.IsDevelopment())
        {
            ViewData["Environment"] = "Development";
        }
        else if (this.env.IsProduction())
        {
            ViewData["Environment"] = "Production";
        }
        else if (this.env.IsStaging())
        {
            ViewData["Environment"] = "Staging";
        }
        else
        {
            ViewData["Environment"] = "None";
        }
        return View();
    }
}

ViewData["Environment"]に格納したものを画面に出力すると以下の通り。

本番、ステージング環境

続いて本番やステージングなどの環境(今回はCentOS)の場合、サービス作成時に、この環境変数の値を設定してやらないといけません。

サービスファイル


vi /etc/systemd/system/example.webapp.service

サービスファイルの内容


[Unit]
Description=example webapp

[Service]
WorkingDirectory=/var/webapps/example
ExecStart=/usr/bin/dotnet /var/webapps/example/example.dll
Restart=always
RestartSec=10
SyslogIdentifier=example
User=nginx
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

上記の「Environment=ASPNETCORE_ENVIRONMENT」に「Staging」や「Production」といった値を設定します。

該当の環境変数が存在しない場合、そのアプリケーションは「Production」として実行されます(開発環境も同様)。これは間違って設定してしまった場合に、本番環境にデバッグログなどの余計な情報を出力させないためのようです。

参考リンク

ASP.NET Core】関連記事