タグ: ClickOnce

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

    [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や環境変数といった仕組みをうまく活用し、開発効率と信頼性を両立させていきましょう!