Comparaison des gestionnaires de versions Ruby pour macOS

Dans cet article, je vais comparer les gestionnaires de versions les plus populaires pour Ruby sur Mac : Chruby, Rbenv et RVM, ainsi qu’Asdf, un gestionnaire de versions pour plusieurs langues, et Frum, un tout nouveau gestionnaire de versions écrit en Rust. Je ferai des recommandations en fonction de ce dont vous avez le plus besoin.

Le Ruby préinstallé n’est pas pour les développeurs

Les personnes nouvelles à Ruby sont ravis de découvrir que Ruby est préinstallé sur macOS. Ils sont souvent déçus quand un développeur plus expérimenté leur dit : « Ne utilisez pas le Ruby système Mac. » J’ai écrit ailleurs sur les raisons. En bref, le Ruby système est là pour macOS, pas pour vous. Il est parfait pour exécuter des scripts de service, mais pour le développement, le Ruby système est dépassé et, si vous n’êtes pas prudent, l’installation de gems peut entraîner des maux de tête (y compris des violations de sécurité du système).

Le problème du Ruby de Homebrew

Homebrew est le gestionnaire de paquets qui est devenu une quasi-norme pour ajouter des logiciels de développeur à macOS. Homebrew facilite l’installation d’une nouvelle version de Ruby pour éviter de dépendre du Ruby système. Mais il y a deux problèmes avec Homebrew. Premièrement, la version de Ruby de Homebrew peut être remplacée automatiquement et sans préavis par une nouvelle version lors de l’installation d’autres paquets Homebrew (un problème résolu par brew pin ruby). Plus important encore, Homebrew ne vous permet d’installer qu’une seule version de Ruby. Si vous développez ou maintenez plus d’un projet en Ruby, vous aurez probablement besoin de basculer entre les versions de Ruby. C’est là que vous aurez besoin d’un gestionnaire de versions.

Asdf pour plusieurs langues

Asdf est un gestionnaire de versions adapté à plusieurs langues. Si vous utilisez Ruby pour développer des applications web avec Rails 6, vous devrez installer Node et Yarn pour créer une application de démarrage Rails. (Rails 7 pourrait supprimer le besoin de Node, mais ce n’est pas encore certain à ce moment-là.)

Ainsi, pour un développeur Rails, Asdf est un gestionnaire de versions idéal. Il vous sera également utile si vous développez des applications en Python, Elixir ou dans de nombreuses autres langues (voir une liste des langues prises en charge). Existe-t-il un inconvénient à utiliser Asdf? Juste deux. Il utilise shims pour intercepter les commandes courantes, ce qui peut rendre la résolution des problèmes difficile. De plus, il peut être un peu lent pour certaines opérations. Si vous développez dans plusieurs langues, je vous recommande d’essayer Asdf pour voir si vous l’aimez. Passez à Frum, le gestionnaire de versions Ruby uniquement écrit en Rust, si vous trouvez qu’Asdf vous ralentit.

Gestionnaires de versions Ruby uniquement

Si vous n’avez l’intention que de développer des applications en utilisant Ruby, choisissez parmi les quatre gestionnaires de versions Ruby uniquement : Chruby, Frum, Rbenv et RVM. Les différences entre les quatre reposent sur la vitesse, la complexité et la manière dont chacun change de versions Ruby. Regardons d’abord le plus ancien : RVM.

RVM

RVM a été le premier gestionnaire de versions populaire pour Ruby. Il est toujours maintenu et largement utilisé. RVM modifie la commande système cd pour définir les variables d’environnement lorsque vous changez de répertoire. Pour remplacer la commande cd, le script d’installation RVM modifie le fichier de configuration de la shell (le fichier ~/.zshrc sur les nouveaux Macs).

RVM affiche correctement les variables d’environnement pour révéler la version et l’emplacement de Ruby et des gemmes, ce qui peut aider à diagnostiquer les problèmes. Cependant, RVM inclut des fonctionnalités supplémentaires telles que les gemsets. Les gemsets ne sont plus nécessaires, puisque Bundler a été ajouté au noyau Ruby pour gérer les dépendances de gemmes. La complexité supplémentaire n’est pas nécessaire, donc de nombreux développeurs ont changé pour un gestionnaire de versions plus récent tel que Rbenv, Chruby ou Frum.

Rbenv

Avec RVM, Rbenv a longtemps été le gestionnaire de versions le plus populaire pour Ruby. Rbenv utilise shims pour intercepter les commandes Ruby courantes. (Asdf utilise également des shims.)

Après avoir installé Rbenv avec Homebrew, vous devez modifier votre fichier ~/.zshrc pour que les shims Rbenv aient la priorité sur les commandes Ruby ordinaires. Le shim appelle la commande rbenv exec, qui détermine quelle version de Ruby utiliser avant d’exécuter toute commande Ruby.

Les cales présentent deux inconvénients. Premièrement, les cales compliquent le dépannage en cachant la commande réelle. Par exemple, la commande which ruby affiche la cale Rbenv, pas la version réelle de Ruby (vous devez définir la variable d’environnement RBENV_DEBUG si vous voulez voir la commande Ruby réelle). Deuxièmement, une cale peut ajouter des microsecondes de retard à l’exécution d’une commande Ruby. (Rbenv intervient chaque fois que vous exécutez une commande Ruby, contrairement à RVM, qui intervient uniquement lorsque vous changez de répertoire.) Pour les développeurs qui remarquent le retard, ou qui n’aiment pas l’idée des cales, il existe Chruby ou Frum.

Chruby

Chruby n’est pas aussi connu que RVM ou Rbenv, mais il est soutenu par plusieurs développeurs Ruby importants. Contrairement à RVM, il n’impacte pas la commande cd. Contrairement à Rbenv ou Asdf, il n’intercepte pas les commandes à l’aide de cales. Vous devrez modifier votre fichier ~/.zshrc pour que Chruby s’exécute dans votre environnement de shell local. Il n’est pas nécessaire de modifier votre $PATH, car Chruby s’en charge pour vous, en fonction de la version de Ruby que vous avez sélectionnée.

Chruby définit également certaines variables d’environnement pour Ruby. C’est tout ce qu’il faut pour que Chruby passe d’une version de Ruby à une autre. Il fonctionne correctement pour le dépannage avec which. J’ai utilisé Chruby pendant plusieurs années et n’ai rencontré aucun problème avec. Chruby est une excellente option, mais vous pourriez vouloir essayer Frum, le gestionnaire de versions Ruby le plus récent.

Frum

Frum est écrit en Rust, un langage idéal pour une exécution rapide des commandes en ligne de système. Frum est nouveau (sorti au début de 2021). Contrairement à Asdf, Chruby ou Rbenv, il inclut une commande d’installation de Ruby intégrée, donc aucun programme supplémentaire n’est nécessaire pour installer Ruby. L’installateur est rapide et Frum n’a pas de dépendances (c’est un exécutable Rust tout-en-un que vous pouvez installer avec Homebrew).

Après avoir installé Frum, vous devez modifier votre fichier ~/.zshrc pour que Frum s’exécute dans votre environnement de shell local. Comme les autres gestionnaires de versions, il recherche un fichier .ruby-version dans un répertoire de projet et, s’il n’y a pas de version spécifiée pour un projet, il retourne à une version Ruby globale. Il n’y a pas de shims (contrairement à Asdf ou Rbenv) et il n’impacte pas la commande cd (contrairement à RVM). Bien qu’il soit nouveau, je le recommande car il est tout-en-un et rapide.

Installer un Gestionnaire de Versions pour Ruby

I’ve written a complete guide to installing Ruby on Mac. In the guide, I provide instructions for:

Si vous souhaitez explorer RVM ou Rbenv, voir:

A Note about Docker

Si vous parlez de gestionnaires de versions Ruby, il est probable que quelqu’un dise : « J’utilise Docker. » Docker est un outil de containerisation utilisé par certains développeurs pour la gestion des versions. L’utilisation principale de Docker est de créer un serveur virtuel reproductible contenant une version configurée de toute dépendance logicielle nécessaire pour exécuter une application (langage, bases de données, files d’attente de messages). En tant que tel, il est idéal pour créer une version « gelée » d’un environnement de développement pour le déploiement sur un serveur.

Vous pouvez également développer localement dans un conteneur, mais cela sera plus lent, nécessitera plus de mémoire et ajoutera une complexité de configuration par rapport à un gestionnaire de versions. Pour garder les choses simples, j’évite Docker pour le développement local à moins qu’une application ne soit d’une complexité troublante.

Conclusion

Vous n’êtes pas seulement un utilisateur occasionnel de Ruby si vous travaillez sur plusieurs projets en Ruby. Assurez-vous d’installer un excellent gestionnaire de versions dans votre environnement de développement local.

I like Asdf because I develop in Ruby and JavaScript and Asdf gives me one version manager for both languages. However, Asdf uses shims (like Rbenv) so occasionally it’s slower than I like. I also find it annoying that Asdf hides the actual command from troubleshooting with the which command. If these drawbacks outweigh the convenience of managing multiple languages, I recommend using Frum to switch among your Ruby versions. Version managers should be simple and stay out of your way when you’re working.

Foire aux questions (FAQ) sur les gestionnaires de versions Ruby pour MacOS

Quelles sont les principales différences entre RVM et rbenv?

RVM (Ruby Version Manager) et rbenv sont tous deux des outils pour gérer plusieurs versions de Ruby sur votre système. La différence clé réside dans leur approche. RVM est plus riche en fonctionnalités et vous permet de gérer des gemsets – un ensemble de gems utilisées pour une application Ruby spécifique. D’autre part, rbenv est plus simple et se concentre uniquement sur le changement de versions Ruby. Il ne prend pas en charge les gemsets, mais vous pouvez obtenir une fonctionnalité similaire en utilisant un plugin appelé ruby-build.

Comment installer une version spécifique de Ruby à l’aide de RVM?

Pour installer une version spécifique de Ruby à l’aide de RVM, vous pouvez utiliser la commande ‘rvm install’ suivie du numéro de version. Par exemple, pour installer Ruby 2.6.3, vous utiliseriez la commande ‘rvm install 2.6.3’. Une fois installé, vous pouvez passer à cette version en utilisant la commande ‘rvm use’, comme ‘rvm use 2.6.3’.

Puis-je utiliser à la fois RVM et rbenv sur le même système?

Bien que techniquement possible d’avoir à la fois RVM et rbenv installés sur le même système, cela n’est généralement pas recommandé. Les deux outils modifient votre environnement de shell et avoir les deux peut conduire à un comportement inattendu. Il est préférable de choisir celui qui correspond à vos besoins et de s’y tenir.

Comment désinstaller une version de Ruby à l’aide de rbenv?

Pour désinstaller une version de Ruby à l’aide de rbenv, vous pouvez utiliser la commande ‘rbenv uninstall’ suivie du numéro de version. Par exemple, pour désinstaller Ruby 2.6.3, vous utiliseriez la commande ‘rbenv uninstall 2.6.3’.

Comment définir une version Ruby par défaut avec RVM?

Pour définir une version Ruby par défaut avec RVM, vous pouvez utiliser la commande ‘rvm –default use’ suivie du numéro de version. Par exemple, pour définir Ruby 2.6.3 comme version par défaut, vous utiliseriez la commande ‘rvm –default use 2.6.3’.

Comment mettre à jour rbenv et ses plugins?

Pour mettre à jour rbenv et ses plugins, vous pouvez utiliser git. Accédez au répertoire rbenv dans votre terminal (généralement ‘~/.rbenv’) et exécutez ‘git pull’. Ensuite, accédez à chaque répertoire de plugin et faites de même.

Puis-je utiliser RVM ou rbenv avec d’autres langages de programmation?

RVM et rbenv sont spécifiquement conçus pour gérer les versions de Ruby. Si vous avez besoin de gérer les versions d’autres langages de programmation, vous voudrez peut-être vous intéresser à des outils comme pyenv pour Python ou nvm pour Node.js.

Comment puis-je lister toutes les versions Ruby installées avec rbenv?

Pour lister toutes les versions Ruby installées avec rbenv, vous pouvez utiliser la commande ‘rbenv versions’. Cela affichera une liste de toutes les versions Ruby que rbenv peut utiliser.

Comment gérer les dépendances de gem avec RVM?

RVM vous permet de gérer les dépendances de gem via l’utilisation de gemsets. Vous pouvez créer un gemset avec la commande ‘rvm gemset create’, le basculer avec la commande ‘rvm gemset use’, puis installer les gems selon les besoins.

Comment installer une nouvelle version de Ruby avec rbenv?

Pour installer une nouvelle version de Ruby avec rbenv, vous pouvez utiliser la commande ‘rbenv install’ suivie du numéro de version. Par exemple, pour installer Ruby 2.6.3, vous utiliseriez la commande ‘rbenv install 2.6.3’.

Source:
https://www.sitepoint.com/ruby-version-managers-macos/