.env File در توسعه موبایل: چیست، کاربرد و اصل عملکرد

نویسنده: 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 محلی خود را با تنظیمات مخصوص محیط خود (مسیر به DB محلی، کلیدهای 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

انواع مقادیر و escape کردن

همه متغیرها در .env رشته هستند، اما کتابخانه‌های بارگذاری می‌توانند آنها را به نوع مورد نظر تبدیل کنند. برای escape کردن کاراکترهای ویژه از بک‌اسلش و گیومه استفاده می‌شود. اگر مقدار حاوی کاراکتر # به عنوان بخشی از متن است، باید آن را به صورت \# escape کنید.

  • رشته‌ها — بدون گیومه یا در گیومه: KEY=value یا KEY="value with spaces"
  • اعداد — بدون گیومه نوشته می‌شوند: PORT=8080
  • مقادیر بولی — رشته‌های true/false: DEBUG=true
  • چندخطی — بک‌اسلش در انتهای خط: KEY=line1\
    line2
  • جانشینی — در برخی parserها: 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 یک راه‌حل کامل برای ذخیره اسرار در محیط تولید نیست. این فایل سطح پایه‌ای از محافظت را فراهم می‌کند، اما در صورت استفاده نادرست می‌تواند منجر به نشت داده‌های محرمانه شود.

محافظت از طریق .gitignore

مهمترین قانون — .env هرگز نباید وارد سیستم کنترل نسخه مخزن شود. فایل بلافاصله پس از ایجاد به .gitignore اضافه می‌شود و فقط فایل نمونه .env.example با مقادیر خالی یا ساختگی به مخزن commit می‌شود.

env
# .env.example — commit به مخزن
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 — سرویس 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 با استفاده از ابزارهایی مانند husky و lint-staged حاصل می‌شود که بررسی می‌کنند آیا توسعه‌دهنده به طور تصادفی .env را به commit اضافه کرده است یا خیر. ابزارهایی مانند git-secrets (AWS) و talisman هر commit را برای الگوهای کلیدهای API، توکن‌ها و رمزهای عبور اسکن کرده و در صورت تشخیص، commit را مسدود می‌کنند. برای خطوط لوله CI توصیه می‌شود بررسی detect-secrets اضافه شود — یک اسکنر خودکار که حتی در صورت خطای توسعه‌دهنده اجازه ورود فایل .env به مخزن را نمی‌دهد.

سوالات متداول

آیا باید .env را در Git commit کرد؟

خیر، .env نباید در Git commit شود. فایل حاوی داده‌های حساس است و باید به .gitignore اضافه شود. به جای آن، .env.example با الگوی تمام متغیرهای مورد نیاز در مخزن قرار می‌گیرد.

تفاوت بین .env و .env.example چیست؟

.env — فایل واقعی با مقادیر تولیدی که هرگز commit نمی‌شود. فایل .env.example حاوی همان کلیدها اما با مقادیر خالی یا ساختگی است — به عنوان نمونه برای توسعه‌دهندگان جدید به مخزن commit می‌شود.

آیا می‌توان از .env در تولید استفاده کرد؟

می‌توان، اما بدون محافظت اضافی توصیه نمی‌شود. اگر .env در سرور تولیدی استفاده می‌شود، فایل باید خارج از document-root سرور وب با مجوزهای دسترسی 600 (فقط مالک) قرار گیرد. برای پروژه‌های حیاتی، مدیران اسرار ترجیح داده می‌شوند.

چگونه .env را در پروژه Android بارگذاری کنیم؟

از طریق پلاگین gradle-dotenv (co.uzzu.dotenv). پلاگین .env را از ریشه پروژه خوانده و مقادیر را به BuildConfig صادر می‌کند. متغیرها در مرحله کامپایل به صورت BuildConfig.VARIABLE_NAME در کد در دسترس می‌شوند.

آیا .env از درون‌یابی متغیرها پشتیبانی می‌کند؟

بله، بسیاری از parserها از درون‌یابی به فرمت ${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.
  • جایگزینی مقادیر در مرحله ساخت از طریق BuildConfig در Android یا Info.plist در iOS، بدون تغییر کد منبع انجام می‌شود.
  • خطر نشت — 12% از حوادث مربوط به کلیدهای API با commit .env در مخازن مرتبط است (Snyk, 2024)، بنابراین بررسی خودکار در CI الزامی است.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید