{"id":3564,"date":"2022-01-05T08:16:52","date_gmt":"2022-01-05T08:16:52","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/"},"modified":"2026-04-28T14:05:35","modified_gmt":"2026-04-28T14:05:35","slug":"modularisation-de-ruby-on-rails-avec-packwerk-episode-i","status":"publish","type":"post","link":"https:\/\/thecodest.co\/fr\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/","title":{"rendered":"Ruby on Rails modularisation avec Packwerk Episode I"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p>Pour parler de <strong>Packwerk<\/strong>Il faut d'abord introduire quelques concepts.<\/p>\n<ul>\n<li><b>Coh\u00e9sion<\/b>: il s'agit de la mesure du degr\u00e9 d'appartenance des \u00e9l\u00e9ments d'un module ou d'une classe.<\/li>\n<li><b>Accouplement<\/b>: il s'agit du niveau de d\u00e9pendance entre les modules ou les classes.<\/li>\n<li><b>Fronti\u00e8res<\/b>Le terme \"barri\u00e8re\" fait r\u00e9f\u00e9rence aux barri\u00e8res entre les <a href=\"https:\/\/thecodest.co\/fr\/dictionary\/what-is-code-refactoring\/\">code<\/a>. Dans ce cas, une limite de code fait r\u00e9f\u00e9rence \u00e0 diff\u00e9rents domaines de pr\u00e9occupation au sein de la m\u00eame base de code.<\/li>\n<li><b>Modularisation<\/b>Le syst\u00e8me de gestion de la qualit\u00e9 est un syst\u00e8me de gestion de la qualit\u00e9 qui permet d'am\u00e9liorer la qualit\u00e9 de l'information et de la communication.<\/li>\n<\/ul>\n<h2>Probl\u00e8mes<\/h2>\n<p>Comme nous le savons, <strong><a href=\"https:\/\/thecodest.co\/fr\/blog\/hire-ror-developer\/\">Rubis<\/a><\/strong> ne fournit pas une bonne solution pour faire respecter les limites du code. Nous pouvons sp\u00e9cifier la visibilit\u00e9 mais toutes les d\u00e9pendances seront charg\u00e9es dans l'espace de noms global. Dans les applications de grande taille ou monolithiques, cette absence de limites produit les probl\u00e8mes suivants.<\/p>\n<ul>\n<li>Faible coh\u00e9sion,<\/li>\n<li>Couplage \u00e9lev\u00e9, <\/li>\n<li>Code spaghetti.<\/li>\n<\/ul>\n<p>Pour tenter de modulariser le monolithe de Shopify et d'imposer des limites, ils ont essay\u00e9 diff\u00e9rentes solutions sans obtenir les r\u00e9sultats escompt\u00e9s :<br \/>\n- D\u00e9finition de constantes priv\u00e9es,<br \/>\n- \u00c9tablir des limites \u00e0 l'aide de pierres pr\u00e9cieuses,<br \/>\n- Utiliser des tests pour \u00e9viter les associations entre composants,<br \/>\n- Utilisation de la gemme de modulation de Ruby,<br \/>\n- Cr\u00e9ation <a href=\"https:\/\/thecodest.co\/fr\/dictionary\/microservices\/\">microservices<\/a>.<\/p>\n<p>Forts des connaissances acquises lors des tentatives pr\u00e9c\u00e9dentes, ils ont d\u00e9cid\u00e9 de cr\u00e9er leur propre outil : <strong>Packwerk<\/strong>.<\/p>\n<h2>Packwerk<\/h2>\n<h3>Qu'est-ce que Packwerk ?<\/h3>\n<p><strong>Packwerk<\/strong> est un outil d'analyse statique utilis\u00e9 pour imposer des limites entre des groupes de donn\u00e9es. <strong>Rubis<\/strong> fichiers appel\u00e9s <strong>paquets<\/strong>.<\/p>\n<h3>Qu'est-ce qu'un paquet ?<\/h3>\n<p>A <strong>paquet<\/strong> est un dossier contenant du code charg\u00e9 automatiquement. Le dossier <a href=\"https:\/\/thecodest.co\/fr\/blog\/how-to-hire-the-best-outsourced-development-team-for-a-scaleup\/\">\u00e9quipe<\/a> encourage \u00e0 utiliser les meilleures pratiques de conception lors de la cr\u00e9ation de paquets.<br \/>\n- Nous devrions emballer ensemble les choses qui ont une grande fonctionnalit\u00e9. <a href=\"https:\/\/en.wikipedia.org\/wiki\/Cohesion_(computer_science)\" rel=\"nofollow\">coh\u00e9sion<\/a>,<\/p>\n<ul>\n<li>Les paquets doivent \u00eatre relativement peu li\u00e9s les uns aux autres.<\/li>\n<\/ul>\n<h3>Types de contr\u00f4les aux fronti\u00e8res<\/h3>\n<p>Nous pouvons faire respecter les limites de confidentialit\u00e9 et de d\u00e9pendance, v\u00e9rifier les violations des limites et les d\u00e9pendances cycliques.<\/p>\n<h2>Packwerk en pratique<\/h2>\n<p>Il n'existe pas de m\u00e9thode unique pour structurer ou restructurer votre application lors de la cr\u00e9ation de paquets. Dans cet article, nous allons suivre l'approche sugg\u00e9r\u00e9e par<br \/>\nStephan Hagemann dans <em>Modularisation progressive pour Ruby on <a href=\"https:\/\/thecodest.co\/fr\/blog\/ways-to-increase-your-rails-performance\/\">Rails<\/a><\/em>.<\/p>\n<h3>Choisir le projet<\/h3>\n<p>Vous pouvez cr\u00e9er un nouveau <a href=\"https:\/\/thecodest.co\/fr\/dictionary\/why-do-projects-fail\/\">projet<\/a> ou choisissez l'un de vos projets. J'ai d\u00e9cid\u00e9 d'utiliser un projet open-source appel\u00e9  <a href=\"https:\/\/github.com\/codetriage\/codetriage\" rel=\"nofollow\">CodeTriage<\/a>. Il est important de mentionner que nous avons besoin d'une application Rails 6 puisque <strong>Packwerk<\/strong> utilise Zeitwerk.<\/p>\n<h3>Initialiser Packwerk<\/h3>\n<p>Tout d'abord, nous devons ajouter la gem \u00e0 notre Gemfile comme suit <code>gem 'packwerk'<\/code> puis ex\u00e9cutez <code>liasse<\/code>dans la console. Nous sommes alors pr\u00eats \u00e0 initialiser la gem en ex\u00e9cutant <code>packwerk init<\/code>.<\/p>\n<p>Ensuite, nous constatons que <strong>Packwerk<\/strong> a g\u00e9n\u00e9r\u00e9 trois fichiers pour <a href=\"https:\/\/thecodest.co\/fr\/blog\/why-us-companies-are-opting-for-polish-developers\/\">nous<\/a>:<\/p>\n<ul>\n<li>\n<p><em>packwerk.yml<\/em><\/p>\n<\/li>\n<li>\n<p><em>package.yml<\/em><\/p>\n<\/li>\n<li>\n<p><em>inflexions.yml<\/em><\/p>\n<\/li>\n<\/ul>\n<p><em>packwerk.yml<\/em> est le fichier de configuration de <strong>Packwerk<\/strong> o\u00f9 nous d\u00e9finirons les fichiers inclus et exclus, \u00e9num\u00e9rerons les chemins de chargement, d\u00e9finirons le fichier d'inflexions, entre autres choses ;<\/p>\n<p><em>package.yml<\/em> est le fichier de configuration d'un paquet. Dans ce fichier, nous ajouterons la configuration des limites de notre paquet. Tout dossier contenant package.yml sera reconnu comme un paquet par <strong>Packwerk<\/strong>. C'est tout, <strong>Packwerk<\/strong> a cr\u00e9\u00e9 notre premi\u00e8re<br \/>\net nous l'appelons <em>racine<\/em> l'emballage.<\/p>\n<p><em>inflexions.yml<\/em> est l'endroit o\u00f9 nous placerons nos inflexions et acronymes personnalis\u00e9s au cas o\u00f9 nous les utiliserions.<\/p>\n<p>Pour en savoir plus sur les fichiers et leur configuration, voir<br \/>\n<a href=\"https:\/\/github.com\/Shopify\/packwerk\" rel=\"nofollow\">Packwerk<\/a>.<\/p>\n<h3>Propri\u00e9t\u00e9s de Packwerk<\/h3>\n<p>Pour que la modularisation fonctionne, nous avons besoin de trois propri\u00e9t\u00e9s fondamentales : <em>un conteneur nomm\u00e9<\/em>, son <em>contenu<\/em>et explicite <em>d\u00e9pendances<\/em> sur d'autres <em>conteneurs<\/em>. D\u00e9finissons donc ces propri\u00e9t\u00e9s dans <strong>Packwerk<\/strong>:<\/p>\n<ul>\n<li>\n<p><b>Nom<\/b>: Le nom d'un paquet est son chemin d'acc\u00e8s relatif \u00e0 partir de la racine du fichier<br \/>\nl'application.<\/p>\n<\/li>\n<li>\n<p><b>Contenu<\/b>: Lorsque nous pla\u00e7ons un package.yml dans un dossier, tous les fichiers de ce dossier sont d\u00e9sormais le contenu du package.<\/p>\n<\/li>\n<li>\n<p><b>D\u00e9pendances<\/b>: Nous pouvons d\u00e9finir des d\u00e9pendances sur d'autres paquets en ajoutant la cl\u00e9 de d\u00e9pendances \u00e0 l'\u00e9l\u00e9ment <em>package.yml<\/em>.<\/p>\n<\/li>\n<\/ul>\n<p>Un autre fichier qui n'est pas inclus par d\u00e9faut mais qui est recommand\u00e9 est README. Il est important de fournir des informations sur l'utilisation du paquet.<\/p>\n<p>Fin de l'\u00e9pisode I <\/p>\n<p><a href=\"https:\/\/thecodest.co\/contact\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/cta_2.jpeg\" alt=\"Conseil en d\u00e9veloppement de produits num\u00e9riques\" \/><\/a><\/p>\n<p><strong>Lire la suite<\/strong><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/graphql-ruby-what-about-performance\">GraphQL Ruby. Qu'en est-il des performances ?<\/a><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-and-other-means-of-transport\">Rails et autres moyens de transport<\/a><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-development-with-tmux-vim-fzf-ripgrep\">D\u00e9veloppement Rails avec TMUX, Vim, Fzf + Ripgrep<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Les \u00eatres humains ont du mal \u00e0 avoir une vue d'ensemble d'un probl\u00e8me sans y consacrer beaucoup de temps et d'efforts. C'est particuli\u00e8rement vrai lorsqu'il s'agit d'applications complexes et de grande envergure. Quels sont les effets secondaires de mes modifications ? Pourquoi cette ligne affecte-t-elle les tests d'une partie \u00e9loign\u00e9e de la base de code ? Il n'existe pas de solution parfaite ou compl\u00e8te, mais Shopify a mis au point un outil qui vous aidera probablement, vous et votre \u00e9quipe.<\/p>","protected":false},"author":2,"featured_media":3565,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-3564","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Ruby on Rails modularization with Packwerk Episode I - The Codest<\/title>\n<meta name=\"description\" content=\"Humans find it difficult to see the big picture of a problem without devoting a lot of time and effort. This happens especially while working with large and complex applications. What are the side effects of my changes? Why is this line here affecting the tests of a remote part of the codebase? A perfect or complete solution does not exist, but Shopify came out with a tool that will probably help you and your team.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/fr\/blog\/modularisation-de-ruby-on-rails-avec-packwerk-episode-i\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruby on Rails modularization with Packwerk Episode I\" \/>\n<meta property=\"og:description\" content=\"Humans find it difficult to see the big picture of a problem without devoting a lot of time and effort. This happens especially while working with large and complex applications. What are the side effects of my changes? Why is this line here affecting the tests of a remote part of the codebase? A perfect or complete solution does not exist, but Shopify came out with a tool that will probably help you and your team.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/fr\/blog\/modularisation-de-ruby-on-rails-avec-packwerk-episode-i\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-05T08:16:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-28T14:05:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"Ruby on Rails modularization with Packwerk Episode I\",\"datePublished\":\"2022-01-05T08:16:52+00:00\",\"dateModified\":\"2026-04-28T14:05:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/\"},\"wordCount\":650,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/\",\"name\":\"Ruby on Rails modularization with Packwerk Episode I - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png\",\"datePublished\":\"2022-01-05T08:16:52+00:00\",\"dateModified\":\"2026-04-28T14:05:35+00:00\",\"description\":\"Humans find it difficult to see the big picture of a problem without devoting a lot of time and effort. This happens especially while working with large and complex applications. What are the side effects of my changes? Why is this line here affecting the tests of a remote part of the codebase? A perfect or complete solution does not exist, but Shopify came out with a tool that will probably help you and your team.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png\",\"width\":960,\"height\":540},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruby on Rails modularization with Packwerk Episode I\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/fr\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ruby on Rails modularisation avec Packwerk Episode I - The Codest","description":"Les \u00eatres humains ont du mal \u00e0 avoir une vue d'ensemble d'un probl\u00e8me sans y consacrer beaucoup de temps et d'efforts. C'est particuli\u00e8rement vrai lorsqu'il s'agit d'applications complexes et de grande envergure. Quels sont les effets secondaires de mes modifications ? Pourquoi cette ligne affecte-t-elle les tests d'une partie \u00e9loign\u00e9e de la base de code ? Il n'existe pas de solution parfaite ou compl\u00e8te, mais Shopify a mis au point un outil qui vous aidera probablement, vous et votre \u00e9quipe.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thecodest.co\/fr\/blog\/modularisation-de-ruby-on-rails-avec-packwerk-episode-i\/","og_locale":"fr_FR","og_type":"article","og_title":"Ruby on Rails modularization with Packwerk Episode I","og_description":"Humans find it difficult to see the big picture of a problem without devoting a lot of time and effort. This happens especially while working with large and complex applications. What are the side effects of my changes? Why is this line here affecting the tests of a remote part of the codebase? A perfect or complete solution does not exist, but Shopify came out with a tool that will probably help you and your team.","og_url":"https:\/\/thecodest.co\/fr\/blog\/modularisation-de-ruby-on-rails-avec-packwerk-episode-i\/","og_site_name":"The Codest","article_published_time":"2022-01-05T08:16:52+00:00","article_modified_time":"2026-04-28T14:05:35+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png","type":"image\/png"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"Ruby on Rails modularization with Packwerk Episode I","datePublished":"2022-01-05T08:16:52+00:00","dateModified":"2026-04-28T14:05:35+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/"},"wordCount":650,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png","articleSection":["Software Development"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/","url":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/","name":"Ruby on Rails modularisation avec Packwerk Episode I - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png","datePublished":"2022-01-05T08:16:52+00:00","dateModified":"2026-04-28T14:05:35+00:00","description":"Les \u00eatres humains ont du mal \u00e0 avoir une vue d'ensemble d'un probl\u00e8me sans y consacrer beaucoup de temps et d'efforts. C'est particuli\u00e8rement vrai lorsqu'il s'agit d'applications complexes et de grande envergure. Quels sont les effets secondaires de mes modifications ? Pourquoi cette ligne affecte-t-elle les tests d'une partie \u00e9loign\u00e9e de la base de code ? Il n'existe pas de solution parfaite ou compl\u00e8te, mais Shopify a mis au point un outil qui vous aidera probablement, vous et votre \u00e9quipe.","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/ruby_on_rails_modularization_with_packwerk_-_episode_1.png","width":960,"height":540},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"Ruby on Rails modularization with Packwerk Episode I"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"The Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/fr\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/fr\/wp-json\/wp\/v2\/posts\/3564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/fr\/wp-json\/wp\/v2\/comments?post=3564"}],"version-history":[{"count":5,"href":"https:\/\/thecodest.co\/fr\/wp-json\/wp\/v2\/posts\/3564\/revisions"}],"predecessor-version":[{"id":7982,"href":"https:\/\/thecodest.co\/fr\/wp-json\/wp\/v2\/posts\/3564\/revisions\/7982"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/fr\/wp-json\/wp\/v2\/media\/3565"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/fr\/wp-json\/wp\/v2\/media?parent=3564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/fr\/wp-json\/wp\/v2\/categories?post=3564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/fr\/wp-json\/wp\/v2\/tags?post=3564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}