Gestionnaire de versions Ruby pour MacOs: Lequel choisir ?

Pour un développeur Ruby et quelque soit le niveau, lorsque l’on développe plusieurs projets qui n’ont pas les mêmes versions, on se pose indéniablement une question : Comment vais-je gérer mes différentes versions ?

Et mieux vaut se poser cette question avant que le problème ne survienne afin de faire le meilleur choix, sans précipitations !

Cet article a donc pour but de vous présenter les principaux gestionnaires Ruby mais aussi de vous mettre en garde sur quelques outils qui peuvent paraitre pratiques mais qui comportent bien des pièges !

Ce que nous allons aborder :

✅ Ruby pré-installé sur Mac : La fausse bonne idée

✅ Homebrew : Un gestionnaire de paquets uniquement. 1 version mais pas 2 !

✅ Rvm, Rbenv, Chruby : Les gestionnaires qui ont faire leurs preuves !

✅ Frum : Le petit nouveau à découvrir absolument !

✅ ASDF, mon favori : Le gestionnaire multi langages indispensable


♦ Ruby pré-installé sur Mac : La fausse bonne idée.

Vous avez votre Mac et vous êtes ravis de constater que Ruby est déjà installé ? Ne vous réjouissez pas trop vite !

Si vous faites dans votre terminal :

$ which ruby
ou 
$ ruby --version

et que la réponse du Terminal est ici :

$ /usr/bin/ruby
ou
$ ruby 2.6.8p205 (2021-07-07 revision 67951) [universal.arm64e-darwin21]

Alors c’est que vous utilisez le système MacOs pré-installé pour Ruby.

C’est très correct de vouloir utiliser ce système Ruby pour exécuter un ensemble de scripts SysAdmin, des scripts utilitaires.

Mais il n’est pas prévu pour que vous puissiez modifier le système Ruby ou y ajouter des Gems. Si vous voulez développer des applications sous Ruby, il est donc totalement déconseillé d’utiliser cette version et en voici la principale raison :

☠ Des problèmes d’installation des Gems et de sécurité

Pour vos projets Ruby, vous allez sûrement installer des bibliothèques hébergées sur RubyGem. Et le problème de Ruby directement installé au sein du Mac, c’est que la commande gem install, cela va être sauvegardé au sein du répertoire Ruby du système qui appartient ic à root. Et écrire au sein de ce répertoire n’est jamais une bonne idée !

Vous aurez donc toujours besoin de sudo pour modifier ces fichiers systèmes en faisant par exemple un sudo gem install xxxx. Vous pourriez donc facilement exécuter un sudo gem install rails par exemple pour contourner cette problématique.

Mais êtes vous sure de vouloir utiliser un droit administrateur pour install un gem ? Je ne crois pas.

Vous pourriez en effet corrompre le système, ou pire encore. D’autant que n’oublions pas qu’un Gem peut potentiellement contenir un code malveillant qui pourrait totalement compromettre votre ordinateur ! (allez sur ma page concernant la Cybersécurité si vous avez des doutes sur la facilité avec laquelle on peut compromettre des applications si vous avez un doute).


♦ Installer et gérer Ruby via Homebrew : Une version oui, mais pas deux

En tant qu’utilisateur de MacOS, on pourrait également se dire aisément qu’utiliser Homebrew est une bonne idée ! La renommée de gestionnaire de paquets standardisés n’est plus à faire.

Et à juste titre, il installera correctement Ruby pour vous permettre de développer vos premières applications.

Toutefois, l’utilisation de Homebrew comporte 2 inconvénients majeurs :

  • Vous ne pourrez utiliser qu’un seule version de Ruby à la fois car Homebrew ne peut pas en gérer plusieurs
  • Votre version de Ruby installée via ce gestionnaire peut être mise à jour sans que vous ne le vouliez vraiment lors de l’installation d’autres paquets HomeBrew (même si il existe un commande pour fixer le problème via le pin ruby)

Quoiqu’il en soit, Homebrew n’est pas ce que nous cherchons pour optimiser nos développements Ruby sous différentes versions.


♦ Rvm , Rbenv, Chruby : Des gestionnaires uniquement pour Ruby mais qui ont fait leurs preuves

Ces 3 gestionnaires de versions Ruby sont très populaires chez les développeurs, chacun d’entre eux ayant leurs avantages et inconvénients, et c’est ce que nous allons détailler pour que vous puissiez vous faire votre propre avis.

Mais notons toutefois qu’ils ne sont pas multi-langages ce qui pour moi reste un frein, notamment lorsque l’on veut développer sous rails ou que l’on ne se limite pas au Ruby.

RVM

RVM est un outil de ligne de commande qui permet d’installer, gérer et de travailler très facilement sous plusieurs environnements Ruby. C’est l’un des plus populaires, étant le pionnier dans le genre.

👍 Son avantage est qu’il remplace le « cd » commande pour définir les variables d’environnement lorsque l’on change de répertoire.

👍 Il est de plus facile de connaître la version et l’emplacement de Ruby et Gem, ce qui est très pratique en cas de soucis.

👎 Le seul inconvénient est qu’il inclut les GemSets, qui sont désormais assez obsolètes puisque Bundler permet désormais de gérer les dépendances.

RBENV

On ne peut pas parler de RVM sans nommer RBENV, qui à mon sens, est tout aussi populaire et très utilisé par les développeurs.

👎 Pour moi, il est tout aussi efficace, à l’exception près qu’il utilise des shims afin de pouvoir intercepter les commandes Ruby. Cela peut complexifier vos résolutions de problèmes puisqu’ils masquent la commande réelle.

En effet, une fois que vous aurez installé RBVENV (avec Homebrew par exemple) vous devriez :

  • Modifier votre ./zshrc pour que les commandes Rbvenv passent en priorité sur les commandes Ruby.
  • Le shims va donc appeler rbvenv exec commande et c’est à ce moment là que la version de Ruby à utiliser sera déterminée.

Une commande comme : which ruby va donc afficher le shim Rbvenv mais pas directement la version réelle de Ruby.

D’autant que les shims ralentissent parfois l’execution de la commande.

Donc si vous n’aimez pas le concept de Shims ou que des microsecondes de retards vous perturbent, ne vous en faites pas, nous allons examiner Chruby puis Frum.

CHRUBY

Chruby est moins connu mais pourtant il mérite qu’on le nomme ici puisque, lui, n’intercepte pas les commandes via Shims.

👍 Il faudra simplement que vous modifiez votre .zshrc et c’est ok ! De plus, votre Path sera modifié par Chruby en fonction de la version Ruby que vous choisissez ! Elle n’est pas belle la vie ?

👎 Par contre, contrairement à RVM il ne remplace pas la commande « cd’.


♦ FRUM : Le petit nouveau qui fait du bien

Début 2021, un petit nouveau fait son arrivé et je m’y suis intéressée car il est écrit en Rust : Frum.

👍 Et rien que le langage, il est nécessaire de vous en parler puisque qui dit Rust, dit exécution rapide en ligne de commande. Ca commence donc très bien.

👍 Son premier avantage est que Frum a une commande d’installation de Ruby directement intégrée. De ce fait, aucune dépendance supplémentaire n’est nécessaire. Vous installez un executable Rust via Homebrew, et votre couteau suisse est prêt.

👍 Frum n’utilise pas de shims, ne remplace pas la cd commande, et vous avez juste à modifier votre .zhrc pour que Frum soit autorisé à s’éxectuter dans votre terminal. Et pour finir, comme tous les autres, il va chercher un ruby-version dans votre répertoire de projet et utilisera la version global de Ruby.

Il est tout beau, tout neuf, et vaut le détour, car pour moi, il parvient à prendre le meilleur de chacun des autres gestionnaires mentionnés plus haut, et c’est un outil tout-en-un hyper rapide.

Toutefois, tout comme RVM, RBvenv ou Chruby, il n’est pas multi langage et ne gérera que les versions de Ruby. Et c’est pourquoi je vais vous présenter mon favori : ASDF.


♦ Asdf : Le gestionnaire multi languages pour les développeurs Ruby mais pas que !

Asdf est un gestionnaire de version que je veux impérativement vous présenter puisqu’il comporte selon moi un avantage majeur : il prend en charge plusieurs languages de programmation !

👍 Et c’est selon moi un atout important puisque si vous décidez de développer des applications via le framework Rails 6 par exemple, il vous faudra installer Node entre autre (même si pour rails 7 cela n’est plus indispensable).

👍 De plus, aimant également programmer en Python, Asdf me permet aussi d’en gérer ses versions. En effet ce gestionnaire s’étends via un système de plugin pour installer tout à un tas d’autres langages :

  • Elixir, Flutter, Go, Node, Java etc.

👎 Par contre, pour les « anti-shims », mauvaise pioche puisqu’il les utilise tout comme Rbvenv.


♦ Conclusion

Pour moi, les 2 meilleurs choix sont :

  • FRUM si vous cherchez un bon gestionnaire de version UNIQUEMENT pour du Ruby. Il est rapide, récent, et prends les avantages de tous les autres présentés.
  • ASDF si vous cherchez un gestionnaire multi langages tout-en-un.

Et si votre choix porte sur ASDF comme moi, allez consulter mon article qui vous permet d’installer Ruby via ASDF :

Vous aimerez aussi...