Renviron permet de cacher des valeurs secretes comme des mots de passe dans un projet.
Le problème avec github, c'est qu'il garde tous les derniers changements en mémoire. Donc, si vous pushez votre mot de passe, alors même si vous le supprimez et re-pushez vos changements, il reste dans l'historique. Il existe des solutions, mais elles sont généralement plus complexes que d'utiliser de bonnes méthodes de travail. Hadley Wickham recommande donc d'utiliser un fichier .Renviron
.
Une variable d'environnement est une variable accessible par tous les processus d'une session. Dans notre cas et pour nos besoins, c'est une variable qu'on peut configurer en dehors de R et y accéder par R. C'est une des fonctionnalité les plus utilisée d'un systeme d'exploitation, mais c'est aussi une bonne solution pour ajouter nos configurations secrètes et ne pas les pusher.
Si vous allez dans le terminal (pas la console R, mais le terminal), vous pouvez visualiser quelques variables d'environnement qui existent sur votre system:
Windows: tapez echo %DATE%
pour voir la env var qui contient la date du jour
Mac et linux: tapez echo $HOSTNAME
pour voir le nom de votre ordinateur
Ces valeurs sont des variables, et non des fonctions qui retournent des valeurs. Notez qu'une variable d'environnement ne vit que dans une session (R, un terminal, etc.), et donc si vous créez vos variables, vous devrez les recréer si vous fermez votre RStudio. D'où l'utilité du fichier .Renviron
- Ouvrez un terminal sur votre ordinateur. tapez
export PATATE=jaune
sur mac ou linux, ouSET PATATE=jaune
sur windows. - tapez
echo $PATATE
sur mac et linux, ouecho %PATATE%
sur windows. Vous devriez voir apparaitrejaune
. - Fermez le terminal, lancez un nouveau, puis recommencez le point 2.
jaune
n'apparait plus.
Les variables d'environnement, à moins d'être configurés à chaque nouvelle session, cessent d'exister!!
Pour R, il est possible de configurer des variables d'environnement à deux niveaux :
- usager : les variables sont visibles par tous les projets R
- projet : les variables sont visibles uniquement par le projet dans lequel on se trouve
Les variables d'environnement configurées au niveau de l'usager sont utiles pour des valeurs de variables qui demeurent les mêmes à travers les projets. Par exemple, l'url du hub3.0.
- Exécuter
usethis::edit_r_environ()
sur la ligne de commande R - Ajouter les lignes suivantes dans le .Renviron:
# .Renviron
HUB3_URL = "https://hublot.clessn.cloud/"
HUB3_USERNAME = "mon.nom.usager"
HUB3_PASSWORD = "mon.mdp"
- Redémarrer R (Session -> Restart R, ou Ctrl+Shift+F10)
- Taper dans la console R
Sys.getenv("HUB3_USERNAME")
- Confirmer que votre username apparait
- Terminé!
Et oui, vous pouvez utiliser les fonctions Sys.getenv()
et Sys.setenv()
pour manipuler les variables d'environnement. Mais le plus important est donc Sys.getenv()
Supposons maintenant que vous voulez utiliser une table dans le hub3.0. Les fonctions du hub demandent à ce que vous leur fournissiez vos informations de connection (credentials). Pour ce faire
- Ajoutez dans le fichier .Renviron (avec la fonction
usethis::edit_r_environ()
- Redémarrez la session R et validez que les variables existent.
- Maintenant, il est possible d'utiliser ces variables d'environnement pour instancier les credentials à utiliser dans les fonctions de
hublot
:
credentials <- hublot::get_credentials(
Sys.getenv("HUB3_URL"),
Sys.getenv("HUB3_USERNAME"),
Sys.getenv("HUB3_PASSWORD")
)
Le code ainsi produit pourra être utilisé par tout utilisateur ayant configurer ses variables d'environnement pour accéder au hub3.0.
- S'assurer que la ligne .Renviron est présente dans .gitignore (sinon vous pusherez vos variables secrètes. Zut!)
- Créer un fichier .Renviron
- Ajouter la ligne
MA_VALEUR=patate123
dans le .Renviron - Redémarrer R (Session -> Restart R, ou Ctrl+Shift+F10)
- taper dans la console R
Sys.getenv("MA_VALEUR")
- Confirmer que
patate123
apparait - Profit!
Et oui, vous pouvez utiliser les fonction Sys.getenv()
et Sys.setenv()
pour manipuler les variables d'environnement. Mais le plus important est donc Sys.getenv()
Supposons maintenant que vous voulez vous connecter au clessnhub. Généralement, la fonction clessnhub::connect()
vous demanderait d'entrer votre identifiant et mot de passe visuellement, ce qui n'est pas efficace si vous voulez automatiser.
Vous pourriez utiliser le code suivant:
clessnhub::login('myusername', 'mypassword')
Mais le mot de passe se retrouvera dans github. Pas mieux!
- Assurez-vous d'abord que .Renviron est dans le .gitignore.
- Ajoutez dans le fichier .Renviron (ou créez-le), des variables pour votre utilisateur et mot de passe
# .Renviron
CLESSNHUB_USERNAME=olivier
CLESSNHUB_PASSWORD=patate123
- Maintenant, dans réécrivons le code
clessnhub::login
pour utiliser les variables d'environnement:
clessnhub::login(
Sys.getenv("CLESSNHUB_USERNAME"),
Sys.getenv("CLESSNHUB_PASSWORD")
)
- Redémarrez la session R et testez le code.
Voilà! Il vous suffit d'indiquer, dans le readme de votre projet, qu'un nouvel utilisateur devrait lui aussi créer son .Renviron et mettre ses valeurs dans les variables. Quelque chose du genre:
1. Clonez ce repo
2. Créer votre fichier .Renviron
3. Ajoutez-y les variables CLESSNHUB_USERNAME et CLESSNHUB_PASSWORD et vos identifiants
À noter que même si .Renviron est dans .gitignore, il restera sur votre poste et vous pourrez donc travailler sur votre projet même si vous pullez ou pushez. La seule situation où il peut disparaitre est si vous changez de branche puis mergez, mais c'est rarement le cas dans vos projets.
- Exécuter
usethis::edit_r_environ()
sur la ligne de commande R - Ajouter les lignes suivantes dans le .Renviron:
# .Renviron
HUB3_URL = "https://hublot.clessn.cloud/"
HUB3_USERNAME = "mon.nom.usager"
HUB3_PASSWORD = "mon.mdp"
- Redémarrer R (Session -> Restart R, ou Ctrl+Shift+F10)
- Taper dans la console R
Sys.getenv("HUB3_USERNAME")
- Confirmer que votre username apparait
- Terminé!
credentials <- hublot::get_credentials(
Sys.getenv("HUB3_URL"),
Sys.getenv("HUB3_USERNAME"),
Sys.getenv("HUB3_PASSWORD")
)