C#のプロジェクトのプロパティのビルドタブに、条件付きコンパイルの欄があります。実は、この条件付きコンパイルは、C#を使用したアプリケーション開発において非常に便利な機能です。
本記事では、条件付きコンパイルの基本的な使い方と、具体的な用途について紹介します。
条件付きコンパイルとは
条件付きコンパイルとは、プログラムをコンパイルする際に、特定のコード部分をコンパイル範囲に含めたり除外したりする技術です。例えば、デバッグ情報を出力するコードを開発中だけ有効にしたり、特定のユーザのみアプリケーションを分けて特別な機能を提供する場合などに、条件付きコンパイルを使用します。
サンプルコード
以下は、条件付きコンパイルの定数 SAMPLE の定義有無による条件付きコンパイルの例です。定数 SAMPLE が定義されている場合、コンソールに「SAMPLEは定義されています」と表示します。定数 SAMPLE が未定義の場合は、「SAMPLEは未定義です」と表示します。
using System;
class Program
{
static void Main()
{
#if SAMPLE
Console.WriteLine("SAMPLEは定義されています");
#else
Console.WriteLine("SAMPLEは未定義です");
#endif
}
}
SAMPLEを定義した場合
プロジェクトのプロパティで、条件付きコンパイルのシンボルを定義できます。以下のように”SAMPLE”を定義した場合のサンプルコードの動作を確認します。
実行結果:#if SAMPLE が真の場合の処理がコンパイルされました。
SAMPLEは定義されています
SAMPLEを定義しない場合
次に、プロジェクトのプロパティで、条件付きコンパイルのシンボルを空欄にした場合のサンプルコードの動作を確認します。
実行結果:#if SAMPLE が偽の場合の処理(#else側の処理)がコンパイルされました。
SAMPLEは未定義です
具体的な用途
ここでは、条件付きコンパイルの具体的な用途をいくつか紹介します。
開発中だけデバッグ情報を出力する
アプリケーションの開発中、通常は構成をDebugとしていると思います。
上記の設定をしている場合、Visual Studioは親切に、条件付きコンパイル用に DEBUG というシンボルを定義してくれています。
このため、自分で条件付きコンパイル欄に DEBUG と書かなくても、#if DEBUG と書く事により、デバッグ用コードを記述できます。
using System;
class Program
{
static void Main()
{
#if DEBUG
Console.WriteLine("デバッグ用のログファイルの出力を開始します。");
#endif
Console.WriteLine("プログラムの実行中...");
#if DEBUG
// デバッグ用のログファイルを出力する処理をここに記述
#endif
}
}
Debugモードで実行の場合
デバッグ用のログファイルの出力を開始します。
プログラムの実行中...
Releaseモードで実行の場合
プログラムの実行中...
特定のユーザ向けに機能を有効化する
新しい機能を段階的に導入する場合や、特定のユーザにのみ機能を提供する場合にも、条件付きコンパイルを使用できます。
たとえば、プレミアムユーザ用と通常ユーザ用で、提供するアプリケーションを分けてビルドする場合、以下のように条件付きコンパイルのシンボルを定義します。
ソースコード上では、#if PREMIUM_USER と書く事により、コンパイルする処理を選択できます。
using System;
class Program
{
static void Main()
{
#if PREMIUM_USER
Console.WriteLine("プレミアム機能にアクセスできます。");
#else
Console.WriteLine("基本機能のみ利用可能です。");
#endif
}
}
実行結果
プレミアム機能にアクセスできます。
デバッグ用の文字列を表示したい場合
デバッグ用の文字列を画面に表示したい、という場合には、条件付きコンパイルよりも手軽に利用できる Debug.WriteLine メソッドを使用する方法もあります。詳細は、以下の記事をご覧ください。
まとめ
本記事では、条件付きコンパイルの基本的な使い方と、具体的な用途について紹介しました。条件付きコンパイルは、デバッグコードの有効化や、機能の有無の制御など、さまざまな場面で活用が可能です。