Le fichier .env stocke les variables d'environnement dans un format simple clé-valeur et sépare la configuration du code source de l'application. Selon The Twelve-Factor App (2011), la configuration doit être strictement séparée du code, et les fichiers .env sont devenus la norme de cette approche. .env File permet d'injecter différentes valeurs de clés API, d'URL de serveur et de flags de compilation sans recompiler le projet.
Points clés
.env File est un fichier de configuration qui stocke les variables d'environnement dans un format texte simple KEY=VALUE. Chaque ligne contient une variable : le nom de la clé et sa valeur, séparés par un signe égal.
Les fichiers .env résolvent un problème fondamental du développement moderne : différents environnements (local, test, production) nécessitent des configurations complètement différentes. L'URL du serveur API sur une machine locale est http://localhost:8080, sur un serveur de production c'est https://api.production.com. Si ces valeurs sont codées en dur directement dans le code de l'application, chaque compilation pour un environnement différent nécessite de modifier le code source.
La pratique de stocker la configuration en dehors du code principal de l'application a été standardisée dans le manifeste The Twelve-Factor App (2011), qui a identifié les variables d'environnement comme la seule façon correcte de configurer une application. Selon l'enquête JetBrains Developer Ecosystem (2024), plus de 67% des développeurs mobiles utilisent des fichiers .env dans leurs projets.
Pour le développement mobile, .env offre un avantage supplémentaire : les valeurs sont substituées à l'étape de compilation via Gradle (Android) ou xcconfig (iOS), permettant de créer des compilations séparées pour le développement, le staging et la production sans modifier le code source.
.env est particulièrement utile en travail d'équipe : chaque développeur crée son propre .env local avec des paramètres pour son environnement (chemin vers la BD locale, clés API de débogage), tandis que les paramètres communs sont fixés dans .env.example dans le dépôt. Cela élimine la situation où après un git pull, la compilation d'un développeur échoue à cause d'une variable d'environnement manquante qu'il ignorait. Un nouveau membre de l'équipe copie simplement .env.example en .env et remplit ses valeurs locales.
Le format .env est extrêmement simple : chaque ligne est une variable sous la forme KEY=VALUE. Les espaces autour du signe égal sont généralement ignorés, mais dans la plupart des bibliothèques, ils sont considérés comme faisant partie de la valeur, donc il est préférable de les éviter.
Les commentaires commencent par le caractère # — toute la ligne après est ignorée. Les lignes vides sont également sautées. Si la valeur contient des espaces, elle est mise entre guillemets doubles ou simples.
# Paramètres d'environnement de base
APP_NAME=MyMobileApp
APP_ENV=development
# Configuration API
API_BASE_URL=http://localhost:3000/api
API_TIMEOUT=30000
# Données sensibles
DB_PASSWORD=secret_password_123
JWT_SECRET=your_jwt_secret_key
Toutes les variables dans .env sont des chaînes, mais les bibliothèques de chargement peuvent les convertir au type nécessaire. Pour échapper les caractères spéciaux, on utilise des antislashs et des guillemets. Si une valeur contient le caractère # comme partie du texte, il doit être échappé comme \#.
KEY=value ou KEY="value with spaces"PORT=8080DEBUG=trueKEY=line1\
line2DB_URL=${DB_HOST}:${DB_PORT}Lors du chargement de .env, les bibliothèques peuvent effectuer une interpolation de variables — substituer les valeurs de certaines clés à l'intérieur d'autres. Par exemple, la variable DATABASE_URL=postgres://${DB_USER}:${DB_PASS}@localhost/db développera DB_USER et DB_PASS à partir du même fichier.
La méthode de connexion de .env dépend de la plateforme. Android utilise des plugins Gradle, iOS — des fichiers de configuration xcconfig, et les solutions multiplateformes comme Flutter — des bibliothèques spécialisées.
Sous Android, .env est chargé via le plugin gradle-dotenv. Le plugin lit .env à la racine du projet et ajoute les valeurs à BuildConfig, après quoi elles sont disponibles dans le code Kotlin ou Java via des champs générés.
// build.gradle.kts (niveau app)
plugins {
id("co.uzzu.dotenv") version "4.0.0"
}
android {
buildFeatures {
buildConfig = true
}
}
kotlin {
// Accès dans le code : BuildConfig.API_BASE_URL
buildConfigField("String", "API_BASE_URL",
"\"" + dotenv.get("API_BASE_URL") + "\"")
}
Sous iOS, les variables d'environnement sont généralement configurées via des fichiers xcconfig. Pour charger .env en Swift, on utilise la bibliothèque DotEnv ou le mécanisme intégré Info.plist avec des clés personnalisées.
// Chargement de .env dans un projet 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"
}
}
Pour Flutter, il existe le paquet flutter_dotenv, qui charge les variables depuis .env lors de l'initialisation de l'application. Le fichier .env est placé à la racine du projet et les variables deviennent disponibles via la classe dotenv.
// pubspec.yaml
dependencies:
flutter_dotenv: ^5.1
// main.dart — chargement au démarrage
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));
}
Les trois approches partagent un principe commun : .env est chargé à l'étape de compilation ou au démarrage de l'application, les valeurs sont mises en cache et utilisées dans le code via des constantes générées. Cela empêche les données sensibles d'atteindre le dépôt.
Pour React Native, on utilise le paquet react-native-config, qui à l'étape de compilation génère automatiquement une classe BuildConfig pour Android et des constantes dans Info.plist pour iOS à partir d'un seul fichier .env à la racine du projet. C'est particulièrement pratique pour les startups qui utilisent Expo ou bare workflow : un seul .env au niveau racine suffit pour que toutes les plateformes reçoivent les mêmes variables d'environnement sans dupliquer les configurations.
Malgré tous les avantages, .env n'est pas une solution complète pour stocker des secrets dans un environnement de production. Il fournit un niveau de protection de base, mais s'il est mal utilisé, il peut entraîner une fuite de données confidentielles.
La règle la plus importante — .env ne doit jamais se retrouver dans le système de contrôle de version du dépôt. Le fichier est ajouté à .gitignore immédiatement après sa création, et seul le fichier d'exemple .env.example avec des valeurs vides ou fictives est commité dans le dépôt.
# .env.example — commitée dans le dépôt
APP_NAME=
APP_ENV=development
API_BASE_URL=http://localhost:3000
API_TIMEOUT=30000
# DB_PASSWORD — ne pas spécifier même dans l'exemple !
# JWT_SECRET — ne pas spécifier même dans l'exemple !
# .gitignore
# Fichiers Dotenv
.env
.env*.local
Pour les projets de production, il est recommandé d'utiliser des solutions professionnelles de gestion des secrets. .env en production n'est acceptable que si le fichier est situé en dehors du document-root du serveur et a des droits d'accès stricts.
Selon Snyk State of Open Source Security (2024), la fuite de fichiers .env via les dépôts a été la cause de plus de 12% de tous les incidents de divulgation de clés API parmi les entreprises interrogées. L'utilisation d'un gestionnaire de secrets dédié réduit ce risque à zéro.
Une protection supplémentaire est obtenue en implémentant des hooks de pre-commit à l'aide d'outils comme husky et lint-staged, qui vérifient si un développeur a accidentellement ajouté .env à un commit. Des outils comme git-secrets (AWS) et talisman analysent chaque commit à la recherche de motifs de clés API, de jetons et de mots de passe, bloquant le commit en cas de détection. Pour les pipelines CI, il est recommandé d'ajouter detect-secrets — un scanner automatique qui ne laissera pas un fichier .env entrer dans le dépôt même si le développeur commet une erreur.
Questions fréquentes
Non, .env ne doit pas être commité dans Git. Le fichier contient des données sensibles et doit être ajouté à .gitignore. À la place, on place dans le dépôt .env.example avec un modèle de toutes les variables nécessaires.
.env est le fichier réel avec les valeurs de production qui n'est jamais commité. Le fichier .env.example contient les mêmes clés mais avec des valeurs vides ou factices — il est commité dans le dépôt comme modèle pour les nouveaux développeurs.
Oui, mais ce n'est pas recommandé sans protection supplémentaire. Si .env est utilisé sur un serveur de production, le fichier doit être situé en dehors du document-root du serveur web avec des droits d'accès 600 (propriétaire uniquement). Pour les projets critiques, les gestionnaires de secrets sont préférables.
Via le plugin gradle-dotenv (co.uzzu.dotenv). Le plugin lit .env à la racine du projet et exporte les valeurs dans BuildConfig. Les variables sont disponibles dans le code sous la forme BuildConfig.VARIABLE_NAME à l'étape de compilation.
Oui, de nombreux analyseurs prennent en charge l'interpolation au format ${VAR_NAME}. Par exemple, URL=${HOST}:${PORT} substituera les valeurs de HOST et PORT du même fichier. Cependant, cette capacité dépend de la bibliothèque de chargement spécifique.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi