• Contenu
  • Bas de page
logo ouidoulogo ouidoulogo ouidoulogo ouidou
  • Qui sommes-nous ?
  • Offres
    • 💻 Applications métier
    • 🤝 Collaboration des équipes
    • 🛡️ Sécurisation et optimisation du système d’information
    • 🔗 Transformation numérique
  • Expertises
    • 🖥️ Développement logiciel
    • ♾️ DevSecOps
    • ⚙️ Intégration de logiciels et négoce de licences
      • Atlassian : Jira, Confluence, Bitbucket…
      • Plateforme monday.com
      • GitLab
      • SonarQube
    • 📚​ Logiciel de CRM et de gestion
    • 🎨 UX/UI design
    • 🌐 Accessibilité Numérique
    • 🗂️​ Démarches simplifiées
    • 📝 Formations Atlassian
  • Références
  • Carrières
    • 🧐 Pourquoi rejoindre Ouidou ?
    • ✍🏻 Nous rejoindre
    • 👨‍💻 Rencontrer nos collaborateurs
    • 🚀 Grandir chez Ouidou
  • RSE
  • Ressources
    • 🗞️ Actualités
    • 🔍 Articles techniques
    • 📖 Livres blancs
    • 🎙️ Interviews Clients
Nous contacter
✕
Introduction à Phoenix – Épisode 2
Introduction à Phoenix – Épisode 2
24 juillet 2021
La supervision des processus métiers
La supervision des processus métiers
1 août 2021
Ressources > Articles techniques > Chargement automatique des modules et classes en Ruby

Chargement automatique des modules et classes en Ruby

Article écrit par Nicolas Cavigneaux

Lorsque vous écrivez une bibliothèque, un serveur Rack ou tout autre application en Ruby, il peut être pratique de faire en sorte que vos classes soient chargées automatiquement. Dès qu’elles sont référencées dans le code, on peut vouloir qu’elles soient chargées si elles ne le sont pas déjà. Il n’y a donc plus besoin de maintenir à la main une série de require explicites.

Zeitwerk est un outil qui permet de gérer cette tâche pour nous. C’est un chargeur de code efficace et thread-safe. C’est ce qui est utilisé notamment par Rails ou encore Hanami pour faire en sorte que le code applicatif soit chargé au besoin.

En respectant des conventions de nommage, Zeitwerk peut automatiquement charger les classes soit :

  • à la demande (quand on fait référence à la dite classe dans le code)
  • en amont au démarrage de l’application

Une fois mis en place, plus besoin de require explicite dans le code. Vous pouvez vous concentrer sur l’écriture du métier en sachant que toutes vos classes et modules seront disponibles où que vous soyez dans le code.

De plus Zeitwerk est capable de fournir du rechargement automatique des classes et modules lorsque leur code change. Cette fonctionnalité s’avère très pratique lors des phases de développement. Plus besoin de couper et relancer le serveur / application pour que vos modifications soient effectives.

Convention de nommage

Pour que Zeitwerk puisse faire son travail, il faut nommer ses fichiers d’une manière précise. Le chemin et le nom du fichier doit refléter le nom de la classe / module et ses éventuels namespaces :

lib/my_gem.rb         -> MyGem lib/my_gem/foo.rb     -> MyGem::Foo lib/my_gem/bar_baz.rb -> MyGem::BarBaz lib/my_gem/woo/zoo.rb -> MyGem::Woo::Zoo 

Auto-chargement dans une Gem

Si vous travaillez sur une gem, Zeitwerk met à disposition une configuration automatique permettant de détecter les classe et modules à traquer :

# lib/my_gem.rb (main file)  require "zeitwerk" loader = Zeitwerk::Loader.for_gem loader.setup  module MyGem   # ... end 

Il suffit donc, dans le fichier qui fait office de point d’entrée de votre gem, de requérir Zeitwerk, puis de lui demander de s’occuper de l’auto-chargement des fichiers de votre gem.

La structure des gems étant conventionnée, Zeitwerk sait ce qu’il doit surveiller.

Vous pouvez ensuite développer votre gem classiquement mais sans vous soucier des require.

Auto-chargement hors Gem

Si vous travaillez sur un projet Ruby qui n’est pas une gem, il sera à votre charge de préciser les dossiers à traquer :

loader = Zeitwerk::Loader.new loader.push_dir("#{__dir__}/models") loader.setup 

Rechargement automatique

Pendant les phases de développement, il est pratique d’avoir du rechargement automatique de votre code pour ne pas avoir à couper puis relancer l’application à chaque modification.

Pour que votre code soit rechargé automatiquement lorsqu’il change, il faudra explicitement activer la fonctionnalité. Il suffit d’ajouter loader.enable_reloading avant le loader.setup, soit quelque chose comme :

# lib/my_gem.rb (main file)  require "zeitwerk" loader = Zeitwerk::Loader.for_gem loader.enable_reloading loader.setup  module MyGem   # ... end 

Ressources

Zeitwerk est un outil développé par Xavier Noria, vous pourrez trouver plus d’informations sur la page du projet.

À lire aussi

Fresque numérique miniature image
16 avril 2025

Fresque du Numérique

Lire la suite

intelligence artificielle Ouicommit miniature image
17 mars 2025

Ouicommit – L’intelligence artificielle en entreprise, on y est ! 

Lire la suite

Image miniature Hackathon Women in Tech
13 mars 2025

Hackathon Women in Tech :  un engagement pour une tech plus inclusive 

Lire la suite

image miniature les nouveautés Atlassian
26 février 2025

Les nouveautés Atlassian en 2025

Lire la suite

Articles associés

Fresque numérique miniature image
16 avril 2025

Fresque du Numérique


Lire la suite
intelligence artificielle Ouicommit miniature image
17 mars 2025

Ouicommit – L’intelligence artificielle en entreprise, on y est ! 


Lire la suite
Image miniature Hackathon Women in Tech
13 mars 2025

Hackathon Women in Tech :  un engagement pour une tech plus inclusive 


Lire la suite

À propos

  • Qui sommes-nous ?
  • Références
  • RSE
  • Ressources

Offres

  • Applications métier
  • Collaboration des équipes
  • Sécurisation et optimisation du système d’information
  • Transformation numérique

Expertises

  • Développement logiciel
  • DevSecOps
  • Intégration de logiciels et négoce de licences
  • Logiciel de CRM et de gestion
  • UX/UI design
  • Accessibilité Numérique
  • Démarches simplifiées
  • Formations Atlassian

Carrières

  • Pourquoi rejoindre Ouidou ?
  • Nous rejoindre
  • Rencontrer nos collaborateurs
  • Grandir chez Ouidou

SIEGE SOCIAL
70-74 boulevard Garibaldi, 75015 Paris

Ouidou Nord
165 Avenue de Bretagne, 59000 Lille

Ouidou Rhône-Alpes
4 place Amédée Bonnet, 69002 Lyon

Ouidou Grand-Ouest
2 rue Crucy, 44000 Nantes

Ouidou Grand-Est
7 cour des Cigarières, 67000 Strasbourg

  • Linkedin Ouidou
  • GitHub Ouidou
  • Youtube Ouidou
© 2024 Ouidou | Tous droits réservés | Plan du site | Mentions légales | Déclaration d'accessibilité
    Nous contacter