mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-24 01:51:38 +00:00
156 lines
7.5 KiB
Markdown
156 lines
7.5 KiB
Markdown
---
|
|
category: tool
|
|
tool: Ruby ecosystem
|
|
contributors:
|
|
- ["Jon Smock", "http://github.com/jonsmock"]
|
|
- ["Rafal Chmiel", "http://github.com/rafalchmiel"]
|
|
translators:
|
|
- ["Xuan-thi Nguyen", "http://github.com/mellenguyen"]
|
|
- ["Sylvain Abélard", "http://github.com/abelards"]
|
|
lang: fr-fr
|
|
|
|
---
|
|
|
|
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 :
|
|
|
|
* [RVM](https://rvm.io/) - Installe et navigue entre les rubies. RVM possède
|
|
églement le concept des gemsets pour isoler les environnements de projets
|
|
complètement.
|
|
* [ruby-build](https://github.com/sstephenson/ruby-build) - Installe seulement
|
|
les rubies. Utilisez-le pour un contrôle plus fin des installations des
|
|
rubies.
|
|
* [rbenv](https://github.com/sstephenson/rbenv) - Navigue seulement entre les
|
|
rubies. Utilisé avec ruby-build. Utilisez-le pour un contrôle plus fin des
|
|
chargements des rubies.
|
|
* [chruby](https://github.com/postmodern/chruby) - Navigue seulement entre les
|
|
rubies. Similaire à rbenv. Neutre sur comment les rubies sont installés.
|
|
|
|
## Versions de Ruby
|
|
|
|
Ruby a été créé par Yukihiro "Matz" Matsumoto, qui reste quelque peu un
|
|
[BDFL](https://fr.wikipedia.org/wiki/Benevolent_Dictator_for_Life), 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 :
|
|
|
|
* 2.0.0 - Sortie en février 2013. La plupart des bibliothèques et frameworks
|
|
gèrent la versions 2.0.0.
|
|
* 1.9.3 - Sortie en octobre 2011. Il s'agit de la version que la majorité des
|
|
rubyists utilisent actuellement. [Fin de vie](https://www.ruby-lang.org/en/news/2015/02/23/support-for-ruby-1-9-3-has-ended/)
|
|
* 1.8.7 - Sortie en juin 2006. [Fin de vie](http://www.ruby-lang.org/en/news/2013/06/30/we-retire-1-8-7/).
|
|
|
|
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](https://fr.wikipedia.org/wiki/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:
|
|
|
|
* [MRI](https://github.com/ruby/ruby) - Ecrite en C, c'est l'implémentation de
|
|
référence de Ruby. Elle est par définition 100% compatible (avec elle-même).
|
|
Tous les autres rubies maintiennent la compatibilité avec MRI
|
|
(voir [Ruby Spec](#ruby-spec) à la suite).
|
|
* [JRuby](http://jruby.org/) - Écrite en Java et Ruby, cette robuste
|
|
implémentation est assez rapide.
|
|
La force de JRuby réside surtout sur l'interopérabilité JVM/Java, faisant
|
|
levier sur des outils JVM, des projets et des langages existants.
|
|
* [Rubinius](http://rubini.us/) - Ecrite principalement en Ruby avec une VM
|
|
bytecode en C++. Egalement mature et rapide. Etant donné qu'elle est
|
|
implémentée en Ruby, elle couvre beaucoup de fonctionnalités de la
|
|
VM dans Ruby.
|
|
|
|
Mpyennement mature/compatible:
|
|
|
|
* [Maglev](http://maglev.github.io/) - Basée sur Gemstone, une VM Smalltalk.
|
|
Smalltalk possède quelques outils impressionnants, et ce projet tente
|
|
de les apporter dans le développement Ruby.
|
|
* [RubyMotion](http://www.rubymotion.com/) - Ruby pour développement iOS et Android.
|
|
* [Opal](http://opalrb.org/) - Compile le Ruby en Javascript
|
|
|
|
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)](https://github.com/cogitator/ruby-implementations/wiki/List-of-Ruby-implementations).
|
|
|
|
## Ruby Spec
|
|
|
|
La plupart des implémentations Ruby s'appuient fortement sur [Ruby Spec](https://github.com/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](http://rubygems.org/) 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](http://bundler.io/) 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.
|
|
|
|
* [TestUnit](http://ruby-doc.org/stdlib-1.8.7/libdoc/test/unit/rdoc/Test/Unit.html) - Framework de tests intégré de Ruby version 1.8 style "Unit"
|
|
* [minitest](http://ruby-doc.org/stdlib-2.0.0/libdoc/minitest/rdoc/MiniTest.html) - Framework de tests intégré de Ruby version 1.9/2.0
|
|
* [RSpec](http://rspec.info/) - Un framework de tests qui se focalise sur l'expressivité
|
|
* [Cucumber](http://cukes.info/) - Un framework de tests BDD ([behaviour-driven development](https://fr.wikipedia.org/wiki/Behavior_driven_development)) qui parse les tests formatés de Gherkin.
|
|
|
|
## 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.
|