モバイル開発における構成管理:概要、オプション、設定方法

著者: IT Sectr 公開日: 2026-05-30 読了時間: 8 分

構成管理はモバイル開発において最も過小評価されている側面の1つです。CloudBees(2025)によると、本番環境のインシデントの47%はビルド構成の誤りに関連しています。Build Variant、Scheme、.envファイルの適切な設定は、安定したCI/CDと予測可能なリリースの鍵です。

重要なポイント

  • 構成管理はモバイルアプリではBuild Variant(Android)、Scheme(iOS)、.env(クロスプラットフォーム)に基づいています — 本番インシデントの47%は誤った設定に関連しています。
  • iOSはScheme + .xcconfigを使用します。Schemeはビルド、テスト、アーカイブを管理します。.xcconfigはビルド設定をファイルに外部化します。
  • クロスプラットフォームツール — pubspec.yaml(Flutter)、Podfile(CocoaPods)、.env(環境変数) — が構成を一元管理します。
  • 条件付きコンパイル — コンパイル時にコードを含める/除外する。#if DEBUG、BuildConfig.DEBUG — リリースの動作を変更せずにデバッグするため。
  • APIキーとシークレットはコードに保存してはいけません。.env、Build Config、またはプロキシサーバーを使用してください。.apk/.ipaの逆コンパイルは容易です。

Androidでの構成管理:Build Variantとbuild.gradle

Build Variant — Build Type(debug/release/staging)とProduct Flavor(free/paid、demo/full)の組み合わせ。Gradleは各組み合わせに対して自動的にvariantを作成します:freeDebug、freeRelease、paidDebug、paidRelease。各variantは独自のコード、リソース、依存関係を持つことができます — これがAndroidのモバイルアプリにおける構成管理の基盤です。

Build Variant vs Product Flavor

Build Type — ビルド設定:デバッグが有効かどうか、署名、ProGuardの最適化。debugはデフォルトでdebuggable=trueを含み、releaseはminifyEnabled=trueを含みます。

Product Flavor — アプリのバリエーション:無料(free)、有料(paid)、デモ(demo)。フレーバーは異なるapplicationId、リソース、SDK依存関係を持つことができます。

groovy
// build.gradle — Androidプロダクトフレーバーの設定
android {
    productFlavors {
        free {
            applicationId "com.example.app.free"
            versionName "1.0-free"
        }
        paid {
            applicationId "com.example.app.paid"
            versionName "1.0-paid"
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt')
        }
    }
}

この例ではfreeとpaidの2つのフレーバーを作成しています。freeには別のapplicationIdが設定されています — これにより1台のデバイスに両方のアプリをインストールできます。BuildConfigは各variantに対して生成されます:BuildConfig.FLAVOR = "free"、BuildConfig.BUILD_TYPE = "debug"。条件付きロジックにはコード内でBuildConfigを使用してください。

settings.gradleとGradle KTS

settings.gradle — プロジェクトのモジュールを記述するルートGradleファイル。

Gradle KTS — Kotlin DSLを使用したGroovyの代替。KTSはAndroid Studioでのオートコンプリートと型チェックを提供します。新しいプロジェクトに推奨されます。

iOSでの構成管理:Schemeと.xcconfig

構成管理はiOSではSchemeに基づいています — 何をどのようにビルドするかを定義するXcodeの設定:Build Configuration(Debug/Release)、テスト、分析、アーカイブ。Schemeは異なる環境(Development、Staging、Production)用に複製できます。Schemeはxcshareddataフォルダ内の.xcschemeファイルに保存されます。

.xcconfigファイル

.xcconfig — ビルド設定をテキスト形式で保存するXcode設定ファイル。モバイルアプリの構成管理のために、iOSは.xcconfigを使用します:Gitでのバージョン管理、プロジェクト間での再利用、手動設定の削減。.xcconfigではSWIFT_ACTIVE_COMPILATION_CONDITIONS、PRODUCT_BUNDLE_IDENTIFIER、CODE_SIGN_IDENTITYを設定します。

Info.plist — アプリのメタデータファイル。バージョン、識別子、権限を保存します。Info.plistはBuild SettingsのInfo.plist Fileを介してSchemeごとに異なるものにできます。

AndroidManifest.xml — Androidでの同等物:権限、コンポーネント、メタデータを保存します。

Scheme vs Build Configuration

Scheme — ビルドのシナリオ(何をするか)。Build Configuration — 設定のセット(どのように行うか)。1つのSchemeは1つのBuild Configuration(DebugまたはRelease)を使用します。CI/CDの場合:同じSchemeでArchiveアクションをReleaseに、TestアクションをDebugに設定してください。

FlutterとReact Nativeでの構成管理:pubspec.yaml、Podfile、.env

pubspec.yaml — Flutterプロジェクトの設定ファイル。依存関係、バージョン、リソースを含みます。--dart-defineを通じて環境変数をサポートします。

Podfile — iOS用のCocoaPods依存関係マネージャー。ライブラリのバージョンとプラットフォームを定義します。

.env — すべてのプラットフォームの環境変数を含むファイル。FlutterとReact Nativeは構成管理に異なるアプローチを使用します:Flutterではdart-define、React Nativeではreact-native-config。クロスプラットフォームプロジェクトでの構成管理は、スタックに応じて異なるツールを含みます。

.envと環境変数

.env — キー=値のペアを持つテキストファイル。Gitにはコミットしません(.gitignoreに追加)。Flutterの場合はflutter_dotenv、iOSの場合は#include付きのConfig.xcconfig、Androidの場合はBuildConfig。env変数:API_URL、SENTRY_DSN、APP_SECRET。モバイル開発の構成管理において、.envはリポジトリ外にシークレットを保存する事実上の標準です。

Podfileとpubspec.yaml

PodfileはCocoaPodsの依存関係とプラットフォームを記述します(platform :ios, '15.0')。Flutter用のpubspec.yaml — dependenciesとdev_dependencies。両方とも条件付き依存関係をサポートします:pod 'Analytics', :configs => ['Release'] または flutter pub add --flavor free。IT Sectrでは、モバイルプロジェクトでシークレットには.env + BuildConfigを、ネイティブ依存関係にはPodfileを使用しています。

パラメータ Android iOS Flutter
構成単位Build VariantSchemeFlavor (--flavor)
ビルドファイルbuild.gradle.xcconfigpubspec.yaml
条件付きコードBuildConfigActive Compilation Conditionsdart-define
シークレットBuildConfig/NDK.xcconfig.env/dart-define
依存関係マネージャーGradle(Maven)SPM/CocoaPodspub(dart)

この表はモバイルプラットフォーム間の構成管理の主な違いを示しています。AndroidはBuild Variantを通じてより柔軟性を提供します。iOSはよりシンプルですが柔軟性に劣ります。Flutterはdart-defineに構成を集中化しますが、ネイティブ依存関係には依然としてPodfile/build.gradleの設定が必要です。

構成管理における条件付きコンパイル

条件付きコンパイル — フラグに応じてコンパイル時にコードを含めるか除外すること。これは構成管理の一部です:デバッグツール(ロギング、インスペクター)をデバッグビルドに埋め込み、リリースから削除することを可能にします。実装はプラットフォームによって異なります。

Swiftでの条件付きコンパイル

#if DEBUG — Swiftのプリプロセッサディレクティブ。ブロック内のコードはDebug設定でのみコンパイルされます。その他のフラグ:#if !RELEASE、#if targetEnvironment(simulator)。Build SettingsのActive Compilation Conditions — -D FLAG_NAMEでカスタムフラグを追加します。コンパイル条件によるビルドの構成管理はiOSの標準的な慣行です。

Kotlinでの条件付きコンパイル

BuildConfig.DEBUG — ブール値フィールド、デバッグビルドではtrue。BuildConfigはGradleによって自動生成されます。カスタムフラグにはbuild.gradleでbuildConfigFieldを使用します:buildConfigField "boolean", "REPORT_CRASHES", "true"。コード内:if (BuildConfig.REPORT_CRASHES) { ... }。

Flutterでの条件付きコンパイル

dart-define — Flutterのコンパイルフラグ:flutter run --dart-define=ENV=staging。コード内:const env = String.fromEnvironment('ENV', defaultValue: 'production')。条件付きモバイルアプリビルドには、コード生成付きのbuild_runnerプラグインを使用してください。

よくある質問

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

Build Variant = Build Type(debug/release)+ Product Flavor。Flavorはアプリのバリエーション(有料/無料、クライアント/サーバー)、Build Typeはビルド設定(デバッグ/最適化)です。flavour + typeの組み合わせがvariantを形成します:例:paidDebug。

.xcconfigとは何で、なぜiOSで必要ですか?

.xcconfigはビルド設定をテキスト形式で保存するXcode設定ファイルです。Xcodeプロジェクトから設定をGit対応ファイルに移行でき、モバイルプロジェクトでのCI/CDとチーム作業を簡素化します。

モバイルアプリでAPIキーを安全に保存するには?

APIキーはコードに保存してはいけません — どの.apkや.ipaも逆コンパイル可能です。.envファイル、バックエンドプロキシ、またはBuild Configによる難読化を使用してください。IT Sectrはシークレットをサーバーに保存し、認証後にクライアントに発行することを推奨します。

条件付きコンパイルとは何で、いつ使用するのですか?

条件付きコンパイルはフラグに応じてコンパイル時にコードを含める/除外することです。Swiftでは#if DEBUG、KotlinではBuildConfig.DEBUG。デバッグでロギングを有効にし、リリースで無効にするために使用されます。これはモバイル開発における構成管理の重要な要素です。

CocoaPodsなしのプロジェクトでPodfileは必要ですか?

PodfileはCocoaPodsでの作業時にのみ使用されます。SPMやCarthageには不要です。CocoaPodsをやめた場合はプロジェクトにPodfileを残さないでください — チームとCI/CDシステムを混乱させます。

まとめ

  • モバイルアプリの構成管理は安定したCI/CDの基盤です。AndroidはBuild Variant、iOSはScheme、Flutterはdart-defineを使用します。
  • Android:Build Variant = Build Type × Product Flavor。BuildConfigは各variantに対して生成されます。
  • iOS:Scheme + .xcconfigが構成を管理します。Info.plist — アプリのメタデータ。
  • Flutter:ビルド変数にはdart-define。依存関係にはpubspec.yaml。
  • 条件付きコンパイル(#if DEBUG、BuildConfig.DEBUG)— 構成管理の一部、リリースでデバッグコードを削除する標準的な方法。
  • .env — リポジトリ外でのシークレットの安全な保存。.envをGitにコミットしないでください。
  • モバイルプロジェクトの構成管理は最初のコミットから注意が必要です — 適切なビルド設定は毎回のリリースでデバッグの時間を節約します。

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

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

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