構成管理はモバイル開発において最も過小評価されている側面の1つです。CloudBees(2025)によると、本番環境のインシデントの47%はビルド構成の誤りに関連しています。Build Variant、Scheme、.envファイルの適切な設定は、安定したCI/CDと予測可能なリリースの鍵です。
重要なポイント
Build Variant — Build Type(debug/release/staging)とProduct Flavor(free/paid、demo/full)の組み合わせ。Gradleは各組み合わせに対して自動的にvariantを作成します:freeDebug、freeRelease、paidDebug、paidRelease。各variantは独自のコード、リソース、依存関係を持つことができます — これがAndroidのモバイルアプリにおける構成管理の基盤です。
Build Type — ビルド設定:デバッグが有効かどうか、署名、ProGuardの最適化。debugはデフォルトでdebuggable=trueを含み、releaseはminifyEnabled=trueを含みます。
Product Flavor — アプリのバリエーション:無料(free)、有料(paid)、デモ(demo)。フレーバーは異なるapplicationId、リソース、SDK依存関係を持つことができます。
// 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ファイル。
Gradle KTS — Kotlin DSLを使用したGroovyの代替。KTSはAndroid Studioでのオートコンプリートと型チェックを提供します。新しいプロジェクトに推奨されます。
構成管理はiOSではSchemeに基づいています — 何をどのようにビルドするかを定義するXcodeの設定:Build Configuration(Debug/Release)、テスト、分析、アーカイブ。Schemeは異なる環境(Development、Staging、Production)用に複製できます。Schemeはxcshareddataフォルダ内の.xcschemeファイルに保存されます。
.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 — ビルドのシナリオ(何をするか)。Build Configuration — 設定のセット(どのように行うか)。1つのSchemeは1つのBuild Configuration(DebugまたはRelease)を使用します。CI/CDの場合:同じSchemeでArchiveアクションをReleaseに、TestアクションをDebugに設定してください。
pubspec.yaml — Flutterプロジェクトの設定ファイル。依存関係、バージョン、リソースを含みます。--dart-defineを通じて環境変数をサポートします。
Podfile — iOS用のCocoaPods依存関係マネージャー。ライブラリのバージョンとプラットフォームを定義します。
.env — すべてのプラットフォームの環境変数を含むファイル。FlutterとReact Nativeは構成管理に異なるアプローチを使用します:Flutterではdart-define、React Nativeではreact-native-config。クロスプラットフォームプロジェクトでの構成管理は、スタックに応じて異なるツールを含みます。
.env — キー=値のペアを持つテキストファイル。Gitにはコミットしません(.gitignoreに追加)。Flutterの場合はflutter_dotenv、iOSの場合は#include付きのConfig.xcconfig、Androidの場合はBuildConfig。env変数:API_URL、SENTRY_DSN、APP_SECRET。モバイル開発の構成管理において、.envはリポジトリ外にシークレットを保存する事実上の標準です。
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 Variant | Scheme | Flavor (--flavor) |
| ビルドファイル | build.gradle | .xcconfig | pubspec.yaml |
| 条件付きコード | BuildConfig | Active Compilation Conditions | dart-define |
| シークレット | BuildConfig/NDK | .xcconfig | .env/dart-define |
| 依存関係マネージャー | Gradle(Maven) | SPM/CocoaPods | pub(dart) |
この表はモバイルプラットフォーム間の構成管理の主な違いを示しています。AndroidはBuild Variantを通じてより柔軟性を提供します。iOSはよりシンプルですが柔軟性に劣ります。Flutterはdart-defineに構成を集中化しますが、ネイティブ依存関係には依然としてPodfile/build.gradleの設定が必要です。
条件付きコンパイル — フラグに応じてコンパイル時にコードを含めるか除外すること。これは構成管理の一部です:デバッグツール(ロギング、インスペクター)をデバッグビルドに埋め込み、リリースから削除することを可能にします。実装はプラットフォームによって異なります。
#if DEBUG — Swiftのプリプロセッサディレクティブ。ブロック内のコードはDebug設定でのみコンパイルされます。その他のフラグ:#if !RELEASE、#if targetEnvironment(simulator)。Build SettingsのActive Compilation Conditions — -D FLAG_NAMEでカスタムフラグを追加します。コンパイル条件によるビルドの構成管理はiOSの標準的な慣行です。
BuildConfig.DEBUG — ブール値フィールド、デバッグビルドではtrue。BuildConfigはGradleによって自動生成されます。カスタムフラグにはbuild.gradleでbuildConfigFieldを使用します:buildConfigField "boolean", "REPORT_CRASHES", "true"。コード内:if (BuildConfig.REPORT_CRASHES) { ... }。
dart-define — Flutterのコンパイルフラグ:flutter run --dart-define=ENV=staging。コード内:const env = String.fromEnvironment('ENV', defaultValue: 'production')。条件付きモバイルアプリビルドには、コード生成付きのbuild_runnerプラグインを使用してください。
よくある質問
Build Variant = Build Type(debug/release)+ Product Flavor。Flavorはアプリのバリエーション(有料/無料、クライアント/サーバー)、Build Typeはビルド設定(デバッグ/最適化)です。flavour + typeの組み合わせがvariantを形成します:例:paidDebug。
.xcconfigはビルド設定をテキスト形式で保存するXcode設定ファイルです。Xcodeプロジェクトから設定をGit対応ファイルに移行でき、モバイルプロジェクトでのCI/CDとチーム作業を簡素化します。
APIキーはコードに保存してはいけません — どの.apkや.ipaも逆コンパイル可能です。.envファイル、バックエンドプロキシ、またはBuild Configによる難読化を使用してください。IT Sectrはシークレットをサーバーに保存し、認証後にクライアントに発行することを推奨します。
条件付きコンパイルはフラグに応じてコンパイル時にコードを含める/除外することです。Swiftでは#if DEBUG、KotlinではBuildConfig.DEBUG。デバッグでロギングを有効にし、リリースで無効にするために使用されます。これはモバイル開発における構成管理の重要な要素です。
PodfileはCocoaPodsでの作業時にのみ使用されます。SPMやCarthageには不要です。CocoaPodsをやめた場合はプロジェクトにPodfileを残さないでください — チームとCI/CDシステムを混乱させます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。