Comment créer votre propre environnement de développement sans souris
Publié: 2022-03-10Il était une fois, au pays magique du développement logiciel, un jeune développeur, votre humble serviteur, découvrant Linux pour la première fois. Du coup, j'ai eu accès au shell Linux, un outil offrant de nombreuses façons d'automatiser tout ce que je ne voulais pas faire encore et encore.
Mais Ubuntu n'était pas sans inconvénients. J'étais souvent victime de bugs d'affichage et de plantages, et cela devenait de plus en plus lent au fil du temps.
Un jour, quelque chose de terrible s'est produit : j'ai dû mettre à jour Ubuntu vers sa prochaine version majeure. Tout s'est écrasé. Je ne pouvais plus démarrer mon système. Je n'avais aucune idée de comment je pouvais résoudre les problèmes auxquels je faisais face car je n'avais aucune idée de la façon dont Linux fonctionnait sous le capot. Ubuntu faisait abstraction de tous les détails pour que je ne m'en soucie pas.
J'ai dû tout réinstaller manuellement - Ubuntu et tous mes outils. Le pire était de tout reconfigurer. Dans l'ensemble, il m'a fallu des jours pour revenir au système que j'avais avant le crash. Mais je ne connaissais aucune autre alternative, alors j'ai continué à utiliser Ubuntu pendant des années. Pendant ce temps, je n'ai jamais réussi à le mettre à jour vers sa prochaine version majeure sans avoir besoin de tout réinstaller manuellement, encore et encore.
Ma vie de développeur a de nouveau changé lorsque mon entreprise a embauché deux excellents développeurs. Ils en savaient beaucoup sur Linux et les différentes distributions que je pouvais utiliser. Ils m'ont guidé, m'ont montré les outils qui résolvaient tous les problèmes que j'avais avec Ubuntu. Ces outils ont considérablement amélioré mon flux de travail ; ils m'ont montré à quel point il était pratique pour un développeur de garder le plus possible les mains sur le clavier.
Cela s'est passé il y a six ans. J'utilise toujours le même environnement de développement aujourd'hui. J'utilise le clavier 92,8% du temps pour gérer tous mes outils, en utilisant des frappes qui ont du sens et qui sont faciles à retenir. Je peux réinstaller tout mon système avec un tas de scripts que j'ai écrits, y compris tous les outils que j'utilise et leurs configurations.
Aujourd'hui, je souhaite partager avec vous ces outils afin que vous puissiez vous aussi augmenter votre efficacité et votre confort dans votre travail quotidien. Ils fonctionnent bien ensemble, façonnant ce que j'appelle mon environnement de développement sans souris . Plus précisément, nous aborderons :
- Pourquoi l'utilisation du shell Linux peut être très puissante lorsque vous travaillez avec du texte brut (y compris du code) ;
- Pourquoi utiliser le redoutable Arch Linux ?
- L'avantage d'un gestionnaire de fenêtres en mosaïque ;
- Comment avoir une excellente expérience de terminal avec URxvt, tmux et tmuxp ;
- Pourquoi Vim peut devenir votre meilleur ami.
Note : Les outils que je préconise dans cet article fonctionnent sur des systèmes basés sur Linux. Vous pouvez également les utiliser avec macOS, sauf pour i3. Pour Windows, le moyen le plus simple consiste à utiliser le sous-système Windows Linux (WSL) pour les installer et les utiliser.
Je n'aurais jamais découvert cette nouvelle façon de travailler sans essayer ces outils. C'est pourquoi je vous encourage à les installer, à les expérimenter et à voir par vous-même si vous tombez amoureux comme moi.
Sans souris avec la coquille
En tant que développeur, il est presque impossible d'éviter d'utiliser un shell. Il s'agit d'un outil puissant qui peut simplifier votre flux de travail en automatisant toutes les tâches ennuyeuses.
Les avantages de la coque
Avant de parler des avantages de l'utilisation du shell et du terminal, expliquons brièvement quelle est la différence entre ces deux idées.
Le terminal est une interface graphique qui vous permet d'interagir avec le shell. Sous Linux, ce shell est souvent Bash, mais ça peut être un autre aussi, hein Zsh. Le shell est un interprète. Vous pouvez l'alimenter avec des commandes et il les exécutera pour effectuer certaines actions. Il vous donnera aussi, parfois, une sortie en retour. Les termes « ligne de commande » et « shell » sont synonymes.
Si nous comparions l'environnement de développement sans souris au système solaire, la coquille serait le soleil et tout le reste tournerait autour de lui. C'est parce que le shell est vraiment puissant : il permet d'exécuter de nombreux petits programmes qui fonctionnent très bien ensemble. Ils sont appelés CLI (interfaces de ligne de commande).
Le gros avantage de ces outils : ils sont très simples et limités isolément, mais vous pouvez les enchaîner pour des résultats performants . Par exemple, vous pouvez utiliser ensemble les CLI « history », « sort », « uniq » et « head » pour afficher les CLI que vous utilisez le plus et la fréquence de leur utilisation.
Il existe de nombreuses CLI disponibles. Premièrement, parce que le shell Linux existe depuis longtemps ; les développeurs ont eu le temps de développer de nombreux outils et de les fiabiliser. Deuxièmement, parce qu'il est plus facile de développer des CLI que des GUI (Graphical User Interfaces). La conception et la mise en œuvre de ces interfaces graphiques demandent beaucoup plus de travail. Les CLI n'ont que des interfaces textuelles , qui sont plus faciles à développer, à modifier et à maintenir.
C'est aussi pourquoi les CLI sont rapides : pas besoin de gâcher l'affichage et d'autres éléments graphiques. C'était l'un de mes principaux problèmes avec Ubuntu : son environnement de bureau, Unity, était assez lourd, lent et bogué. Tout du moins selon moi. L'utilisation de plus d'interfaces graphiques en plus a aggravé les choses.
Autre gros avantage de la ligne de commande : vous pouvez écrire des scripts shell pour automatiser toutes les tâches ennuyeuses que vous répétez jour après jour. Par exemple, si vous devez redimensionner très souvent des images à la même taille, vous pouvez écrire un script pour cela. Si vous effectuez souvent des recherches dans certains types de fichiers spécifiques, vous pouvez également l'automatiser. Le ciel est la limite.
Les CLI ont aussi des inconvénients. C'est un peu plus intimidant à utiliser pour les débutants, mais il existe des moyens d'obtenir rapidement ce dont vous avez besoin même si vous ne savez pas comment utiliser une CLI spécifique.
Enfin, si vous avez des tâches à effectuer sur des serveurs distants, vous finirez souvent par utiliser le shell. Ils n'ont pas d'interface graphique la plupart du temps, vous n'aurez donc pas le choix. Dans ces cas, il est nécessaire de connaître votre chemin autour de la ligne de commande.
Une approche sans souris
Parce que le shell a une interface textuelle, vos mains restent sur votre clavier lorsque vous l'utilisez. C'est quelque chose que je n'avais jamais vraiment envisagé pendant mes premières années en tant que développeur, mais c'est un gros avantage.
D'après mon expérience, éviter les centaines de mouvements de la main entre le clavier et la souris permet d'économiser beaucoup d'énergie cognitive. J'ai été choqué de découvrir à quel point c'était confortable quand j'ai vraiment essayé de coller à mon clavier. En prime, j'ai l'impression d'être un hacker utilisant uniquement mon clavier avec mon shell, même si je n'écris que ma liste de courses ! C'est génial ?
Je dois admettre que j'étais très sceptique à propos de cette idée "sans souris" avant de l'essayer. Avec les outils que je décris ci-dessous, je n'ai pas eu à changer toutes mes habitudes du jour au lendemain : on peut aussi utiliser la souris avec eux. Mais ils brillent vraiment lorsqu'ils sont gérés avec le clavier.
Même si cela n'a jamais été vraiment prouvé, je crois aussi que rester sur le clavier nous rend plus efficaces . Comme le souligne le livre The Pragmatic Programmer :
« Utiliser uniquement des frappes pour les opérations d'édition courantes est plus efficace que les commandes de la souris ou du menu, car vos mains ne quittent jamais le clavier.
Cela étant dit, l'efficacité n'est pas l'objectif principal ici. J'aime rester sur mon clavier et utiliser tous ces outils car je peux me concentrer entièrement sur les tâches à accomplir. Cela me motive à commencer à travailler et à accomplir mes tâches.
Le fondement : Arch Linux
Au début de mon voyage sans souris, un de mes nouveaux amis m'a conseillé d'utiliser Arch Linux au lieu d'Ubuntu. Encore une fois, le scepticisme rampait, les doutes envahissaient mon pauvre cerveau. Arch Linux ? Cette horrible distribution Linux que vous devez installer et configurer entièrement manuellement ? Ce système instable est devenu une blague pour beaucoup ?
Parfois, les stéréotypes n'ont rien à voir avec la réalité, et Arch Linux en est l'exemple parfait. J'ai utilisé Windows (de 98 à 7), macOS et j'ai également essayé d'autres distributions Linux. Ma conclusion, sans aucun doute : Arch Linux est le plus stable de tous.
Cela étant dit, Arch Linux n'est pas une exigence pour un environnement de développement sans souris. Vous pouvez également utiliser tous les autres outils décrits dans cet article avec d'autres distributions Linux. Vous pouvez également les utiliser avec macOS (sauf i3) ou Windows si vous disposez du sous-système Windows pour Linux (WSL). Mais, avant de le faire, laissez-moi vous dire pourquoi vous devriez sérieusement envisager Arch Linux .
Un système de libération par roulement
Arch Linux dispose d'un système de publication progressive . Cela signifie que vous devez mettre à jour l'ensemble de votre système souvent, chaque semaine ou toutes les deux semaines. Pour en revenir à Ubuntu, il dispose d'un système de support à long terme : il vous suffit de le mettre à jour quelques fois par an, voire moins si vous le souhaitez.
De nombreux développeurs pensent qu'un système de release évolutive rend votre environnement de développement instable, ce qui explique en partie la réputation d'Arch Linux. Mais je n'ai jamais eu de problème en six ans d'utilisation quotidienne, et mes amis l'utilisent non plus. D'un autre côté, les avantages d'un système de roulement sont grands :
- Toutes les applications que j'utilise sont constamment à jour. Pas besoin de les compiler manuellement pour avoir la version la plus récente en cas de besoin.
- La mise à jour de votre système signifie souvent que moins de changements seront introduits à la fois. En conséquence, il y a également moins de risques d'accidents.
Je vous ai raconté mon expérience avec Ubuntu et les plantages que j'ai eu lors de sa mise à jour. Je n'ai jamais eu de problème avec Arch Linux.
Tout ce dont vous avez besoin
De plus, les référentiels d'Arch Linux sont énormes. Il est très probable que vous y trouverez tous les outils dont vous avez besoin. Si vous ne le faites pas, vous pouvez regarder les AUR (Arch User Repositories), où il y a tout le reste. L'AUR n'est pas un référentiel officiel, il pourrait donc y avoir des problèmes de sécurité avec les applications qui s'y trouvent. Encore une fois, je n'ai jamais eu de problème avec eux, mais c'est possible. Tant que vous vous en tenez aux dépôts officiels et que vous n'installez pas tout et n'importe quoi depuis l'AUR, vous n'aurez aucun problème.
Une opportunité d'apprentissage
Mentionnons également qu'Arch Linux est une distribution très minimale. Il n'impose pas beaucoup d'applications inutiles lorsque vous l'installez. En parlant de cela, vous devez installer toute la distribution manuellement à l'aide du shell. La tâche peut sembler ardue mais, d'un autre côté, vous apprendrez beaucoup de l'expérience.
Comme je l'ai mentionné au début de cet article, connaître un minimum le fonctionnement sous le capot des systèmes basés sur Linux peut vous aider lorsque votre système se comporte bizarrement ou lorsqu'il plante. Ce n'est pas aussi complexe que cela puisse paraître et, si vous êtes un développeur, je dirais que c'est obligatoire. Le Web, votre téléphone ou votre Raspberry Pie fonctionnent sous Linux de nos jours.
Enfin, Arch Wiki est le meilleur endroit que vous puissiez trouver pour tout ce qui concerne Linux. Cela m'a beaucoup aidé au fil des ans, même lorsque j'utilisais Ubuntu. C'est un endroit idéal pour dépanner votre système et trouver de nouveaux outils.
Gérer votre Windows avec i3
Maintenant que nous avons examiné pourquoi Arch Linux peut être une base solide pour votre environnement de développement sans souris, voyons ce que nous pouvons ajouter en plus.
Mais d'abord, un peu de théorie. Les systèmes d'exploitation comportent souvent trois couches, plus ou moins couplées entre elles :
- Le noyau , qui touche directement au matériel de votre ordinateur ;
- Le shell , une interface pour vous, ou certaines applications, pour interagir avec le noyau ;
- Une couche d'affichage au-dessus, comme un gestionnaire de bureau ou un gestionnaire de fenêtres en mosaïque.
Gnome ou Unity sont tous deux des gestionnaires de bureau pour les systèmes basés sur Linux. Ils gèrent vos fenêtres et bien d'autres choses, comme votre barre d'état ou votre lanceur d'applications. Les gestionnaires de fenêtres en mosaïque sont une alternative aux gestionnaires de bureau, et ils sont souvent plus petits et plus axés sur la manipulation des fenêtres.
Le gestionnaire de fenêtres en mosaïque i3 est en effet très léger : je l'utilise en ce moment sur un ordinateur d'une dizaine d'années (Lenovo x220) et il ne ralentit pas. Il est également simple à utiliser, la documentation est excellente et, plus important encore, vous pouvez gérer vos fenêtres uniquement avec votre clavier (si vous le souhaitez).
Les bases d'i3 sont simples : vous pouvez ouvrir des fenêtres dans différents espaces de travail représentant un écran entier . Il est très similaire aux bureaux virtuels de nombreux gestionnaires de bureau Linux. Ensuite, lorsque vous ouvrirez vos applications préférées, l'écran sera automatiquement partagé en fonction du nombre de fenêtres à l'écran.
Par exemple, si vous ouvrez Firefox, sa fenêtre occupera 100 % de l'écran. Si vous ouvrez trois instances de Firefox, chacune d'elles occupera 33 % de l'écran.
Vous pouvez également modifier la disposition des fenêtres. Au lieu d'avoir toutes les fenêtres visibles à l'écran, vous pouvez les empiler les unes sur les autres et les parcourir d'une simple frappe. Si vous avez besoin de fenêtres flottantes "normales", vous pouvez également les configurer.
Le but d'i3 est de simplifier la gestion de toutes vos fenêtres. Au lieu d'utiliser votre souris pour les déplacer et les redimensionner à chaque fois que vous en ouvrez de nouveaux, vous pouvez utiliser des frappes pour effectuer la même opération uniquement lorsque vous en avez besoin .
Ça a l'air trop compliqué ? J'étais efficace avec i3 deux jours après l'avoir essayé. Je ne suis pas un génie ; si je pouvais le faire, vous pouvez le faire aussi.
La cerise sur le gâteau : comme tous les outils décrits dans cet article, vous pouvez personnaliser i3 et ses frappes au clavier comme bon vous semble.
Le seul inconvénient d'i3 : il n'est pas disponible pour macOS. Mais il existe d'excellentes alternatives , comme le gestionnaire de fenêtres en mosaïque Amethyst ou Divvy.
Améliorez votre terminal avec URxvt, tmux et tmuxp
Le terminal est l'interface qui vous donne accès au shell. Même si le shell est la vraie affaire, nous pouvons le rendre plus facile à utiliser avec quelques outils.
Le chemin de la simplicité avec URxvt
J'aime la simplicité, et c'est en partie pour cela que j'aime l'environnement de développement que je décris dans cet article. En parlant de cela, URxvt est l'un des terminaux les plus simples que vous puissiez trouver. Il est également rapide et fiable. En six ans, je ne l'ai jamais vu s'écraser ou même ralentir. Il fait ce qu'il est censé faire : vous permettre d'utiliser le shell. Ni plus ni moins.
Le multiplexeur de terminaux avec tmux
Même si j'aime la simplicité d'URxvt, j'aime aussi avoir un bon multiplexeur de terminaux sur lequel je peux compter, comme tmux.
Qu'est-ce qu'un multiplexeur de terminaux ? Il vous permet d'ouvrir des sessions contenant plusieurs shells . Ces sessions sont conservées en arrière-plan : même si votre terminal plante ou si vous le fermez par accident, vos shells ne disparaîtront pas. Vous pouvez les récupérer dans un autre terminal quand vous le souhaitez (comme si de rien n'était).
Ceci est utile sur votre ordinateur local, mais c'est encore mieux sur un serveur distant. Vous pouvez, par exemple, vous connecter à un serveur via SSH, exécuter un script, fermer votre connexion SSH et votre terminal sur votre machine locale, et rentrer chez vous. Parce que votre shell est toujours en cours d'exécution sur votre serveur grâce à tmux, votre script continuera également à s'exécuter.
Ce n'est pas tout : tmux est un peu un touche-à-tout, dans le bon sens. Vous pouvez l'utiliser pour ouvrir plusieurs fenêtres contenant plusieurs volets dans un terminal. Vous pouvez considérer une fenêtre comme le terminal entier et un volet comme un shell prenant un pourcentage de la fenêtre.
Cela vous rappelle i3 ? Il suit les mêmes principes, mais il ne peut que créer de nouveaux shells. C'est pourquoi de nombreux utilisateurs satisfaits d'i3 ne voient aucun intérêt à utiliser tmux. Personnellement, j'aime utiliser les deux.
Comme toujours, vous pouvez manipuler les fenêtres et les volets de tmux avec votre clavier, et vous pouvez configurer tmux lui-même selon vos souhaits les plus fous.
tmuxp
Imaginons que vous souhaitiez utiliser tmux pour l'application perturbatrice que vous développez en ce moment. Vous devez d'abord ouvrir un terminal. Ensuite, vous devez créer autant de fenêtres de tmux que nécessaire et diviser ces fenêtres avec les volets que vous souhaitez.
Rappel : Un volet représente une coque. Dans chacun de ces shells, vous pouvez ensuite exécuter toutes les CLI dont vous avez besoin pour un projet spécifique : par exemple, exécuter un conteneur docker ou afficher des journaux.
Mais vous pouvez également automatiser tout cela, et c'est là que la véritable puissance de tmux - dans le contexte d'un environnement de développement - brille vraiment. À l'aide d'une autre CLI appelée tmuxp, vous pouvez écrire dans un fichier de configuration YAML les fenêtres, les volets et la commande de votre choix. Ensuite, vous pouvez charger cette configuration et créer automatiquement votre session tmux personnalisée.
J'ai un de ces fichiers de configuration pour chacun de mes projets. Cela me fait gagner beaucoup de temps et d'énergie. Comme je le disais plus haut, c'est l'un des principaux avantages de l'utilisation du shell.
Editor Plus Shell est égal à IDE
Puisque le shell est si puissant, pourquoi ne pas y faire tourner directement un éditeur ? Pourquoi ne pas utiliser Vim ?
Comme Arch Linux, Vim a la réputation d'être difficile à apprendre. C'est plus subtil : c'est assez facile d'être productif avec, mais c'est long à maîtriser. Si vous utilisez Linux et que Vim est installé, vous pouvez apprendre les bases en 20 minutes en exécutant vimtutor
dans votre shell.
Vim offre de nombreuses fonctionnalités qui peuvent être étendues avec d'innombrables plugins. De plus, vous pouvez interagir directement avec votre shell à l'aide de Vim, en utilisant la CLI de votre choix directement dans votre éditeur. Il transformera Vim en un IDE complet.
Vim a un autre gros avantage : vous pouvez l'utiliser pour développer dans de nombreux langages de programmation. Je n'aime pas basculer entre différents IDE chaque fois que j'ai besoin de programmer en PHP, Golang ou Clojure. L'interface est différente, j'ai besoin de configurer chacun de ces éditeurs séparément, et je ne peux pas vraiment enregistrer les configurations quelque part pour les réutiliser lorsque je réinstallerai ces outils.
Avec Vim, je peux coder dans n'importe quel langage tout en restant dans le même éditeur . Comme VS Code, vous pouvez utiliser des LSP (Language Server Providers) pour activer l'auto-complétion, le linting et la refactorisation automatique pour les langages de programmation les plus courants (et même les plus ésotériques).
Vim est également rapide. Il ne nécessite pas beaucoup de ressources pour fonctionner. J'ai souvent 6 ou 7 instances de l'éditeur ouvertes en permanence sur mon ancien ordinateur, sans aucun problème. En comparaison, j'ai utilisé des IDE IntelliJ pendant des années et, lorsque j'en ai ouvert deux, tout mon système commençait à ralentir. C'est vraiment pratique quand je travaille sur différents projets en même temps, comme un tas de microservices, par exemple.
Dois-je ajouter que Vim est hautement configurable ? Au lieu d'avoir de nombreuses fonctionnalités directement dans votre IDE (y compris certaines que vous n'utiliserez jamais), vous pouvez choisir ce dont vous avez exactement besoin et supprimer ce dont vous n'avez pas besoin.
Un ensemble de frappes cohérentes
Si Arch Linux est le fondement de mon environnement de développement sans souris, alors i3, Zsh, tmux et Vim sont les ateliers pour mes besoins créatifs. Cela me donne un niveau de confort que je n'ai jamais connu avec d'autres outils.
Mais vous vous demandez peut-être pourquoi vous devriez utiliser tous ces nouveaux outils et leurs raccourcis clavier alors que vous pouvez déjà utiliser les raccourcis des outils que vous connaissez déjà ?
Eh bien, les raccourcis de la plupart des applications sont souvent dénués de sens . C'est une soupe de clés qui n'ont aucun rapport entre elles. De ce fait, ils sont difficiles à retenir, et ils peuvent être assez différents d'un outil à l'autre.
Les outils que je décris dans cet article sont censés s'adapter parfaitement les uns aux autres. Vous pouvez presque utiliser la même frappe pour chacun d'eux. Une seule touche différera, pour que le système sache sur quel outil vous souhaitez agir. Cela facilite la mémorisation des différentes frappes.
De plus, Vim a été conçu pour avoir des frappes qui ont du sens en créant un langage simple sur lequel vous pouvez compter. Par exemple, pour supprimer un mot, vous pouvez appuyer sur daw
. Pour supprimer un paragraphe, c'est dap
. Étant donné que de nombreuses CLI sont basées sur les frappes de Vim, l' apprentissage de Vim ouvrira la porte à de nombreuses autres CLI .
Installation automatique de votre environnement de développement sans souris
L'installation manuelle d'Arch Linux permet d'en apprendre beaucoup sur les systèmes basés sur Linux, mais cela vieillit lorsque vous devez le faire chaque fois que vous souhaitez installer votre système sur un nouvel ordinateur. C'est pourquoi j'ai créé mes propres scripts pour installer tout mon environnement de développement sans souris. Ils installent Arch Linux ainsi que tous les outils que j'utilise avec leurs configurations. Lorsque j'ai besoin d'utiliser un nouvel ordinateur, je peux simplement exécuter ces scripts, et le tour est joué !
Êtes-vous prêt à devenir un développeur sans souris ?
Grâce à la flexibilité que j'ai avec mon environnement de développement, je peux aussi changer d'outil facilement. Par exemple, si je ne veux plus utiliser tmux, je peux le remplacer par un autre multiplexeur de terminal. Si je n'aime pas la barre d'état d'i3 ou mon lanceur d'applications, je peux aussi les remplacer.
Comme vous l'avez peut-être deviné, la configuration de ce type de système nécessite du temps, de la motivation et des efforts . C'est pourquoi j'ai écrit un livre intitulé "Building Your Mouseless Development Environment". Il décrit en détail comment configurer tous les outils, comment créer des scripts pour installer l'ensemble du système avec une seule commande et comment tout personnaliser pour vos besoins personnels. Si vous ne connaissez pas grand-chose au shell Linux, il vous permet de créer un projet personnalisé pour vous familiariser avec celui-ci.
Si vous êtes intéressé, vous trouverez ici un échantillon du livre ainsi que sa table des matières complète.
Je pense que la meilleure façon de savoir si vous aimeriez ce genre de système est simplement de l'essayer. Je peux vous garantir une chose : vous apprendrez beaucoup en cours de route !
Lectures complémentaires sur Smashing Magazine
- "J'ai utilisé le Web pendant une journée avec juste un clavier", Chris Ashton
- "Un guide complet des claviers mécaniques", Ben Frain
- "Présenter un argumentaire solide en faveur de l'accessibilité", Todd Libby
- "Accessibilité dans Chrome DevTools", Umar Hansa