[C#, VB.NET]環境変数を使用したコードの動作確認方法

【VB.NET / C#】ClickOnceと環境変数を使ったアプリ動作の切り替えと確認方法

アプリケーション開発において、「環境変数」を利用してアプリケーションの挙動を制御するのは、非常に一般的な手法です。特に、アプリケーションのデプロイ方法(例:ClickOnceなど)や実行環境(開発用・本番用など)に応じて処理を分岐したい場合、環境変数はとても便利な仕組みになります。

この記事では、ClickOnceを利用した.NETアプリケーションの挙動を環境変数で制御し、それをVB.NETおよびC#の両方で実装・確認する方法を、段階を追って解説していきます。


🔍 この記事でわかること

  • 環境変数を使った.NETアプリの挙動切り替え方法
  • Visual Studioでの環境変数設定方法
  • VB.NET / C# の実装例と動作確認
  • ClickOnceを使った本番環境に近いテスト手法
  • ユニットテストでの環境変数モック手法
  • 環境変数を使う際の注意点

🧪 なぜ環境変数を使うのか?

たとえば、アプリケーションがClickOnceを使ってネットワークからインストールされて実行された場合、特定の処理(バージョン表示や、ログ収集など)を行いたいケースがあります。しかし、コード上で ApplicationDeployment.IsNetworkDeployed を直接使うと、ClickOnceを使わずに実行したときに例外が発生する恐れもあるため、柔軟な方法として「環境変数を使って動作を切り替える」という手法が活躍します。


🧾 VB.NETでの実装例

If Environment.GetEnvironmentVariable("ClickOnce_IsNetworkDeployed")?.ToLower() = "true" Then
    Dim version = Environment.GetEnvironmentVariable("ClickOnce_CurrentVersion")
    ' TODO: version情報があっているか確かめたい
   Version_System = "Ver." + version
End If

このコードは、環境変数 ClickOnce_IsNetworkDeployed"true" に設定されている場合にのみ、バージョン情報を取得し、それを Version_System に代入します。


🧾 C#での実装例

if (Environment.GetEnvironmentVariable("ClickOnce_IsNetworkDeployed")?.ToLower() == "true")
{
    var version = Environment.GetEnvironmentVariable("ClickOnce_CurrentVersion");
    Version_System = "Ver." + version;
}

VB.NETとC#では構文こそ異なるものの、基本的なロジックは共通です。


✅ 開発中に動作を確認する方法

1. Visual Studioで環境変数を設定する方法

開発中に手軽に環境変数を設定する方法として、Visual Studioのプロジェクトプロパティから設定する方法があります。

  1. プロジェクトを右クリックし、「プロパティ」を開きます。
  2. 「デバッグ」タブを選択します。
  3. 「環境変数」の項目に以下を追加します:
    • ClickOnce_IsNetworkDeployed : true
    • ClickOnce_CurrentVersion : 1.0.0.0

こうすることで、デバッグ実行時にこれらの環境変数がプロセススコープで適用され、コードで取得できるようになります。


2. システム環境変数として設定(注意)

Windowsの「システム環境変数」に設定することで、OS全体のプロセスから参照できるようにもできますが、これは開発中には推奨されません。誤って他のアプリに影響を与えてしまう可能性もあるため、基本はVisual Studioのデバッグ設定で十分です。


3. デバッグとログ出力による確認

以下のようにログをコンソール出力することで、環境変数が正しく設定され、意図通りの分岐がされているかを確認できます。

VB.NET版ログ付きコード

Dim isDeployed = Environment.GetEnvironmentVariable("ClickOnce_IsNetworkDeployed")?.ToLower()
Console.WriteLine($"IsNetworkDeployed: {isDeployed}")
If isDeployed = "true" Then
    Dim version = Environment.GetEnvironmentVariable("ClickOnce_CurrentVersion")
    Console.WriteLine($"CurrentVersion: {version}")
    Version_System = "Ver." + version
Else
    Console.WriteLine("ClickOnce deployment is not detected.")
End If

C#版ログ付きコード

var isDeployed = Environment.GetEnvironmentVariable("ClickOnce_IsNetworkDeployed")?.ToLower();
Console.WriteLine($"IsNetworkDeployed: {isDeployed}");
if (isDeployed == "true")
{
    var version = Environment.GetEnvironmentVariable("ClickOnce_CurrentVersion");
    Console.WriteLine($"CurrentVersion: {version}");
    Version_System = "Ver." + version;
}
else
{
    Console.WriteLine("ClickOnce deployment is not detected.");
}

4. ClickOnceによる本番形式のテスト

実際にClickOnceでアプリケーションを発行し、インストールして実行することで、環境変数を自動で設定した状態での挙動も確認できます。ClickOnceでは、ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString() を使ってバージョンを取得できますが、これを環境変数に設定しておくことで、アプリケーションロジックからも取得可能になります。


5. ユニットテストでの環境変数テスト

ユニットテストで環境変数を使ったコードをテストするには、テスト実行前に Environment.SetEnvironmentVariable() を使って変数を設定できます。


⚠️ 環境変数を扱う際の注意点

  1. 大文字・小文字に注意
    環境変数はWindows環境では大文字小文字を区別しませんが、コード上の文字列比較では区別される可能性があります。.ToLower().Equals(x, StringComparison.OrdinalIgnoreCase) を使うのが安全です。
  2. nullチェックは必須
    指定した環境変数が存在しない場合、GetEnvironmentVariablenull を返します。これをそのまま使うと NullReferenceException が発生することがあるため、null条件演算子(?.)を使うか、明示的なnullチェックを行いましょう。
  3. 本番では別の設定方法も検討
    ClickOnce環境では環境変数よりも、アプリケーション設定ファイル(app.configuser.config)を利用することも検討できます。

📝 まとめ

環境変数を活用することで、開発と本番環境の違いに柔軟に対応でき、ClickOnceなどのデプロイ形式に応じた挙動制御が可能になります。VB.NETとC#のコードも非常に似ており、どちらでも同様の実装が行えます。

開発中にはVisual Studioでの環境変数設定、ログ出力、ステップ実行、ユニットテストを活用し、確実に正しい動作を確認しましょう。


📌 最後に

環境に応じた設定をコードで判断できるようになると、より堅牢で柔軟なアプリケーションを構築できるようになります。ClickOnceや環境変数といった仕組みをうまく活用し、開発効率と信頼性を両立させていきましょう!

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です