{"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":"ruby-on-rails-modularisering-med-packwerk-avsnitt-i","status":"publish","type":"post","link":"https:\/\/thecodest.co\/sv\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/","title":{"rendered":"Ruby on Rails Modularisering med Packwerk Avsnitt I"},"content":{"rendered":"<h2>Inledning<\/h2>\n<p>F\u00f6r att kunna prata om <strong>Packwerk<\/strong>m\u00e5ste vi f\u00f6rst introducera n\u00e5gra begrepp.<\/p>\n<ul>\n<li><b>Sammanh\u00e5llning<\/b>: avser m\u00e5ttet p\u00e5 hur mycket element i en modul eller klass h\u00f6r ihop.<\/li>\n<li><b>Koppling<\/b>: avser graden av beroende mellan moduler eller klasser.<\/li>\n<li><b>Gr\u00e4nser<\/b>: avser barri\u00e4rer mellan <a href=\"https:\/\/thecodest.co\/sv\/dictionary\/what-is-code-refactoring\/\">kod<\/a>. I det h\u00e4r fallet avser en kodgr\u00e4ns olika problemomr\u00e5den inom samma kodbas.<\/li>\n<li><b>Modularisering<\/b>: Processen att dela upp ett programvarusystem i flera separata moduler d\u00e4r varje modul fungerar sj\u00e4lvst\u00e4ndigt.<\/li>\n<\/ul>\n<h2>Problem<\/h2>\n<p>Som vi vet, <strong><a href=\"https:\/\/thecodest.co\/sv\/blog\/hire-ror-developer\/\">Ruby<\/a><\/strong> \u00e4r inte en bra l\u00f6sning f\u00f6r att uppr\u00e4tth\u00e5lla kodgr\u00e4nser. Vi kan specificera synligheten men alla beroenden kommer att laddas in i det globala namnrymden. I stora eller monolitiska applikationer ger denna brist p\u00e5 gr\u00e4nser f\u00f6ljande problem.<\/p>\n<ul>\n<li>L\u00e5g sammanh\u00e5llning,<\/li>\n<li>H\u00f6g koppling, <\/li>\n<li>Spaghettikod.<\/li>\n<\/ul>\n<p>I ett f\u00f6rs\u00f6k att modularisera Shopifys monolit och uppr\u00e4tth\u00e5lla gr\u00e4nser provade de olika l\u00f6sningar utan att uppn\u00e5 de f\u00f6rv\u00e4ntade resultaten:<br \/>\n- Inst\u00e4llning av privata konstanter,<br \/>\n- Fastst\u00e4lla gr\u00e4nser genom p\u00e4rlor,<br \/>\n- Anv\u00e4nda tester f\u00f6r att f\u00f6rhindra associationer mellan olika komponenter,<br \/>\n- Anv\u00e4nda Ruby's Modulation gem,<br \/>\n- Skapande <a href=\"https:\/\/thecodest.co\/sv\/dictionary\/microservices\/\">mikrotj\u00e4nster<\/a>.<\/p>\n<p>Med all kunskap fr\u00e5n tidigare f\u00f6rs\u00f6k best\u00e4mde de sig f\u00f6r att skapa ett eget verktyg: <strong>Packwerk<\/strong>.<\/p>\n<h2>Packwerk<\/h2>\n<h3>Vad \u00e4r Packwerk?<\/h3>\n<p><strong>Packwerk<\/strong> \u00e4r ett statiskt analysverktyg som anv\u00e4nds f\u00f6r att uppr\u00e4tth\u00e5lla gr\u00e4nser mellan grupper av <strong>Ruby<\/strong> filer som kallas <strong>paket<\/strong>.<\/p>\n<h3>Vad \u00e4r ett paket?<\/h3>\n<p>A <strong>paket<\/strong> \u00e4r en mapp som inneh\u00e5ller autoloadad kod. Shopifys <a href=\"https:\/\/thecodest.co\/sv\/blog\/how-to-hire-the-best-outsourced-development-team-for-a-scaleup\/\">Team<\/a> uppmuntrar till att anv\u00e4nda de b\u00e4sta designmetoderna n\u00e4r du skapar paket.<br \/>\n- Vi b\u00f6r packa ihop saker som har h\u00f6g funktionell <a href=\"https:\/\/en.wikipedia.org\/wiki\/Cohesion_(computer_science)\" rel=\"nofollow\">sammanh\u00e5llning<\/a>,<\/p>\n<ul>\n<li>Paketen b\u00f6r vara relativt l\u00f6st kopplade till varandra.<\/li>\n<\/ul>\n<h3>Olika typer av gr\u00e4nskontroller<\/h3>\n<p>Vi kan uppr\u00e4tth\u00e5lla sekretess- och beroendegr\u00e4nser, kontrollera \u00f6vertr\u00e4delser av gr\u00e4nserna och cykliska beroenden.<\/p>\n<h2>Packwerk i praktiken<\/h2>\n<p>Det finns inte ett enda specifikt s\u00e4tt att strukturera eller omstrukturera din applikation n\u00e4r du skapar paket. I den h\u00e4r artikeln kommer vi att f\u00f6lja det tillv\u00e4gag\u00e5ngss\u00e4tt som f\u00f6resl\u00e5s av<br \/>\nStephan Hagemann i <em>Gradvis modularisering f\u00f6r Ruby on <a href=\"https:\/\/thecodest.co\/sv\/blog\/ways-to-increase-your-rails-performance\/\">R\u00e4ls<\/a><\/em>.<\/p>\n<h3>V\u00e4lj projekt<\/h3>\n<p>Du kan skapa en ny <a href=\"https:\/\/thecodest.co\/sv\/dictionary\/why-do-projects-fail\/\">projekt<\/a> eller v\u00e4lj ett av dina projekt. Jag best\u00e4mde mig f\u00f6r att anv\u00e4nda ett open source-projekt som heter  <a href=\"https:\/\/github.com\/codetriage\/codetriage\" rel=\"nofollow\">KodTriage<\/a>. Det \u00e4r viktigt att n\u00e4mna att vi beh\u00f6ver en Rails 6-applikation eftersom <strong>Packwerk<\/strong> anv\u00e4nder Zeitwerk.<\/p>\n<h3>Initiera Packwerk<\/h3>\n<p>F\u00f6rst m\u00e5ste vi l\u00e4gga till gemen i v\u00e5r Gemfile p\u00e5 f\u00f6ljande s\u00e4tt <code>p\u00e4rla \"packwerk<\/code> och k\u00f6r sedan <code>bunt<\/code>i konsolen. Sedan \u00e4r vi redo att initiera p\u00e4rlan och k\u00f6ra <code>packwerk init<\/code>.<\/p>\n<p>Efter det noterar vi att <strong>Packwerk<\/strong> genererade tre filer f\u00f6r <a href=\"https:\/\/thecodest.co\/sv\/blog\/why-us-companies-are-opting-for-polish-developers\/\">oss<\/a>:<\/p>\n<ul>\n<li>\n<p><em>packwerk.yml<\/em><\/p>\n<\/li>\n<li>\n<p><em>paket.yml<\/em><\/p>\n<\/li>\n<li>\n<p><em>b\u00f6jningar.yml<\/em><\/p>\n<\/li>\n<\/ul>\n<p><em>packwerk.yml<\/em> \u00e4r konfigurationsfilen f\u00f6r <strong>Packwerk<\/strong> d\u00e4r vi bland annat definierar inkluderade och exkluderade filer, listar laddningss\u00f6kv\u00e4gar och definierar b\u00f6jningsfilen;<\/p>\n<p><em>paket.yml<\/em> \u00e4r konfigurationsfilen f\u00f6r ett paket. I den h\u00e4r filen l\u00e4gger vi till konfigurationen f\u00f6r gr\u00e4nserna f\u00f6r v\u00e5rt paket. Alla mappar med package.yml kommer att identifieras som ett paket av <strong>Packwerk<\/strong>. S\u00e5 d\u00e4r, ja, <strong>Packwerk<\/strong> skapade v\u00e5r f\u00f6rsta<br \/>\npaketet och vi kallar det f\u00f6r <em>rot<\/em> paket.<\/p>\n<p><em>b\u00f6jningar.yml<\/em> \u00e4r d\u00e4r vi placerar v\u00e5ra anpassade b\u00f6jningar och akronymer om vi anv\u00e4nder dem.<\/p>\n<p>Du kan l\u00e4sa mer om filerna och deras konfiguration i<br \/>\n<a href=\"https:\/\/github.com\/Shopify\/packwerk\" rel=\"nofollow\">Packwerk<\/a>.<\/p>\n<h3>Packwerk fastigheter<\/h3>\n<p>F\u00f6r att modularisering ska fungera beh\u00f6ver vi tre grundl\u00e4ggande egenskaper: <em>en namngiven beh\u00e5llare<\/em>, dess <em>inneh\u00e5ll<\/em>, och explicit <em>Beroenden<\/em> p\u00e5 andra <em>beh\u00e5llare<\/em>. S\u00e5 l\u00e5t oss definiera dessa egenskaper i <strong>Packwerk<\/strong>:<\/p>\n<ul>\n<li>\n<p><b>Namn<\/b>: Namnet p\u00e5 ett paket \u00e4r dess relativa s\u00f6kv\u00e4g fr\u00e5n roten till<br \/>\nans\u00f6kan.<\/p>\n<\/li>\n<li>\n<p><b>Inneh\u00e5ll<\/b>: N\u00e4r vi placerar en package.yml i en mapp, blir alla filer i mappen nu inneh\u00e5llet i paketet.<\/p>\n<\/li>\n<li>\n<p><b>Beroenden<\/b>: Vi kan definiera beroenden av andra paket genom att l\u00e4gga till beroende-nyckeln i <em>paket.yml<\/em>.<\/p>\n<\/li>\n<\/ul>\n<p>En annan fil som inte ing\u00e5r som standard men som rekommenderas \u00e4r README. Den \u00e4r viktig f\u00f6r att ge information om hur paketet anv\u00e4nds.<\/p>\n<p>Slutet av avsnitt I <\/p>\n<p><a href=\"https:\/\/thecodest.co\/contact\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/cta_2.jpeg\" alt=\"Konsultation inom digital produktutveckling\" \/><\/a><\/p>\n<p><strong>L\u00e4s mer om<\/strong><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/graphql-ruby-what-about-performance\">GraphQL Ruby. Hur \u00e4r det med prestanda?<\/a><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-and-other-means-of-transport\">R\u00e4ls och andra transportmedel<\/a><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-development-with-tmux-vim-fzf-ripgrep\">Rails-utveckling med TMUX, Vim, Fzf + Ripgrep<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>M\u00e4nniskor har sv\u00e5rt att se helheten i ett problem utan att \u00e4gna mycket tid och kraft \u00e5t det. Detta g\u00e4ller s\u00e4rskilt n\u00e4r man arbetar med stora och komplexa applikationer. Vilka \u00e4r bieffekterna av mina \u00e4ndringar? Varf\u00f6r p\u00e5verkar den h\u00e4r raden testerna av en avl\u00e4gsen del av kodbasen? En perfekt eller fullst\u00e4ndig l\u00f6sning finns inte, men Shopify kom ut med ett verktyg som f\u00f6rmodligen kommer att hj\u00e4lpa dig och ditt team.<\/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=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/sv\/blogg\/ruby-on-rails-modularisering-med-packwerk-avsnitt-i\/\" \/>\n<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/blogg\/ruby-on-rails-modularisering-med-packwerk-avsnitt-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 minuter\" \/>\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\":\"sv-SE\",\"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\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/#breadcrumb\"},\"inLanguage\":\"sv-SE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@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\":\"sv-SE\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"sv-SE\",\"@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\":\"sv-SE\",\"@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\\\/sv\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ruby on Rails Modularisering med Packwerk Avsnitt I - The Codest","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\/sv\/blogg\/ruby-on-rails-modularisering-med-packwerk-avsnitt-i\/","og_locale":"sv_SE","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\/sv\/blogg\/ruby-on-rails-modularisering-med-packwerk-avsnitt-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 minuter"},"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":"sv-SE","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 Modularisering med Packwerk Avsnitt 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","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#breadcrumb"},"inLanguage":"sv-SE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/"]}]},{"@type":"ImageObject","inLanguage":"sv-SE","@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":"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":"sv-SE"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"sv-SE","@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":"sv-SE","@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\/sv\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/sv\/wp-json\/wp\/v2\/posts\/3564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/sv\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/sv\/wp-json\/wp\/v2\/comments?post=3564"}],"version-history":[{"count":5,"href":"https:\/\/thecodest.co\/sv\/wp-json\/wp\/v2\/posts\/3564\/revisions"}],"predecessor-version":[{"id":7982,"href":"https:\/\/thecodest.co\/sv\/wp-json\/wp\/v2\/posts\/3564\/revisions\/7982"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/sv\/wp-json\/wp\/v2\/media\/3565"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/sv\/wp-json\/wp\/v2\/media?parent=3564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/sv\/wp-json\/wp\/v2\/categories?post=3564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/sv\/wp-json\/wp\/v2\/tags?post=3564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}