.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 File і для чого він потрібен

.env File — це конфігураційний файл, у якому зберігаються змінні середовища в простому текстовому форматі KEY=VALUE. Кожен рядок містить одну змінну: ім'я ключа та його значення, розділені знаком рівності.

.env-файли вирішують фундаментальну проблему сучасної розробки: різні середовища (локальне, тестове, бойове) вимагають зовсім різних налаштувань. URL API сервера на локальній машині — http://localhost:8080, на бойовому сервері — https://api.production.com. Якщо ці значення жорстко зашиті безпосередньо в код застосунку, кожна збірка для іншого середовища потребує зміни вихідного коду.

Практика зберігання конфігурації поза основним кодом застосунку стандартизована в маніфесті The Twelve-Factor App (2011), який виділив змінні середовища як єдино правильний спосіб налаштування застосунку. За даними опитування JetBrains Developer Ecosystem (2024), понад 67% мобільних розробників використовують .env-файли у своїх проєктах.

Для мобільної розробки .env дає додаткову перевагу: значення підставляються на етапі збірки через Gradle (Android) або xcconfig (iOS), що дозволяє створювати окремі збірки для розробки, стейджингу та продакшену без зміни вихідного коду.

.env особливо корисний при роботі в команді: кожен розробник створює свій локальний .env з налаштуваннями під своє середовище (шлях до локальної БД, debug-ключі API), а загальні налаштування фіксуються в .env.example у репозиторії. Це виключає ситуацію, коли після git pull у розробника ламається збірка через відсутність змінної середовища, про яку він не знав. Новий член команди просто копіює .env.example у .env і заповнює свої локальні значення.

Синтаксис і структура .env File

Формат .env максимально простий: кожен рядок — одна змінна виду KEY=VALUE. Пробіли навколо знака рівності зазвичай ігноруються, але в більшості бібліотек вважаються частиною значення, тому їх краще уникати.

Основні правила запису

Коментарі починаються з символу # — весь рядок після нього ігнорується. Порожні рядки також пропускаються. Якщо значення містить пробіли, воно заключається в подвійні або одинарні лапки.

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 File у мобільні проєкти

Спосіб підключення .env залежить від платформи. Android використовує плагіни Gradle, iOS — конфігураційні файли xcconfig, а крос-платформенні рішення на кшталт Flutter — спеціалізовані бібліотеки.

Android та Gradle: налаштування BuildConfig

В Android .env завантажується через плагін gradle-dotenv. Плагін читає .env з кореня проєкту та додає значення до BuildConfig, після чого вони доступні в Kotlin або Java коді через згенеровані поля.

kotlin
// build.gradle.kts (app level)
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 файли. Для завантаження .env у Swift використовується бібліотека DotEnv або вбудований механізм Info.plist з користувацькими ключами.

swift
// Завантаження .env у Swift проєкті
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));
}

Всі три підходи об'єднує загальний принцип: .env завантажується на етапі збірки або при старті застосунку, значення кешуються та використовуються в коді через згенеровані константи. Це виключає потрапляння чутливих даних до репозиторію.

Для React Native використовується пакет react-native-config, який на етапі збірки автоматично генерує клас BuildConfig для Android та константи в Info.plist для iOS з одного .env файлу в корені проєкту. Це особливо зручно для стартапів, які використовують Expo або bare workflow: достатньо одного .env на кореневому рівні, і всі платформи отримують однакові змінні середовища без дублювання конфігурацій.

Безпека та найкращі практики .env File

Незважаючи на всі переваги, .env не є повноцінним рішенням для зберігання секретів у production середовищі. Він дає базовий рівень захисту, але при неправильному використанні може призвести до витоку конфіденційних даних.

Захист через .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

Альтернативи для production-середовища

Для бойових проєктів рекомендується використовувати професійні рішення для управління секретами. .env у production допустимий тільки якщо файл розташований поза document-root сервера та має строгі права доступу.

  • AWS Secrets Manager — хмарне сховище секретів з ротацією ключів та аудитом доступу
  • Google Secret Manager — сервіс Google Cloud для зберігання API-ключів та паролів
  • HashiCorp Vault — інструмент з динамічними секретами та шифруванням на стороні сервера
  • Firebase Remote Config — хмарна конфігурація з A/B тестуванням для мобільних застосунків
  • GitLab CI/CD Variables — вбудоване сховище секретів для пайплайнів збірки

За даними Snyk State of Open Source Security (2024), витік .env-файлів через репозиторії став причиною понад 12% всіх інцидентів з розкриттям API-ключів серед опитаних компаній. Використання окремого менеджера секретів дозволяє знизити цей ризик до нуля.

Додатковий захист досягається впровадженням pre-commit хукiв з використанням інструментів на кшталт husky та lint-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 у production?

Можна, але не рекомендується без додаткового захисту. Якщо .env використовується на бойовому сервері, файл має бути розташований поза document-root веб-сервера з правами доступу 600 (тільки власник). Для критичних проєктів переважні менеджери секретів.

Як завантажити .env в Android проєкті?

Через плагін 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 у репозиторії.
  • Production потребує професійних рішень — AWS Secrets Manager, Google Secret Manager або HashiCorp Vault.
  • Підстановка значень відбувається на етапі збірки через BuildConfig в Android або Info.plist в iOS, без зміни вихідного коду.
  • Ризик витоків — 12% інцидентів з API-ключами пов'язані з комітом .env до репозиторіїв (Snyk, 2024), тому автоматична перевірка в CI обов'язкова.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також