Partager cette page

Apprendre X en Y minutes

Où X=Ruby ecosystem

Les gens utilisant Ruby adoptent généralement un gestionnaire pour installer différentes versions de Ruby, gérer leurs paquets (ou gems), et gérer les dépendances des gems.

Ruby Managers

Quelques plateformes possèdent Ruby pré-installé ou disponible en tant que paquet. La plupart des rubyistes ne les utilisent pas, ou si c'est le cas, ne les utilisent que pour faire démarrer un autre installateur ou implémentation de Ruby. Les rubyistes tendent plutôt à installer un gestionnaire en Ruby pour installer et changer entre les différentes et nombreuses versions de Ruby et les environnements de leurs projets Ruby.

Les gestionnaires d'environnement Ruby les plus populaires sont :

Versions de Ruby

Ruby a été créé par Yukihiro “Matz” Matsumoto, qui reste quelque peu un BDFL, bien que cela soit récemment en changement. Jusqu'à la standardisation du langage en 2011, l'implémentation de référence de Ruby était appelé MRI (Matz’ Reference Implementation).

Les trois versions majeures de Ruby actuellement utilisées sont :

Les changements entre 1.8.7 et 1.9.x sont bien plus grands qu'entre 1.9.3 et 2.0.0. Par exemple, les versions 1.9 ont introduit le support des encodages et d'une VM bytecode (YARV). Il y a toujours des projets sur 1.8.7, mais ils deviennent minoritaires, étant donné que la majorité de la communauté a migré vers au moins 1.9.2 ou 1.9.3.

Implémentations Ruby

L'écosystème Ruby comprend de nombreuses implémentations de Ruby, chacune avec des points forts uniques et différents degrés de compatibilité. Les différentes implémentations sont écrites dans différents languages. Chaque implémentation a des “hooks” et des fonctionnalités spécifiques, elles exécutent cependant très bien des fichiers Ruby classiques. Par exemple, JRuby est écrit en Java, mais vous n'avez pas besoin de connaître le Java pour l'utiliser.

Très mature/compatible:

Mpyennement mature/compatible:

Les implémentations de Ruby peuvent avoir leurs propres numéros de versions, mais elles ciblent toujours une versions spéficique de MRI pour la compatibilité. Beaucoup d'implémentations ont la capacité d'entrer dans différents modes (par exemple, la version 1.8 ou 1.9) afin de spécifier quelle version de MRI cibler.

Une liste non exhaustive d'implémentations peut être trouvée ici (EN).

Ruby Spec

La plupart des implémentations Ruby s'appuient fortement sur Ruby Spec. Ruby n'a pas de spécification officielle, c'est pourquoi la commaunité a écrit des spécifications exécutables en Ruby pour tester la compatibilité de leur implémentation avec MRI.

RubyGems

RubyGems est un gestionnaire de paquets communautaire pour Ruby. RubyGems est livré avec Ruby, il n'y a donc pas besoin de le télécharger séparément.

Les paquets Ruby sont appelés des “gems”, et peuvent être hébergés par la communauté à RubyGems.org. Chaque gem contient son code source et quelques métadatas, includant des choses comme la version, les dépendances, l(es) auteur(s) et la/les licence(s).

Bundler

Bundler est un outil de résolution de dépendances des gems. Il utilise le Gemfile d'un projet pour en trouver les dépendances, et récupère ensuite les dépendances de ces dépendances récursivement. Il déroule cet algorithme jusqu'à ce que toutes les dépendances soient résolues et téléchargées, ou s'arrête si un conflit est trouvé.

Bundler lèvera une erreur s'il trouve des conflits de dépendances. Par exemple, si la gem A recquiert la version 3 ou plus de gem Z, mais que gem B recquiert seulement la version 2 de la même gem Z, Bundler vous notifiera ce conflit. Cela devient extrêmement utile, étant donné que beaucoup de gems font référence à d'autres gems (qui se réfèrent à d'autres gems et ainsi de suite), ce qui peut former un large graphe de dépendance à résoudre.

Les tests

Tester fait partie intégrante de la culture Ruby. Ruby fournit son propre framework de tests unitaires appelé minitest (ou TestUnit pour Ruby version 1.8.x). Il existe beaucoup de librairies de tests avec des buts différents.

Soyez gentil

La communauté Ruby est fière d'être une communauté ouverte, riche et accueillante. Matz lui-même est extrêmement sociable, et la générosité des rubyistes est généralement remarquable.


Vous avez une suggestion ? Peut-être une correction ? Ouvrez un ticket sur GitHub, ou faites vous-même une pull request !

Version originale par Jon Smock, mis à jour par 3 contributeur(s).