モバイルアプリのBuild Config — 概要、設定方法、動作原理

著者: IT Sectr 公開日: 2026-06-01 読了時間: 9 分

Build Configにはビルドパラメータが含まれます:ビルドタイプ、コンパイルフラグ、署名キー、SDKバージョン。これらは、アプリケーションが異なる環境向けにどのようにビルドされるかを決定します。Android Developers Guide (2026)によると、Gradleビルドシステムは柔軟な構成のためにProduct FlavorsとBuild Typesをサポートしています。Build Configは、手動でのコード変更なしにdebugとreleaseの切り替えを自動化します。

重要なポイント

  • Build Configは、どのように、どのフラグで、どのプラットフォーム向けにアプリケーションをビルドするかを定義するビルドパラメータのシステムです。
  • AndroidのGradleは、独立した構成でBuild Types(debug、release)とProduct Flavors(デモ、フルバージョン)をサポートしています。
  • Xcodeは、コンパイルフラグと署名を設定するためにBuild Configurations(Debug、Release)とBuild Settingsを使用します。
  • BuildConfig.javaはAndroidで生成されるクラスで、現在のビルド構成の値を持つフィールドを含みます。
  • 自動化されたBuild ConfigはCI/CDパイプライン(GitLab CI、GitHub Actions)と統合し、さまざまなフレーバーをビルドします。

モバイル開発におけるBuild Configとは

Build Configとは、モバイルアプリケーションのコンパイル、ビルド、パッケージングのプロセスを定義する設定の集合です。ビルド構成には、ターゲットプラットフォームの選択、最小SDKバージョン、最適化フラグ、署名キー、環境変数が含まれます。

現代のモバイルプロジェクトに単一のビルド構成しかないことはめったにありません。通常、複数の構成があります:debug(デバッグありの開発用)、release(最適化ありの本番用)、staging(実データでのテスト用)、およびさまざまなフレーバー(デモ、フル、エンタープライズ版)。

Gradle Build Tool Survey(2025)によると、平均的なAndroidプロジェクトは3.2の異なるビルド構成を使用し、iOSプロジェクトは2.8を使用しています。各構成は、独自のコンパイルフラグ、署名証明書、サーバーURLを持つことができます。

Build Configの主なタスクは、これらの構成間の切り替えを自動化することです。開発者はサーバーURLやデバッグフラグを手動で変更する代わりに、IDEで目的のBuild Variantを選択すると、ビルドシステムが対応するパラメータを自動的に適用します。

Build Configの適切な設定は、アプリケーションのセキュリティに重大な影響を与えます:debugビルドには詳細なログ、DBインスペクタ、デバッグ用エンドポイントが含まれており、これらはreleaseバイナリから物理的に除外する必要があります。GradleはBuild Typesを通じてこれを解決します:debugではdebuggable trueフラグを、releaseではProGuardとともにminifyEnabled trueを設定できます。iOSはSwift Active Compilation Conditionsを通じて同じことを達成し、#if DEBUG内のコードはrelease構成ではコンパイルされません。

AndroidのBuild Config:GradleとBuildConfig

AndroidはGradleビルドシステムを2つの主要な概念で使用します:Build TypesとProduct Flavors。それらの組み合わせがBuild Variantsを形成し、各バリアントは独自の完全なビルド構成を持ちます。

Build Types:DebugとRelease

Build Typeは、アプリケーションがどのようにビルドされるかを定義する構成です。デフォルトでは、Gradleは2つのタイプを作成します:debug(デバッグあり、難読化なし)とrelease(ProGuard/R8あり、公開用に署名済み)。開発者は独自のタイプ(staging、benchmark、qa)を追加できます。

kotlin
// build.gradle.kts
android {
    buildTypes {
        debug {
            isDebuggable = true
            buildConfigField("String", "API_URL", "\"http://dev.api.com\"")
        }
        release {
            isMinifyEnabled = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
            buildConfigField("String", "API_URL", "\"https://prod.api.com\"")
        }
    }
}

Product Flavors:アプリケーションバージョン

Product Flavorsを使用すると、単一のコードベースから同じアプリケーションの異なるバージョンを作成できます。例:広告付きの無料版、広告なしの有料版、追加機能付きのエンタープライズ版。各フレーバーは独自のapplicationId、リソース、SDK依存関係を持つことができます。

kotlin
android {
    productFlavors {
        register("demo") {
            applicationId = "com.example.app.demo"
            versionNameSuffix = "-demo"
        }
        register("full") {
            applicationId = "com.example.app"
            versionNameSuffix = ""
        }
    }
}

BuildConfigクラス:コードからのアクセス

各Build Variantに対して、Gradleは構成フィールドを持つBuildConfigクラスを生成します。開発者はbuildConfigFieldを介してカスタムフィールドを追加し、標準フィールド(DEBUG、APPLICATION_ID、BUILD_TYPE、VERSION_CODE、FLAVOR)は自動的に作成されます。

kotlin
// コード内でのBuildConfigの使用
class NetworkModule {
    fun createApiClient(): ApiClient {
        return if (BuildConfig.DEBUG) {
            ApiClient(
                baseUrl = BuildConfig.API_URL,
                interceptor = HttpLoggingInterceptor()
            )
        } else {
            ApiClient(baseUrl = BuildConfig.API_URL)
        }
    }
}

BuildConfigを使用すると、ビルド時に機能を有効または無効にすることもできます。たとえば、FEATURE_CHAT_ENABLEDフィールドを追加して、アプリケーションのフルバージョンでのみチャットを有効にし、ランタイムチェックやコード内の条件演算子を排除できます。

ネットワークリクエストのデバッグには、DEBUGフィールドを持つBuildConfigを使用して、debugビルドでのみOkHttpにHttpLoggingInterceptorを自動的にアタッチできます。これにより、開発者が誤ってリリースビルド前にログ記録を削除し忘れた場合でも、本番環境でHTTPリクエストが記録されないことが保証されます。

iOSのBuild Config:XcodeとBuild Settings

iOSエコシステムでは、Build ConfigはXcode Build Settingsを介して管理されます。これはパラメータのテーブルであり、各パラメータは異なる構成(Debug、Release、Staging)に対して異なる値を持つことができます。

Xcode Build Configurations

デフォルトでは、Xcodeは2つの構成を作成します:Debug(開発用、最適化なし)とRelease(本番用、-Os最適化あり)。開発者はProject > Info > Configurationsメニューから独自の構成を追加できます。

各構成に対して、Build Settingsが設定されます:コンパイラフラグ(OTHER_SWIFT_FLAGS、GCC_PREPROCESSOR_DEFINITIONS)、コード署名(CODE_SIGN_IDENTITY)、プロビジョニングプロファイル、エンタイトルメント。Xcodeはこれらの設定をproject.pbxprojファイルに書き込みます。

xcconfig:外部設定ファイル

Build Settingsを便利に管理するために、iOS開発者は.xcconfigファイルを使用します。これはKEY = VALUE形式のパラメータを持つテキストファイルです。Xcode用の.envに類似しており、値はプロジェクトに接続され、project.pbxprojの設定を上書きします。

env
// Debug.xcconfig
BUNDLE_ID_SUFFIX = .debug
API_BASE_URL = http://localhost:8080
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG
CODE_SIGN_IDENTITY = Apple Development

// Release.xcconfig
BUNDLE_ID_SUFFIX =
API_BASE_URL = https://api.production.com
SWIFT_ACTIVE_COMPILATION_CONDITIONS =
CODE_SIGN_IDENTITY = Apple Distribution

Info.plist:実行時設定

Build Configのパラメータの一部はInfo.plist(iOSアプリケーションのマニフェストファイル)に格納されます。Info.plistを介して、URLスキーム、権限(カメラ、マイク)、バックグラウンドモード、サードパーティサービスログイン設定が構成されます。

xcconfigの値は、$(VARIABLE_NAME)構文を使用してInfo.plistに代入できます。たとえば、Info.plist内の$(API_BASE_URL)はアクティブなビルド構成に応じて展開されます。これにより、すべてのAppleプラットフォームの環境パラメータ管理が一元化されます。

CI/CDパイプラインにおけるBuild Config

現代のプロジェクトでは、Build Configは継続的インテグレーションシステム(GitLab CI、GitHub Actions、Bitrise、CircleCI)と統合されます。各パイプラインは、CI/CDシステムの環境変数を介してBuild Configパラメータを上書きできます。

CIにおけるGradle Build Config

Androidの場合、CIパイプラインは指定されたBuild VariantでGradleを実行します:./gradlew assembleFullRelease。署名パラメータはCI変数(STORE_PASSWORDKEY_ALIAS)を介して渡されます。Gradleは実行時環境からそれらを読み取り、build.gradle.ktsに代入します。

kotlin
// build.gradle.kts — CI変数からの読み取り
android {
    signingConfigs {
        register("release") {
            storeFile = file(System.getenv("KEYSTORE_PATH") ?: "debug.keystore")
            storePassword = System.getenv("STORE_PASSWORD") ?: ""
            keyAlias = System.getenv("KEY_ALIAS") ?: "key"
            keyPassword = System.getenv("KEY_PASSWORD") ?: ""
        }
    }
}

CIにおけるXcode Build Config

iOSの場合、CIは構成フラグとともにxcodebuildを使用します:-configuration Release。署名証明書はCI secretsを介して、プロファイルはApple Developer Portal APIまたはFastlane matchを介して提供されます。

FastlaneツールはBuild Config管理を自動化します:xcconfigの生成、Info.plistのバージョン更新、ビルドされたIPAへの署名、App Store Connectへのアップロード。Fastlane gym(ビルド)とmatch(署名)はiOS CIパイプラインの標準です。

Bitrise Build Report(2025)によると、CIでBuild Configを設定したプロジェクトは、手動ビルド設定時間を73%削減し、署名エラーを89%削減します。自動化されたBuild Configは、プロダクション対応パイプラインの必須要素です。

もう1つの重要な側面は、Build Configによるバージョニングのパラメータ化です。GradleはCI変数からversionCodeとversionNameを読み取り、build.gradle.ktsに動的に代入できるため、開発者間のバージョンの非同期を排除します。iOSでは、agvtool(Apple Generic Versioning Tool)を介して同様のタスクが解決され、gitタグまたはCIのビルド番号に基づいてビルド番号をインクリメントできます。

よくある質問

AndroidのBuild TypeとProduct Flavorの違いは何ですか?

Build Type(debug、release)はアプリケーションがどのようにビルドされるかを定義します(デバッグあり/なし、最適化あり/なし)。Product Flavor(デモ、フル)はどのバージョンがビルドされるかを定義します(異なるapplicationId、SDK、リソース)。それらの組み合わせはBuild Variantと呼ばれます。

Build ConfigからAndroidコードに値を渡すには?

build.gradle.ktsのbuildConfigFieldメソッドを使用します。フィールドは自動生成されるBuildConfigクラスに追加され、コード内でBuildConfig.フィールド名として利用可能になります。文字列の場合、値をエスケープされた引用符で囲む必要があります。

iOSで複数の環境(development、staging、production)を設定するには?

.xcconfigファイルを使用します。環境ごとに1つずつです。Project > Info > ConfigurationsでDebug/Staging/Release構成を追加し、それぞれが独自のxcconfigを参照します。値は$(VAR_NAME)構文を使用してInfo.plistに代入されます。

コード内のフラグではなくBuildConfigを使う理由は?

BuildConfigはビルド構成をアプリケーションロジックから分離します。コード内のフラグは、環境の切り替え時に手動での変更と再コンパイルが必要です。BuildConfigは、IDEまたはCIでBuild Variantを選択すると、すべてのパラメータを自動的に切り替えます。

異なるフレーバーで異なる依存関係を持つことはできますか?

はい、Gradleは特定のフレーバーに依存関係を指定できます:demoImplementationfullImplementation。デモ版は分析ライブラリを含めることができますが、フル版は含めないこともできます。これにより、異なるフレーバーのAPKサイズを削減できます。

まとめ

  • Build Configは、アプリケーションがどのようにコンパイルされ、どの環境向けかを制御するビルドパラメータのシステムです。
  • AndroidはBuild Types、Product Flavors、生成されたBuildConfigクラスとともにGradleを使用して、コードからパラメータにアクセスします。
  • iOSはコンパイルフラグ、署名、サーバーURLを設定するためにXcode Build Settingsと.xcconfigファイルを使用します。
  • Build VariantはBuild TypeとProduct Flavorの組み合わせで、独自のリソースを持つ一意のビルド構成を作成します。
  • CI/CD統合により、環境変数を介してBuild Configパラメータを渡すことができ、手動設定を排除します。
  • FastlaneGradleは、両方のプラットフォームの署名、バージョニング、公開を自動化します。

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください