ไฟล์ .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 แต่ละบรรทัดประกอบด้วยตัวแปรหนึ่งตัว: ชื่อคีย์และค่าของมัน คั่นด้วยเครื่องหมายเท่ากับ

ไฟล์ .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

รูปแบบ .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 ในโปรเจกต์มือถือ

วิธีการเชื่อมต่อ .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 ในการโหลด .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

แม้จะมีข้อดีทั้งหมด .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 — บริการ 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 ในการคอมมิตโดยไม่ตั้งใจหรือไม่ เครื่องมืออย่าง git-secrets (AWS) และ talisman สแกนแต่ละคอมมิตเพื่อหารูปแบบของคีย์ API โทเค็น และรหัสผ่าน โดยบล็อกคอมมิตหากพบ สำหรับไปป์ไลน์ CI แนะนำให้เพิ่ม detect-secrets — สแกนเนอร์อัตโนมัติที่จะไม่ให้ไฟล์ .env เข้าไปในที่เก็บแม้ว่านักพัฒนาจะทำผิดพลาดก็ตาม

คำถามที่พบบ่อย

จำเป็นต้องคอมมิต .env ใน Git หรือไม่?

ไม่ .env ไม่ควรถูกคอมมิตใน Git ไฟล์มีข้อมูลที่ละเอียดอ่อนและควรเพิ่มใน .gitignore แทนที่ให้วาง .env.example พร้อมเทมเพลตของตัวแปรที่จำเป็นทั้งหมดในที่เก็บ

ความแตกต่างระหว่าง .env และ .env.example คืออะไร?

.env คือไฟล์จริงที่มีค่าการผลิตซึ่งไม่เคยถูกคอมมิต ไฟล์ .env.example มีคีย์เดียวกัน แต่มีค่าว่างหรือปลอม — มันถูกคอมมิตในที่เก็บเป็นตัวอย่างสำหรับนักพัฒนาใหม่

สามารถใช้ .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 เกี่ยวข้องกับการคอมมิต .env ในที่เก็บ (Snyk, 2024) ดังนั้นการตรวจสอบอัตโนมัติใน CI จึงจำเป็น

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม