Développer sous Windows en 2022
Notre environnement de travail est en constante évolution. Personnellement, j’ai débuté sur Windows avec EasyPHP dans les balbutiements du Web, j’ai ensuite migré vers MacOS et Linux, qui sont aujourd’hui, pour le Web, les références dans les environnements de travail de développeur.
En ce qui concerne Windows, il a toujours pâti d’une mauvaise réputation, que ce soit pour ces BSOD, mais surtout parce que la plupart des applications Web sont installées sur des environnements Linux, et qu’il est (était) compliqué de reproduire certaines de ces spécificités. (a.k.a le problème du : ca marche chez moi) tout en gardant un certain confort de développement.
Mais Windows n’est pas non plus à jeter, surtout depuis quelques années. Ce dernier est plus stable, apporte de nouvelles fonctionnalités pour le développement d’application sous Linux, et reste le seul environnement ou l’on peut lancer une partie de Teamfight Tactics pendant une pause.
Il n’est pas exempt de défaut et cet article n’est pas destiné à vous convertir, mais plutôt à vous montrer comment je l’utilise au quotidien et les différentes astuces que j’ai mises en œuvre pour avoir un environnement de développement performant sous Windows.
Section intitulée terminalTerminal
Être sous Windows ne veut pas dire ne pas avoir de terminal, bien au contraire. Microsoft a fait de nombreux efforts pour proposer des améliorations sur la ligne de commande, surtout sur Windows Terminal, disponible depuis Windows 10 et permettant une gestion plus « moderne ». Attention ce dernier n’est pas une invite de commande, mais simplement un terminal qui encapsule un shell existant, comme cmd ou encore PowerShell.
Si, comme moi, vous n’êtes pas forcément convaincu par les solutions officielles, je vous recommande d’utiliser Alacritty, utilisant le GPU de votre ordinateur pour le rendu. Il est dans certains cas extrêmement performant (défiler un fichier de 100 000 lignes de texte par exemple) :
Outre sa fluidité, le fait qu’il soit cross-platform permet de l’utiliser peu importe le système d’exploitation, et je peux donc garder les mêmes habitudes / raccourcis ou configuration peu importe mon environnement.
Section intitulée wsl-2WSL 2
Windows Subsystem for Linux est devenu un outil indispensable, surtout si vous êtes habitué à l’environnement Linux.
Pour ceux qui serait passé à côté, c’est tout simplement un noyau Linux disponible sous Windows. Cela vous permet d’installer et d’utiliser (presque) n’importe quelle application Linux sous Windows, y compris les applications graphiques depuis Windows 11.
Pour parvenir à cette fin, Windows va créer un fichier (que vous pouvez mettre n’importe où) qui sera le disque dur de ce noyau. Il est recommandé de le placer sur un disque dur qui a suffisamment de place. En ce qui me concerne, ce fichier fait actuellement presque 200 Go, 3 ans après sa création.
Vous pouvez d’ailleurs exporter / importer ce fichier si vous devez procéder à une réinstallation complète de votre système, pour ne perdre aucun fichier sur votre environnement WSL.
Section intitulée distrodDistrod
Pour installer WSL, vous aurez besoin de choisir une distribution. Certaines sont proposées par défaut comme Ubuntu, mais personnellement je préfère des distributions en mode rolling release tel que Arch Linux pour le développement. Cela permet de toujours profiter des dernières versions de nos outils.
En revanche, vous n’aurez pas, par défaut, de système de gestion de services (systemd) sous WSL. Cependant, il existe des solutions et notamment Distrod qui ajoute systemd par dessus n’importe quelle distribution, et permet de démarrer tous les services de votre distribution au démarrage de Windows, comme une base de données, un serveur SSH, etc …
Section intitulée dockerDocker
Docker, ou toute autre solution de conteneur, est devenu un outil indispensable au sein de JoliCode. Tous nos projets sont configurés avec, ce qui nous permet de facilement faire profiter les équipes des évolutions de services liées au projet (ajout d’un Redis / d’un Elasticsearch / d’un RabbitMQ / etc …).
Pour l’utiliser sous Windows, deux possibilités s’offre à vous :
- L’installer directement dans votre distribution : avec Distrod, le service sera démarré automatiquement au lancement de Windows (ou disponible en manuel via systemctl) ;
- Utiliser Docker Desktop : ce dernier va alors créer 2 nouveaux environnements WSL, un pour les outils et binaires de Docker, l’autre pour les données: images / conteneurs / etc.
J’utilise, personnellement, la deuxième version qui me permet d’avoir une interface graphique à disposition pour gérer les images et conteneurs ainsi que voir les logs plus facilement, mais c’est vraiment une histoire de feeling, les 2 solutions se valent.
⚠️ Sur Docker Desktop, les fichiers sont créés dans un répertoire par défaut de Windows, et si comme moi vous avez plusieurs partitions, il peut être intéressant de déplacer les fichiers créés dans une autre partition.
Avec Docker Desktop, il est aussi recommandé d’activer l’option pour injecter les binaires dans votre distribution Linux. Cela vous permettra d’utiliser docker
et docker-compose
en ligne de commande avec la bonne version installée par Docker Desktop.
Section intitulée les-projetsLes projets
Une fois notre environnement WSL et Docker installé, il est temps d’installer nos projets.
Il est tentant d’installer le projet directement dans un répertoire Windows : je vous le déconseille très fortement :
- Les IDE verront que c’est un Windows et vont par défaut vous mettre des sauts de lignes en mode
\r\n
. C’est configurable mais pour peu qu’on oublie de le faire sur un nouveau projet, il faudra repasser partout ; - Vous allez devoir utiliser git sur Windows directement (si comme moi vous préférez utiliser la ligne de commande, ça sera douloureux) ;
- Toute exécution de programme sur WSL devra lire les fichiers depuis Windows et votre environnement risque d’être très très lent (surtout avec du PHP / JavaScript ou tout langage de scripting).
Je vous recommande plutôt d’installer votre projet directement dans WSL avec la ligne de commande classique, comme si vous étiez sous Linux. Vous y gagnerez en confort et en fluidité dans la majorité des cas.
Section intitulée et-l-ideEt l’IDE ?
Si vous avez votre projet sous WSL, vous vous posez peut-être la question de comment faire pour l’IDE, c’est simple : il suffit d’utiliser vim…
Personnellement je préfère Intellij ou encore VsCode. Pas de soucis, ces derniers gèrent de mieux en mieux les projets sous WSL.
Il suffit, lors de l’ajout de projet, de naviguer dans le disque \\wsl$\[votre distro]\[chemin du projet]
et d’utiliser ce chemin directement.
Depuis les dernières versions d’Intellij, vous pouvez même utiliser tous les binaires (golang / node / rust / etc …) directement depuis votre environnement WSL sans avoir besoin de les installer sous Windows. Il faudra alors, comme pour l’ajout du projet, aller chercher les binaires dans \\wsl$\[votre distro]\[chemin du binaire]
…
Section intitulée derniere-notesDernière notes
Il y a tout de même quelques désagréments qu’il faut prendre en compte :
- L’indexation des fichiers par l’IDE peut être lente si ce dernier est conséquent et que vous arrivez sur une version fraîchement installée. Cependant en utilisant le projet au quotidien c’est largement acceptable en termes de temps ;
- Il est arrivé, 2 fois en 3 ans, que WSL ne réponde plus du tout et soit totalement bloqué, même après un redémarrage. Dans ce cas là, il faut désactiver la fonctionnalité et la réactiver. Suite à ces problèmes, je suis passé sur la version preview de WSL qui semble beaucoup plus réactive et ne me bloque plus du tout ;
- Il y a (et il y aura) toujours des intégrations compliquées. J’ai dû, par exemple, utiliser packer pour créer une machine virtuelle avec Ansible. C’était impossible car nous ne pouvons pas exécuter de machine virtuelle sous WSL, et Ansible n’est pas disponible sous Windows. Ce fut le seul moment où j’ai été forcé de travailler sous Linux, mais cela reste des cas à la marge.
Personnellement, j’utilise cette façon de faire depuis maintenant 3 ans quand je suis en télétravail et je ne regrette pas du tout.
J’ai vraiment l’impression de travailler sous Linux avec une interface Windows : ce n’est plus j’utilise Windows ou Linux, mais plutôt j’utilise Windows ET Linux en même temps.