モバイル開発における.envファイル:その概要、目的、動作原理

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

.envファイルは、シンプルなキーと値の形式で環境変数を保存し、アプリケーションのソースコードから設定を分離します。The Twelve-Factor App(2011)によると、設定はコードから厳密に分離されるべきであり、.envファイルはこのアプローチの標準となっています。.env Fileを使用すると、プロジェクトを再コンパイルせずに、APIキー、サーバーURL、ビルドフラグの異なる値を注入できます。

主要ポイント

  • .env File — プロジェクトルートに配置されたKEY=VALUE形式の環境変数を含むテキストファイルです。
  • Twelve-Factor Appは、コードではなく環境変数に設定を保存することを推奨しています。
  • セキュリティ — .envは決してGitに入れるべきではありません。ファイルは.gitignoreに追加されます。
  • ローダーライブラリ — Androidではgradle-dotenv、iOSではConfig.xcconfig、Flutterではflutter_dotenvが使用されます。
  • 実行環境 — .envの値はビルド時に置き換えられ、アプリケーションの実行時には置き換えられません。

.envファイルとは何か、なぜ必要なのか

.env Fileは、シンプルなテキスト形式KEY=VALUEで環境変数を保存する設定ファイルです。各行には1つの変数が含まれています:キー名とその値が等号で区切られています。

.envファイルは、現代の開発における根本的な問題を解決します:異なる環境(ローカル、テスト、本番)はまったく異なる設定を必要とします。ローカルマシンのAPIサーバーURLはhttp://localhost:8080ですが、本番サーバーではhttps://api.production.comです。これらの値がアプリケーションコードに直接ハードコードされている場合、異なる環境用のビルドごとにソースコードの変更が必要になります。

メインのアプリケーションコードの外部に設定を保存するプラクティスは、The Twelve-Factor Appマニフェスト(2011)で標準化され、環境変数がアプリケーションを設定する唯一の正しい方法として特定されました。JetBrains Developer Ecosystem調査(2024)によると、67%以上のモバイル開発者がプロジェクトで.envファイルを使用しています。

モバイル開発にとって、.envには追加の利点があります:値はGradle(Android)またはxcconfig(iOS)を介してビルド段階で置き換えられ、ソースコードを変更せずに開発、ステージング、本番用の個別のビルドを作成できます。

.envはチームでの作業時に特に便利です:各開発者は自分の環境に合わせた設定(ローカルDBパス、デバッグAPIキー)で独自のローカル.envを作成し、共通の設定はリポジトリに.env.exampleとして固定されます。これにより、git pull後に開発者のビルドが、知らされていない環境変数の欠如によって壊れる状況を排除します。新しいチームメンバーは.env.exampleを.envにコピーして、自分のローカル値を入力するだけです。

.envファイルの構文と構造

.env形式は非常にシンプルです:各行はKEY=VALUE形式の1つの変数です。等号の周りのスペースは通常無視されますが、ほとんどのライブラリでは値の一部と見なされるため、避けるのが良いでしょう。

基本的な記述ルール

コメントは#文字で始まります—その後の行全体が無視されます。空行もスキップされます。値にスペースが含まれる場合は、二重引用符または一重引用符で囲まれます。

env
# 基本環境設定
APP_NAME=MyMobileApp
APP_ENV=development

# API設定
API_BASE_URL=http://localhost:3000/api
API_TIMEOUT=30000

# 機密データ
DB_PASSWORD=secret_password_123
JWT_SECRET=your_jwt_secret_key

値の型とエスケープ

.envのすべての変数は文字列ですが、ローダーライブラリはそれらを必要な型に変換できます。特殊文字をエスケープするには、バックスラッシュと引用符が使用されます。値にテキストの一部として#文字が含まれる場合は、\#としてエスケープする必要があります。

  • 文字列 — 引用符なし、または引用符付き:KEY=valueまたはKEY="value with spaces"
  • 数値 — 引用符なしで記述:PORT=8080
  • ブール値 — 文字列true/false:DEBUG=true
  • 複数行 — 行末のバックスラッシュ:KEY=line1\
    line2
  • 置換 — 一部のパーサー:DB_URL=${DB_HOST}:${DB_PORT}

.envをロードする際、ライブラリは変数補間を実行できます—あるキーの値を別のキーの内部に置き換えます。例えば、変数DATABASE_URL=postgres://${DB_USER}:${DB_PASS}@localhost/dbは、同じファイルからDB_USERとDB_PASSを展開します。

モバイルプロジェクトへの.envファイルの統合

.envの接続方法はプラットフォームによって異なります。AndroidはGradleプラグイン、iOSはxcconfig設定ファイル、Flutterのようなクロスプラットフォームソリューションは専門のライブラリを使用します。

AndroidとGradle:BuildConfigの設定

Androidでは、.envはgradle-dotenvプラグインを介してロードされます。プラグインはプロジェクトルートから.envを読み取り、値をBuildConfigに追加し、その後生成されたフィールドを通じてKotlinまたはJavaコードで利用可能になります。

kotlin
// build.gradle.kts(アプリレベル)
plugins {
    id("co.uzzu.dotenv") version "4.0.0"
}

android {
    buildFeatures {
        buildConfig = true
    }
}

kotlin {
    // コード内でのアクセス:BuildConfig.API_BASE_URL
    buildConfigField("String", "API_BASE_URL",
        "\"" + dotenv.get("API_BASE_URL") + "\"")
}

iOSとXcode:Configの接続

iOSでは、環境変数は通常xcconfigファイルを介して設定されます。Swiftで.envをロードするには、DotEnvライブラリまたはカスタムキーを使用した組み込みのInfo.plistメカニズムが使用されます。

swift
// Swiftプロジェクトでの.envのロード
import DotEnv

struct AppConfig {
    static func load() {
        let env = DotEnv(Bundle.main)
        env.load()

        let apiURL = ProcessInfo.processInfo
            .environment["API_BASE_URL"] ??
            "https://default.api.com"
    }
}

FlutterとDart:flutter_dotenvライブラリ

Flutterにはflutter_dotenvパッケージがあり、アプリケーションの初期化中に.envから変数をロードします。.envファイルはプロジェクトルートに配置され、変数はdotenvクラスを介して利用可能になります。

dart
// pubspec.yaml
dependencies:
  flutter_dotenv: ^5.1

// main.dart — 起動時にロード
import 'package:flutter_dotenv/flutter_dotenv.dart';

void main() async {
  await dotenv.load(fileName: '.env');
  var apiUrl = dotenv.get('API_BASE_URL');
  runApp(MyApp(baseUrl: apiUrl));
}

3つのアプローチはすべて共通の原則を共有しています:.envはビルド段階またはアプリケーション起動時にロードされ、値はキャッシュされて生成された定数を介してコードで使用されます。これにより、機密データがリポジトリに到達するのを防ぎます。

React Nativeでは、react-native-configパッケージが使用され、ビルド段階でプロジェクトルートの単一の.envファイルからAndroid用のBuildConfigクラスとiOS用のInfo.plistの定数を自動的に生成します。これは、Expoやbare workflowを使用するスタートアップにとって特に便利です:ルートレベルの単一の.envで、すべてのプラットフォームが設定を複製することなく同じ環境変数を受け取れます。

.envファイルのセキュリティとベストプラクティス

すべての利点にもかかわらず、.envは本番環境で機密情報を保存するための完全なソリューションではありません。基本的な保護レベルを提供しますが、誤って使用すると機密データの漏洩につながる可能性があります。

.gitignoreによる保護

最も重要なルール—.envは決してリポジトリのバージョン管理システムに入れてはいけません。ファイルは作成後すぐに.gitignoreに追加され、空またはダミーの値を持つサンプルファイル.env.exampleのみがリポジトリにコミットされます。

env
# .env.example — リポジトリにコミット
APP_NAME=
APP_ENV=development
API_BASE_URL=http://localhost:3000
API_TIMEOUT=30000
# DB_PASSWORD — 例でも指定しないでください!
# JWT_SECRET — 例でも指定しないでください!
env
# .gitignore
# Dotenvファイル
.env
.env*.local

本番環境の代替手段

本番プロジェクトでは、専門的なシークレット管理ソリューションを使用することをお勧めします。本番での.envは、ファイルがサーバーのdocument-rootの外部にあり、厳格なアクセス権限がある場合にのみ許容されます。

  • AWS Secrets Manager — キーローテーションとアクセス監査を備えたクラウドシークレットストレージ
  • Google Secret Manager — APIキーとパスワードを保存するためのGoogle Cloudサービス
  • HashiCorp Vault — 動的シークレットとサーバーサイド暗号化を備えたツール
  • Firebase Remote Config — モバイルアプリケーション向けのA/Bテスト付きクラウド設定
  • GitLab CI/CD Variables — ビルドパイプライン用の組み込みシークレットストレージ

Snyk State of Open Source Security(2024)によると、リポジトリを介した.envファイルの漏洩は、調査対象企業のAPIキー開示インシデント全体の12%以上の原因となっています。専用のシークレットマネージャーを使用することで、このリスクをゼロに減らせます。

pre-commitフックを実装することで追加の保護が達成され、huskylint-stagedなどのツールを使用して、開発者が誤って.envをコミットに追加していないかチェックします。git-secrets(AWS)やtalismanなどのツールは、各コミットをAPIキー、トークン、パスワードのパターンについてスキャンし、検出された場合はコミットをブロックします。CIパイプラインでは、detect-secretsを追加することをお勧めします—これは、開発者が間違いを犯した場合でも、.envファイルがリポジトリに入るのを防ぐ自動スキャナーです。

よくある質問

.envをGitにコミットする必要がありますか?

いいえ、.envをGitにコミットすべきではありません。ファイルには機密データが含まれており、.gitignoreに追加する必要があります。代わりに、必要なすべての変数のテンプレートを含む.env.exampleがリポジトリに配置されます。

.envと.env.exampleの違いは何ですか?

.envは本番の値を持つ実際のファイルで、決してコミットされません。.env.exampleファイルには同じキーが含まれていますが、空または偽の値で—新しい開発者向けのサンプルとしてリポジトリにコミットされます。

本番で.envを使用できますか?

はい、ただし追加の保護なしでは推奨されません。本番サーバーで.envを使用する場合、ファイルはWebサーバーのdocument-rootの外側に、アクセス権限600(所有者のみ)で配置する必要があります。重要なプロジェクトでは、シークレットマネージャーが推奨されます。

Androidプロジェクトで.envをロードする方法は?

gradle-dotenvプラグイン(co.uzzu.dotenv)を介して行います。プラグインはプロジェクトルートから.envを読み取り、値をBuildConfigにエクスポートします。変数はコンパイル時にコード内でBuildConfig.VARIABLE_NAMEとして利用可能になります。

.envは変数補間をサポートしていますか?

はい、多くのパーサーが${VAR_NAME}形式の補間をサポートしています。例えば、URL=${HOST}:${PORT}は同じファイルからHOSTとPORTの値を置き換えます。ただし、この機能は特定のローダーライブラリに依存します。

まとめ

  • .env File — アプリケーションコードから設定を分離し、環境変数を保存するためのシンプルなテキスト形式です。
  • Twelve-Factor Appは、現代のアプリケーション開発の標準として環境変数に設定を保存することを確立しました。
  • 統合は、gradle-dotenvプラグイン(Android)、xcconfig(iOS)、またはflutter_dotenv(Flutter)を介してモバイルプロジェクトで行われます。
  • セキュリティは、.envを.gitignoreに追加し、リポジトリで.env.exampleを使用することで確保されます。
  • 本番では、専門的なソリューション(AWS Secrets Manager、Google Secret Manager、またはHashiCorp Vault)が必要です。
  • 値の置換は、ソースコードを変更せずに、ビルド時にAndroidのBuildConfigまたはiOSのInfo.plistを介して行われます。
  • 漏洩リスク—APIキーインシデントの12%はリポジトリへの.envのコミットに関連しており(Snyk、2024)、CIでの自動チェックが必須です。

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

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

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

こちらもお読みください