Créer et publier une gem (Ruby)

Ruby présente un écosystème riche et varié, c'est pourquoi lors de votre prochain développement vous devriez vous poser la question d'un développement en Ruby. Dans le présent article nous allons découvrir comment concevoir et partager un paquet ruby. Celui-ci pourra embarquer une bibliothèque logicielle ou un programme complet.

Présentation de RubyGems

RubyGems est un « package manager », pour Ruby, fournissant un format standard de distribution de programmes et bibliothèques Ruby (dans un format « self-contained » appelé « gem »). C'est un outil conçu pour faciliter l'installation des gems, utilisé grâce à la commande gem. RubyGems désigne aussi le serveur hébergeant les paquets gem distribués publiquement (le plus souvent sous licence libre ou open-source).

Aujourd'hui, depuis la version 1.9 de Ruby, RubyGems fait partie de la bibliothèque standard de Ruby.

Anatomie d'une gem

Pour initier la conception d'une gem, le plus simple, dans une premier temps et d'utiliser la commande bundle (issue de la gem bundler), comme suit :

bundle gem awesomeness

Ce qui produira le squelette complet de notre gem.
Nous devrions avoir une structure de fichiers similaire à ceci :

awesomeness/
├── awesomeness.gemspec
├── bin
│   ├── console
│   └── setup
├── Gemfile
├── lib
│   ├── awesomeness
│   │   └── version.rb
│   └── awesomeness.rb
├── LICENSE.txt
├── Rakefile
└── README.md

3 directories, 9 files

Nous pouvons constater que la gem contient un fichier gemspec portant le même nom que la gem. Ainsi qu'un fichier lib/awesomeness.rb et un dossier lib/awesomeness. Le contenu du fichier principal de notre bibliothèque se présente avec le contenu suivant :

require "awesomeness/version"

module Awesomeness
  # Your code goes here...
end

Gemspec

Le fichier gemspec généré par bundler est des plus verbeux, celui-ci se veux didactique ; ce qui pourra vous aider lors d'un premier développement. Je vais vous présenter ici, une version simplifiée d'un fichier gemspec minimal, mais, cependant, complet et viable :

Gem::Specification.new do |s|
  s.name = 'awesomeness'
  s.version = '0.1.0'
  s.licenses = ['MIT']
  s.summary = "This is an example!"
  s.description = "Much longer explanation"
  s.authors = ["Ruby Coder"]
  s.email = 'rubycoder@example.com'
  s.require_paths = ['lib']
  s.files = ['lib/**/**.rb'].map { |pt| Dir.glob(pt) }.flatten
  s.homepage = 'https://example.org/gems/awesomeness'

  s.add_runtime_dependency "activesupport", ["~> 5.0"]
  s.add_development_dependency "rake", ["~> 11.3"]
end

L'objet du fichier gemspec est d'identifier votre paquet auprès du gestionnaire de paquets ; mais, avant çà, il sera impliqué dans la génération de votre paquet id est le passage d'une version source à une version empaquetée.

La majeure partie des variables affectées et des appels de méthodes, dans l'exemple ci-avant, sont requis (voire obligatoires), à l'exception de homepage ainsi que les méthodes add_runtime_dependency et add_development_dependency. Ces deux méthodes permettent de définir les dépendances de votre paquet sous forme d'autres paquets gem, disponibles sur RubyGems.org. Les dépendances sont de deux types : runtime et development. Il est fortement recommandé de choisir une version pour chaque dépendance en suivant la spécification Semantic Versioning 2.0.0. Spécification que vous suivrez également pour versionner votre paquet.

Packager et installer

À ce stade votre paquet gem peut être packagé et installé sur votre systême :

gem build awesomeness.gemspec
sudo gem install awesomeness-0.1.0.gem

Ainsi, vous pouvez utiliser votre paquet sur votre propre systême.

Distribuer

À ce stade, il vous faudra créer un compte sur RubyGems. Puis stocker les identifiants nécessaire (une simple clé d'API) pour utiliser certaines actions de la commande gem :

curl -u username https://rubygems.org/api/v1/api_key.yaml > ~/.gem/credentials
gem push awesomeness-0.1.0.gem

Et voilà, aussi simple que celà. En une simple commande (outre la création de compte, et la récupération de la clef d'API), votre gem est désormais publiée et disponible depuis les serveurs de RubyGems. Ainsi, elle peut maintenant être installée tout aussi facilement que :

sudo gem install awesomeness

Conclusion

En conclusion, cette article fait la démonstration de la simplicité avec laquelle il est possible de développer un paquet logiciel pour le langage Ruby. Ce qui, à mon sens, fait une des principales forces de Ruby. En effet, à ce jour plus de 130 000 sont enregistrées sur les serveurs de RubyGems.

Bientôt la vôtre ?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *