librairie5

Quelles librairies (Gem) utiliser avec Ruby (on Rails)

Posted on juin 17, 2013

Développer pour le web ou le mobile n’est aujourd’hui plus réinventer à chaque fois la roue. Il existe de très nombreuses librairies dans tous les langages de programmation qui vous feront gagner énormément de temps et qu’il est bon de connaître.

Je vais vous illustrer cela avec une sélection de librairies que j’utilise dans mes projets en Ruby (on Rails) parmi les 60 000 librairies nommées « Gems » dont la liste complète est disponible sur le site rubygems.org.

twitter-bootstrap-rails

Je suis personnellement un grand fan de Twitter Bootstrap, qui permet d’avoir en quelques secondes tous les éléments nécessaires à un bon design, à savoir : les champs de formulaires, des boutons, des menus, une modale window (la fenêtre qui s’ouvrent sur la page pour afficher un message), un carousel (pour faire défiler des photos), etc.

Twitter Bootstrap repose sur la techologie Less qui permet de simplifier l’écriture du code CSS, d’où l’emploi de less-rails. D’autres développeurs préféreront la technologie Sass, similaire. Une alternative pour ceux qui préfèrent Sass à Less est Fundation de Zurb.

simple_form

Permet de créer en quelques lignes de formulaires complexes. Evite de réinventer la roue à ce sujet. Un autre gem populaire pour faire cela est formtastic.

client_side_validations

Permet de valider à la volée des formulaires. Intéressant pour éviter à vos internautes de rechager 3 fois la page de formulaire en cas d’erreur.

haml et haml-rails

Permettent d’utiliser le metalangage HAML pour écrire ses vues en HTML. Le HAML est beaucoup plus concis que ce dernier, mais nécessite quelques jours de familiarisation… Vous pouvez aussi utiliser slim-rails si vous préférez Slim à Haml.

devise

C’est un module indispensable pour tout site où il faut gérer des comptes membres (connexion, déconnexion, inscription, désinscription, récupération du mot de passe, vérification de l’email, etc.)

kaminari

Un gem qui permet de gérer la pagination (c’est-à-dire l’affiche de résultats sur plusieurs pages). Une alternative est will_paginate.

i18n-js

Permet d’insérer des traductions dans son code javascript. Ce gem ne semble par contre pas très à jour… Il y a des alternatives comme i18next ou jquery.i18n à regarder ici mais je ne les ai jamais installées sur rails.

jquery-rails

L’incontournable JQuery pour Rails, qui permet d’avoir accès à des milliers de modules en javascript (calendrier, carousel, autocomplétion etc.)

state_machine

Permet de gérer des models complexes où l’on a besoin de plusieurs états différents. Par exemple, dans le cas d’un paiement, on veut pouvoir gérer les erreurs, ne valider le paiement que si la carte est valide, éviter les doubles paiements, etc. Voici un article sur l’intérêt des « State Machines »

inherited_resources

Si vos controllers sont souvent les mêmes cela vous permet de simplifier votre code. Une alternative intéressante est decent_exposure.

carrierwave ou paperclip ou dragonfly.

Très utile pour uploader des fichiers sur le site. Possibilité de les stocker sur un serveur Amazon S3 en quelques lignes de code avec le gem aws-s3.

Si Paperclip reste le plus populaire en termes de followers sur github et de téléchargements, Carrierwave est une excellente alternative qui a ses avantages. Suivez le débat ici.

rmagick ou mini_magick

Utile si vous avez des photos à redimensionner ou retoucher automatiquement sur votre site. Souvent, les fonctionnalités de base suffisent (cropper des images par exemple), privilégiez alors mini_magick.

jquery-fileupload-rails

Ajouter plusieurs photos en une fois n’est pas trivial, ce qui explique sans doute pourquoi même des sites connus comme pap ou  leboncoin ne le propose pas. JQuery File Upload simplifie l’ajout de plusieurs photos à la fois. Il dépend, notamment de JQuery. S’il est facile à installer, il peut s’avérer un peu compliqué à paramétrer. S’allie bien avec Paperclip ou Carrierwave.

coffee-script

Comme HAML pour le Html, Sass et Less pour le CSS, Coffee-script permet d’écrire du code javascript plus concis.

geocoder

Très utile si vous faîtes de la géolocalisation. Permet notamment de faire des requêtes géolocalisées grâce à la requête « near ».

Pour aller plus loin et optimiser vos requêtes locales, cela se complique et vous devrez installer PostGIS ou Elastic Search, par exemple.

friendly_id

Transforme les chemins de vos pages de http://monsite.com/user/3 à http://monsite.com/user/francois.misslin. Ce module est indispensable à une bonne stratégie de référencement.

tire

Utile si vous installez un moteur de recherche full-text (qui peut trouver un mot dans une description, par exemple) avec Elastic-Search.

Ces technologies d’optimisation de la recherche ne sont pas évidentes à mettre en place, car Elastic Search par exemple repose sur une base de donnée à part qu’il faudra installer. Bien souvent, les fonctionnalités de recherche de votre base de donnée par défaut suffisent (Postgresql est très effice par exemple). Il existe de nombreuses alternatives plus ou moins compliquées à mettre en place. Vous pouvez utiliser Sphinx, Solr ou même Hadoop (sans doute le plus puissant mais beaucoup plus lourd à paramétrer) comme alternatives.

gmaps4rails

Simplifie l’utilisations de cartes comme Google Map sur votre site. Marche aussi avec Openlayer, Mapquest et Bing.

koala

Simplifie le lien entre Facebook et votre site.

nokogiri et watir-webdriver

Utile pour tester votre site en live en pilotant automatiquement votre navigateur (« integration tests » en anglais).

rspec

Simplifie vos tests

omniauth et omniauth-facebook

Permettent de gérer la connexion via des sites tiers (Facebook Connect, Google ID, Twitter, Github etc.). Notons que le Facebook Connect est diablement efficace et je vous invite vivement à l’utiliser sur votre site.

cancan

Permet d’améliorer la gestion des droits entre les différents utilisateurs. Telle action est par exempel réservée à l’admin du site.

sidekiq ou delayed_job

Permet de gérer les jobs (activités en différé, par exemple l’envoi d’un email de confirmation suite à une inscription). Cette fonctionnalité est maintenant nativement intégrée à Rails 4. Il semblerait que Sidekiq a plus le vent en poupe que delayed_job. Il existe de nombreuses autres alternatives à regarder plus en détail selon les besoins.

Je préfère personnellement delayed_job, certes moins efficace, car je peux gérer les queues avec la même base de donnée que mon application (postgresql avec le gem delayed_job_active_record ou delayed_job_mongoid selon les cas), ce qui m’évite de maintenir une base de donnée redis comme pour sidekiq ou les autres solutions.

metamagic

Simplifie l’édition de vos balises meta et title (utile au référencement sur Google) dans ruby on rails.

active_merchant

Plugin extrait du site de e-commerce Shopify et très utile pour gérer les paiements sur son site.

active_admin

Génère une interface administrateur de votre site en quelques minutes. Ce gem a le mérite de la simplicité mais il est vrai que c’est un peu lourd à maintenir. Si vous avez le temps, faîtes donc votre admin sur mesure.

 

En conclusion, il existe de nombreux gems pour vos projets (près de 60 000 sont listés sur RubyGems), pour presque tous les besoins. L’excellent site Railscasts est une bonne introduction pour vous familiariser avec les plus connus. Ma liste est loin d’être exhaustive, n’hésitez donc pas à partager en commentaire les grands absents.

Pour choisir parmi plusieurs alternatives, je consulte en règle générale le nombre de téléchargements sur RubyGems, je vais ensuite voir le code source pour regarder la taille de la communauté de développeurs, la fréquence des mises à jour et surtout s’il y a de nombreux problèmes résolus ou en attente. Je teste ensuite ce dernier pour voir si cela me convient. Lorsque j’ai un doute, je consulte l’excellent site StackOverflow pour voir ce qu’en dit la communauté des developpeurs.

Les autres langages de programmation ont aussi leurs librairies. L’équivalent des gem pour node.js (javascript) sont les packages « npm » pour Node Package Modules listés sur le site npmjs. Il y en a déjà plus de 32000 !

En php, de nombreux modules ont été développés pour les principaux CMS comme les blogs WordPress (25 500 plugin pour WordPress) ou les sites de e-commerce Prestashop (plus de 2500 modules) ainsi que pour les principaux frameworks (Zend, Symfony, Cakephp, etc.)

Python recense près de 32000 « packages » sur le site suivant : PyPl.

Java a bien entendu aussi une très importante liste de « packages », les gems étant plus ou moins équivalents au Jars.

En .NET (langage développés par Microsft) il y a près de 12000 packages sur le site NuGet.

Et ainsi de suite pour les autres langages de programmation… Ces packages sont pour beaucoup OpenSource, vous pouvez les utiliser pour votre site, même commercial, selon certaines conditions suivant licence (la licence est souvent de type MIT, très permissive, pour les gems ruby). Fini donc le fait de réinventer la roue à chaque projet !

What Others Are Saying

  1. jakikiller juin 18, 2013 at 12:49

    j’aurai remplacé haml-rails par slim-rails

    parperclip par carrierwave ou dragonfly

    sinon ça aurait été ma liste aussi :)

  2. Nicolas Blanco juin 18, 2013 at 12:53

    Liste sympa, je valide à peu près tout :D

    Pour faire le grognon trolleur ;) :

    * inherited_resources : non non et non. A remplacer par decent_exposure qui est juste ultime.

    * paperclip : non. Sauf si vous aimez bourrer vos modèles de Hash d’options de 3km de long. A remplacer par carrierwave.

    * delayed_job : elle existe encore cette gem :D ? A remplacer par sidekiq.

    * rmagick : non dans la plupart des cas basiques. Si c’est juste pour cropper des images, mini_magick le fait très bien juste en lançant un process externe et sans librairie C à compiler.

    * active_admin : si vous aimez vous taper la tête contre les murs pour maintenir des interfaces d’admin semi-générées à la volée avec des engines et des overrides de partout c’est cool. Sinon, préférez faire votre admin vous même avec twitter-bootstrap et decent_exposure ça marche bien aussi.

    * cancan : je préfère largement pundit qui utilise des classes Ruby pures.

  3. admin juin 19, 2013 at 12:49

    Merci pour vos remarques que je partage. L’article a été mis à jour.

  4. Julien Grillot juin 20, 2013 at 11:32

    Belle liste ! Je vais essayer d’en trouver quelques autres…

    Capistrano pour le déploiement
    Dalli pour Memcached
    Faker pour remplir une base de données de dev à coup de faux nom/lorem/mail/adresses…
    Gravtastic pour Gravatar
    Paper_trail pour archiver les modifications d’un modèle
    Private_pub pour du pub/sub avec Faye
    Redcarpet pour Markdown
    Capybara pour augmenter Rspec

  5. Oro jackson octobre 6, 2013 at 10:31

    salut a tous je suis débutant en programmation (je précise) je travail actuellement sur une application web et j’aimerais utiliser twitter-bootstrap pour le design seulement je n’arrive pas à l’activé totalement,quelque le chemin d’accès que j’utilise je n’arrive pas à activé ses feuilles de style. que faire????bien vouloir m’aider,cordialement et vive la programmation.

    • admin octobre 10, 2013 at 11:08

      Bonjour,

      on active Twitter Bootstrap comme n’importe quelle feuille de style CSS et code javascript. Le moyen le plus simple est d’ajouter les liens suivants dans votre code html entre les balises head :

      Les codes sont dispo dans l’onglet Bootstrap CDN du lien suivant : http://getbootstrap.com/getting-started/

      L’avantage de passer par le CDN c’est qu’il est fort probable que votre internaute n’ait pas à retélécharger ces fichiers pour peu qu’il soit allé sur un autre site utilisant aussi twitter bootstrap depuis cette source.

      Un autre moyen d’utiliser bootstrap est de télécharger les fichiers sources et de les lier directement à vos autres fichiers CSS et JS. L’avantage de cette méthode est que vous pourrez ainsi choisir uniquement les modules qui vous sont utiles.

      En espérant avoir répondu à votre question,

      Cordialement,

      François

Laisser un commentaire