Mobil ishlab chiqishda .env File: bu nima, maqsadi va ishlash printsipi

Muallif: IT Sectr Nashr etilgan: 2026-05-31 O'qish vaqti: 9 daq

.env fayli atrof-muhit o'zgaruvchilarini oddiy kalit-qiymat formatida saqlaydi va konfiguratsiyani dasturning manba kodidan ajratadi. The Twelve-Factor App (2011) ma'lumotlariga ko'ra, konfiguratsiya koddan qat'iy ajratilishi kerak va .env fayllari ushbu yondashuvning standartiga aylandi. .env File loyihani qayta kompilyatsiya qilmasdan API kalitlari, server URL va kompilyatsiya bayroqlarining turli qiymatlarini almashtirish imkonini beradi.

Asosiy fikrlar

  • .env File — loyiha ildizida joylashgan, KEY=VALUE formatidagi atrof-muhit o'zgaruvchilari bilan matn fayli.
  • Twelve-Factor App konfiguratsiyani kodda emas, atrof-muhit o'zgaruvchilarida saqlashni tavsiya qiladi.
  • Xavfsizlik — .env hech qachon Git-ga tushmasligi kerak; fayl .gitignore-ga qo'shiladi.
  • Yuklash kutubxonalari — Android-da gradle-dotenv, iOS-da Config.xcconfig, Flutter-da flutter_dotenv ishlatiladi.
  • Ijro muhiti — .env qiymatlari dastur ishlash vaqtida emas, kompilyatsiya bosqichida almashtiriladi.

.env File nima va u nima uchun kerak

.env File atrof-muhit o'zgaruvchilari oddiy KEY=VALUE matn formatida saqlanadigan konfiguratsiya faylidir. Har bir qator bitta o'zgaruvchini o'z ichiga oladi: kalit nomi va uning qiymati tenglik belgisi bilan ajratilgan.

.env fayllari zamonaviy dasturlashning asosiy muammosini hal qiladi: turli muhitlar (lokal, test, ishlab chiqarish) butunlay boshqa sozlamalarni talab qiladi. Lokal mashinadagi API server URL http://localhost:8080, ishlab chiqarish serverida — https://api.production.com. Agar bu qiymatlar to'g'ridan-to'g'ri dastur kodiga yozilgan bo'lsa, har bir boshqa muhit uchun kompilyatsiya manba kodini o'zgartirishni talab qiladi.

Konfiguratsiyani dasturning asosiy kodidan tashqarida saqlash amaliyoti The Twelve-Factor App (2011) manifestida standartlashtirilgan bo'lib, u atrof-muhit o'zgaruvchilarini dasturni sozlashning yagona to'g'ri usuli sifatida ko'rsatgan. JetBrains Developer Ecosystem (2024) so'roviga ko'ra, mobil ishlab chiqaruvchilarning 67% dan ortig'i o'z loyihalarida .env fayllaridan foydalanadi.

Mobil ishlab chiqish uchun .env qo'shimcha afzallik beradi: qiymatlar Gradle (Android) yoki xcconfig (iOS) orqali kompilyatsiya bosqichida almashtiriladi, bu esa manba kodini o'zgartirmasdan ishlab chiqish, steyjing va ishlab chiqarish uchun alohida kompilyatsiyalar yaratish imkonini beradi.

.env ayniqsa jamoada ishlashda foydali: har bir ishlab chiqaruvchi o'z muhiti uchun lokal .env yaratadi (lokal DB yo'li, debug API kalitlari), umumiy sozlamalar esa repozitariyda .env.example da saqlanadi. Bu git pull-dan so'ng ishlab chiqaruvchi bilmagan atrof-muhit o'zgaruvchisi yo'qligi sababli kompilyatsiya buzilishi holatini bartaraf etadi. Yangi jamoa a'zosi oddiygina .env.example ni .env ga ko'chiradi va o'z lokal qiymatlarini to'ldiradi.

.env File sintaksisi va tuzilishi

.env formati maksimal darajada sodda: har bir qator KEY=VALUE ko'rinishidagi bitta o'zgaruvchidir. Tenglik belgisi atrofidagi bo'shliqlar odatda e'tiborga olinmaydi, lekin aksariyat kutubxonalarda qiymatning bir qismi hisoblanadi, shuning uchun ulardan qochish yaxshiroq.

Yozishning asosiy qoidalari

Izohlar # belgisi bilan boshlanadi — undan keyingi butun qator e'tiborga olinmaydi. Bo'sh qatorlar ham o'tkazib yuboriladi. Agar qiymat bo'shliqlarni o'z ichiga olsa, u qo'shtirnoq yoki bir tirnoq ichiga olinadi.

env
# Asosiy muhit sozlamalari
APP_NAME=MyMobileApp
APP_ENV=development

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

# Maxfiy ma'lumotlar
DB_PASSWORD=secret_password_123
JWT_SECRET=your_jwt_secret_key

Qiymat turlari va ekranlashtirish

.env dagi barcha o'zgaruvchilar satrlardir, lekin yuklash kutubxonalari ularni kerakli turga o'tkazishi mumkin. Maxsus belgilarni ekranlashtirish uchun teskari qiyshiq chiziqlar va tirnoqlar ishlatiladi. Agar qiymat matnning bir qismi sifatida # belgisini o'z ichiga olsa, uni \# sifatida ekranlashtirish kerak.

  • Satrlar — tirnoqsiz yoki tirnoq ichida: KEY=value yoki KEY="value with spaces"
  • Raqamlar — tirnoqsiz yoziladi: PORT=8080
  • Mantiqiy qiymatlar — true/false satrlari: DEBUG=true
  • Ko'p satrli — satr oxirida teskari qiyshiq chiziq: KEY=line1\
    line2
  • O'rniga qo'yish — ba'zi parserlarda: DB_URL=${DB_HOST}:${DB_PORT}

.env yuklanganda kutubxonalar o'zgaruvchi interpolyatsiyasini amalga oshirishi mumkin — bir kalitlarning qiymatlarini boshqalar ichiga qo'yadi. Masalan, DATABASE_URL=postgres://${DB_USER}:${DB_PASS}@localhost/db o'zgaruvchisi xuddi shu fayldan DB_USER va DB_PASS qiymatlarini ochadi.

.env File-ni mobil loyihalarga integratsiyasi

.env ni ulash usuli platformaga bog'liq. Android Gradle plaginlaridan, iOS xcconfig konfiguratsiya fayllaridan, Flutter kabi ko'p platformali yechimlar esa ixtisoslashgan kutubxonalardan foydalanadi.

Android va Gradle: BuildConfig sozlamasi

Android da .env gradle-dotenv plagini orqali yuklanadi. Plagin .env ni loyiha ildizidan o'qiydi va qiymatlarni BuildConfig ga qo'shadi, shundan so'ng ular Kotlin yoki Java kodida yaratilgan maydonlar orqali mavjud bo'ladi.

kotlin
// build.gradle.kts (app level)
plugins {
    id("co.uzzu.dotenv") version "4.0.0"
}

android {
    buildFeatures {
        buildConfig = true
    }
}

kotlin {
    // Kodda kirish: BuildConfig.API_BASE_URL
    buildConfigField("String", "API_BASE_URL",
        "\"" + dotenv.get("API_BASE_URL") + "\"")
}

iOS va Xcode: Config ulash

iOS da atrof-muhit o'zgaruvchilari odatda xcconfig fayllari orqali sozlanadi. .env ni Swift da yuklash uchun DotEnv kutubxonasi yoki maxsus kalitlar bilan Info.plist ning ichki mexanizmi ishlatiladi.

swift
// Swift loyihasida .env ni yuklash
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 va Dart: flutter_dotenv kutubxonasi

Flutter uchun dastur ishga tushishi vaqtida .env dan o'zgaruvchilarni yuklaydigan flutter_dotenv paketi mavjud. .env fayli loyiha ildiziga joylashtiriladi va o'zgaruvchilar dotenv sinfi orqali mavjud bo'ladi.

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

// main.dart — ishga tushganda yuklash
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));
}

Har uch yondashuv umumiy prinsipni birlashtiradi: .env kompilyatsiya bosqichida yoki dastur ishga tushganda yuklanadi, qiymatlar keshlanadi va yaratilgan konstantalar orqali kodda ishlatiladi. Bu maxfiy ma'lumotlarning repozitariyga tushishini oldini oladi.

React Native uchun react-native-config paketi ishlatiladi, u kompilyatsiya bosqichida bitta .env faylidan Android uchun BuildConfig sinfini va iOS uchun Info.plist da konstantalarni avtomatik yaratadi. Bu ayniqsa Expo yoki bare workflow dan foydalanadigan startaplar uchun qulay: ildiz darajasida bitta .env yetarli va barcha platformalar bir xil atrof-muhit o'zgaruvchilarini oladi.

.env File xavfsizligi va eng yaxshi amaliyotlar

Barcha afzalliklarga qaramay, .env ishlab chiqarish muhitida sirlarni saqlash uchun to'liq huquqli yechim emas. U asosiy himoya darajasini ta'minlaydi, lekin noto'g'ri ishlatilganda maxfiy ma'lumotlarning sizib chiqishiga olib kelishi mumkin.

.gitignore orqali himoya

Eng muhim qoida — .env hech qachon versiya nazorat tizimiga tushmasligi kerak. Fayl yaratilgandan so'ng darhol .gitignore ga qo'shiladi va repozitariyga faqat bo'sh yoki soxta qiymatlari bo'lgan namuna fayli .env.example joylanadi.

env
# .env.example — repozitariyga commit qilinadi
APP_NAME=
APP_ENV=development
API_BASE_URL=http://localhost:3000
API_TIMEOUT=30000
# DB_PASSWORD — namunada ham ko'rsatilmaydi!
# JWT_SECRET — namunada ham ko'rsatilmaydi!
env
# .gitignore
# Dotenv fayllari
.env
.env*.local

Ishlab chiqarish muhiti uchun alternativlar

Ishlab chiqarish loyihalari uchun sirlarni boshqarish bo'yicha professional yechimlardan foydalanish tavsiya etiladi. .env ishlab chiqarishda faqat fayl serverning document-root-dan tashqarida joylashgan bo'lsa va qat'iy kirish huquqlariga ega bo'lsa ruxsat etiladi.

  • AWS Secrets Manager — kalit aylanishi va kirish auditi bilan bulutli sirlar ombori
  • Google Secret Manager — API kalitlari va parollarni saqlash uchun Google Cloud xizmati
  • HashiCorp Vault — dinamik sirlar va server tomonida shifrlash bilan vosita
  • Firebase Remote Config — mobil ilovalar uchun A/B testi bilan bulut konfiguratsiyasi
  • GitLab CI/CD Variables — kompilyatsiya quvurlari uchun ichki sirlar ombori

Snyk State of Open Source Security (2024) ma'lumotlariga ko'ra, .env fayllarining repozitariy orqali sizib chiqishi so'rovda qatnashgan kompaniyalar orasida API kalitlarining oshkor bo'lishi bilan bog'liq barcha hodisalarning 12% dan ortig'iga sabab bo'lgan. Alohida sirlar menejeridan foydalanish bu xavfni nolga tushirish imkonini beradi.

Qo'shimcha himoya pre-commit hook larini joriy etish orqali erishiladi — husky va lint-staged kabi vositalar ishlab chiqaruvchi tasodifan .env ni commitga qo'shganligini tekshiradi. git-secrets (AWS) va talisman kabi vositalar har bir commitni API kalitlari, tokenlar va parollar namunalariga tekshirib, aniqlanganda commitni bloklaydi. CI quvurlari uchun detect-secrets tekshiruvini qo'shish tavsiya etiladi — bu ishlab chiqaruvchi xatosi bo'lsa ham .env faylining repozitariyga tushishiga yo'l qo'ymaydigan avtomatik skanerdir.

Tez-tez beriladigan savollar

.env ni Git-ga commit qilish kerakmi?

Yo'q, .env Git-ga commit qilinmasligi kerak. Fayl maxfiy ma'lumotlarni o'z ichiga oladi va .gitignore ga qo'shilishi kerak. Uning o'rniga repozitariyga barcha kerakli o'zgaruvchilar shabloni bilan .env.example joylashtiriladi.

.env va .env.example o'rtasidagi farq nima?

.env — hech qachon commit qilinmaydigan haqiqiy qiymatli fayl. .env.example fayli bir xil kalitlarni o'z ichiga oladi, lekin bo'sh yoki soxta qiymatlar bilan — yangi ishlab chiqaruvchilar uchun namuna sifatida repozitariyga commit qilinadi.

.env ishlab chiqarishda ishlatilishi mumkinmi?

Mumkin, ammo qo'shimcha himoyasiz tavsiya etilmaydi. Agar .env ishlab chiqarish serverida ishlatilsa, fayl serverning document-root-dan tashqarida 600 kirish huquqi (faqat egasi) bilan joylashgan bo'lishi kerak. Kritik loyihalar uchun sirlar menejerlari afzalroq.

Android loyihasida .env ni qanday yuklash mumkin?

gradle-dotenv (co.uzzu.dotenv) plagini orqali. Plagin .env ni loyiha ildizidan o'qiydi va qiymatlarni BuildConfig ga eksport qiladi. O'zgaruvchilar kompilyatsiya bosqichida kodda BuildConfig.VARIABLE_NAME sifatida mavjud bo'ladi.

.env o'zgaruvchi interpolyatsiyasini qo'llab-quvvatlaydimi?

Ha, ko'plab parserlar ${VAR_NAME} formatida interpolyatsiyani qo'llab-quvvatlaydi. Masalan, URL=${HOST}:${PORT} xuddi shu fayldan HOST va PORT qiymatlarini almashtiradi. Biroq bu funksiya muayyan yuklash kutubxonasiga bog'liq.

Xulosa

  • .env File — atrof-muhit o'zgaruvchilarini saqlash uchun oddiy matn formati, konfiguratsiyani dastur kodidan ajratadi.
  • Twelve-Factor App konfiguratsiyani atrof-muhit o'zgaruvchilarida saqlashni zamonaviy dasturlarning rivojlanish standarti sifatida asoslagan.
  • Integratsiya mobil loyihalarda gradle-dotenv (Android), xcconfig (iOS) yoki flutter_dotenv (Flutter) orqali amalga oshiriladi.
  • Xavfsizlik .env ni .gitignore ga qo'shish va repozitariyda .env.example ishlatish bilan ta'minlanadi.
  • Ishlab chiqarish professional yechimlarni talab qiladi — AWS Secrets Manager, Google Secret Manager yoki HashiCorp Vault.
  • Qiymatlarni almashtirish Android da BuildConfig yoki iOS da Info.plist orqali kompilyatsiya bosqichida, manba kodini o'zgartirmasdan sodir bo'ladi.
  • Sizib chiqish xavfi — API kalitlari bilan bog'liq hodisalarning 12% .env ni repozitariyga commit qilish bilan bog'liq (Snyk, 2024), shuning uchun CI da avtomatik tekshirish majburiydir.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing