{"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-modularizace-s-packwerk-episode-i","status":"publish","type":"post","link":"https:\/\/thecodest.co\/cs\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/","title":{"rendered":"Modularizace Ruby on Rails pomoc\u00ed Packwerk Episode I"},"content":{"rendered":"<h2>\u00davod<\/h2>\n<p>Aby bylo mo\u017en\u00e9 mluvit o <strong>Packwerk<\/strong>, mus\u00edme si nejprve p\u0159edstavit n\u011bkolik pojm\u016f.<\/p>\n<ul>\n<li><b>Soudr\u017enost<\/b>: ozna\u010duje m\u00edru toho, jak moc k sob\u011b prvky modulu nebo t\u0159\u00eddy pat\u0159\u00ed.<\/li>\n<li><b>Spojka<\/b>: ozna\u010duje \u00farove\u0148 z\u00e1vislosti mezi moduly nebo t\u0159\u00eddami.<\/li>\n<li><b>Hranice<\/b>: se t\u00fdk\u00e1 bari\u00e9r mezi <a href=\"https:\/\/thecodest.co\/cs\/dictionary\/what-is-code-refactoring\/\">k\u00f3d<\/a>. V tomto p\u0159\u00edpad\u011b se hranice k\u00f3du vztahuje k r\u016fzn\u00fdm oblastem z\u00e1jmu v r\u00e1mci stejn\u00e9 k\u00f3dov\u00e9 z\u00e1kladny.<\/li>\n<li><b>Modularizace<\/b>: proces rozd\u011blen\u00ed softwarov\u00e9ho syst\u00e9mu na v\u00edce samostatn\u00fdch modul\u016f, kde ka\u017ed\u00fd modul pracuje nez\u00e1visle.<\/li>\n<\/ul>\n<h2>Probl\u00e9my<\/h2>\n<p>Jak v\u00edme, <strong><a href=\"https:\/\/thecodest.co\/cs\/blog\/hire-ror-developer\/\">Ruby<\/a><\/strong> neposkytuje dobr\u00e9 \u0159e\u0161en\u00ed pro vynucen\u00ed hranic k\u00f3du. M\u016f\u017eeme ur\u010dit viditelnost, ale v\u0161echny z\u00e1vislosti budou na\u010dteny do glob\u00e1ln\u00edho jmenn\u00e9ho prostoru. Ve velk\u00fdch nebo monolitick\u00fdch aplikac\u00edch zp\u016fsobuje tato absence hranic n\u00e1sleduj\u00edc\u00ed probl\u00e9my.<\/p>\n<ul>\n<li>N\u00edzk\u00e1 soudr\u017enost,<\/li>\n<li>Vysok\u00fd spoj, <\/li>\n<li>\u0160pagetov\u00fd k\u00f3d.<\/li>\n<\/ul>\n<p>Ve snaze modulovat monolit spole\u010dnosti Shopify a prosadit hranice vyzkou\u0161eli r\u016fzn\u00e1 \u0159e\u0161en\u00ed, ani\u017e by dos\u00e1hli o\u010dek\u00e1van\u00fdch v\u00fdsledk\u016f:<br \/>\n- Nastaven\u00ed soukrom\u00fdch konstant,<br \/>\n- Stanoven\u00ed hranic pomoc\u00ed drahokam\u016f,<br \/>\n- Pou\u017eit\u00ed test\u016f k prevenci asociac\u00ed mezi jednotliv\u00fdmi slo\u017ekami,<br \/>\n- Pou\u017eit\u00ed modula\u010dn\u00edho drahokamu Ruby,<br \/>\n- Vytv\u00e1\u0159en\u00ed <a href=\"https:\/\/thecodest.co\/cs\/dictionary\/microservices\/\">mikroslu\u017eby<\/a>.<\/p>\n<p>S vyu\u017eit\u00edm v\u0161ech znalost\u00ed z p\u0159edchoz\u00edch pokus\u016f se rozhodli vytvo\u0159it vlastn\u00ed n\u00e1stroj: <strong>Packwerk<\/strong>.<\/p>\n<h2>Packwerk<\/h2>\n<h3>Co je Packwerk?<\/h3>\n<p><strong>Packwerk<\/strong> je n\u00e1stroj statick\u00e9 anal\u00fdzy, kter\u00fd slou\u017e\u00ed k vynucen\u00ed hranic mezi skupinami dat. <strong>Ruby<\/strong> soubory s n\u00e1zvem <strong>bal\u00ed\u010dky<\/strong>.<\/p>\n<h3>Co je to bal\u00ed\u010dek?<\/h3>\n<p>A <strong>bal\u00ed\u010dek<\/strong> je slo\u017eka obsahuj\u00edc\u00ed automaticky spou\u0161t\u011bn\u00fd k\u00f3d. Shopify <a href=\"https:\/\/thecodest.co\/cs\/blog\/how-to-hire-the-best-outsourced-development-team-for-a-scaleup\/\">t\u00fdm<\/a> vyz\u00fdv\u00e1 k pou\u017e\u00edv\u00e1n\u00ed osv\u011bd\u010den\u00fdch postup\u016f p\u0159i vytv\u00e1\u0159en\u00ed bal\u00ed\u010dk\u016f.<br \/>\n- M\u011bli bychom spole\u010dn\u011b balit v\u011bci, kter\u00e9 maj\u00ed vysokou funk\u010dnost <a href=\"https:\/\/en.wikipedia.org\/wiki\/Cohesion_(computer_science)\" rel=\"nofollow\">soudr\u017enost<\/a>,<\/p>\n<ul>\n<li>Bal\u00ed\u010dky by m\u011bly b\u00fdt mezi sebou relativn\u011b voln\u011b prov\u00e1z\u00e1ny.<\/li>\n<\/ul>\n<h3>Typy hrani\u010dn\u00edch kontrol<\/h3>\n<p>M\u016f\u017eeme vynucovat hranice soukrom\u00ed a z\u00e1vislost\u00ed, kontrolovat jejich poru\u0161en\u00ed a cyklick\u00e9 z\u00e1vislosti.<\/p>\n<h2>Packwerk do praxe<\/h2>\n<p>Neexistuje jedin\u00fd konkr\u00e9tn\u00ed zp\u016fsob, jak p\u0159i vytv\u00e1\u0159en\u00ed bal\u00ed\u010dk\u016f strukturovat nebo zm\u011bnit strukturu aplikace. V tomto \u010dl\u00e1nku se budeme \u0159\u00eddit p\u0159\u00edstupem, kter\u00fd navrhuje<br \/>\nStephan Hagemann v <em>Postupn\u00e1 modularizace pro Ruby on <a href=\"https:\/\/thecodest.co\/cs\/blog\/ways-to-increase-your-rails-performance\/\">Rails<\/a><\/em>.<\/p>\n<h3>V\u00fdb\u011br projektu<\/h3>\n<p>M\u016f\u017eete vytvo\u0159it nov\u00fd <a href=\"https:\/\/thecodest.co\/cs\/dictionary\/why-do-projects-fail\/\">projekt<\/a> nebo si vyberte jeden ze sv\u00fdch projekt\u016f. Rozhodl jsem se pou\u017e\u00edt open-source projekt s n\u00e1zvem  <a href=\"https:\/\/github.com\/codetriage\/codetriage\" rel=\"nofollow\">CodeTriage<\/a>. Je d\u016fle\u017eit\u00e9 zm\u00ednit, \u017ee pot\u0159ebujeme aplikaci Rails 6, proto\u017ee <strong>Packwerk<\/strong> pou\u017e\u00edv\u00e1 Zeitwerk.<\/p>\n<h3>Inicializace syst\u00e9mu Packwerk<\/h3>\n<p>Nejd\u0159\u00edve mus\u00edme p\u0159idat gem do na\u0161eho souboru Gemfile, jako nap\u0159\u00edklad <code>gem 'packwerk'<\/code> a pak spus\u0165te <code>svazek<\/code>v konzole. Pak jsme p\u0159ipraveni inicializovat klenot, kter\u00fd b\u011b\u017e\u00ed <code>packwerk init<\/code>.<\/p>\n<p>Pot\u00e9 si v\u0161imneme, \u017ee <strong>Packwerk<\/strong> vygeneroval t\u0159i soubory pro <a href=\"https:\/\/thecodest.co\/cs\/blog\/why-us-companies-are-opting-for-polish-developers\/\">n\u00e1s<\/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>inflections.yml<\/em><\/p>\n<\/li>\n<\/ul>\n<p><em>packwerk.yml<\/em> je konfigura\u010dn\u00ed soubor <strong>Packwerk<\/strong> kde mimo jin\u00e9 definujeme zahrnut\u00e9 a vylou\u010den\u00e9 soubory, uvedeme cesty pro na\u010d\u00edt\u00e1n\u00ed a definujeme sklo\u0148ovac\u00ed soubor;<\/p>\n<p><em>package.yml<\/em> je konfigura\u010dn\u00ed soubor bal\u00ed\u010dku. V tomto souboru p\u0159id\u00e1me konfiguraci pro hranice na\u0161eho bal\u00ed\u010dku. Jak\u00e1koli slo\u017eka se souborem package.yml bude rozpozn\u00e1na jako bal\u00ed\u010dek pomoc\u00ed n\u00e1stroje <strong>Packwerk<\/strong>. To je v\u0161e, <strong>Packwerk<\/strong> vytvo\u0159il n\u00e1\u0161 prvn\u00ed<br \/>\na naz\u00fdv\u00e1me jej <em>root<\/em> bal\u00ed\u010dek.<\/p>\n<p><em>inflections.yml<\/em> je m\u00edsto, kam um\u00edst\u00edme na\u0161e vlastn\u00ed sklo\u0148ov\u00e1n\u00ed a zkratky, pokud je budeme pou\u017e\u00edvat.<\/p>\n<p>V\u00edce informac\u00ed o souborech a jejich konfiguraci najdete v \u010d\u00e1sti<br \/>\n<a href=\"https:\/\/github.com\/Shopify\/packwerk\" rel=\"nofollow\">Packwerk<\/a>.<\/p>\n<h3>Vlastnosti Packwerk<\/h3>\n<p>Aby modularizace fungovala, pot\u0159ebujeme t\u0159i z\u00e1kladn\u00ed vlastnosti: <em>pojmenovan\u00fd kontejner<\/em>, jeho <em>obsah<\/em>a v\u00fdslovn\u011b <em>z\u00e1vislosti<\/em> na jin\u00fdch <em>kontejnery<\/em>. Definujme tedy tyto vlastnosti v <strong>Packwerk<\/strong>:<\/p>\n<ul>\n<li>\n<p><b>N\u00e1zev<\/b>: N\u00e1zev bal\u00ed\u010dku je jeho relativn\u00ed cesta od ko\u0159ene adres\u00e1\u0159e.<br \/>\naplikace.<\/p>\n<\/li>\n<li>\n<p><b>Obsah<\/b>: Kdy\u017e um\u00edst\u00edme soubor package.yml do slo\u017eky, v\u0161echny soubory v t\u00e9to slo\u017ece jsou nyn\u00ed obsahem bal\u00ed\u010dku.<\/p>\n<\/li>\n<li>\n<p><b>Z\u00e1vislosti<\/b>: M\u016f\u017eeme definovat z\u00e1vislosti na jin\u00fdch bal\u00ed\u010dc\u00edch p\u0159id\u00e1n\u00edm kl\u00ed\u010de z\u00e1vislost\u00ed do pole <em>package.yml<\/em>.<\/p>\n<\/li>\n<\/ul>\n<p>Dal\u0161\u00edm souborem, kter\u00fd nen\u00ed ve v\u00fdchoz\u00edm nastaven\u00ed zahrnut, ale doporu\u010duje se, je README. Je d\u016fle\u017eit\u00e9, aby poskytoval informace o pou\u017eit\u00ed bal\u00ed\u010dku.<\/p>\n<p>Konec epizody I <\/p>\n<p><a href=\"https:\/\/thecodest.co\/contact\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/cta_2.jpeg\" alt=\"Poradenstv\u00ed v oblasti v\u00fdvoje digit\u00e1ln\u00edch produkt\u016f\" \/><\/a><\/p>\n<p><strong>P\u0159e\u010dt\u011bte si v\u00edce<\/strong><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/graphql-ruby-what-about-performance\">GraphQL Ruby. Jak je to s v\u00fdkonem?<\/a><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-and-other-means-of-transport\">Kolejnice a dal\u0161\u00ed dopravn\u00ed prost\u0159edky<\/a><\/p>\n<p><a href=\"https:\/\/thecodest.co\/blog\/rails-development-with-tmux-vim-fzf-ripgrep\">V\u00fdvoj Rails pomoc\u00ed TMUX, Vim, Fzf + Ripgrep<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Pro lidi je obt\u00ed\u017en\u00e9 vid\u011bt celkov\u00fd obraz probl\u00e9mu, ani\u017e by mu v\u011bnovali mnoho \u010dasu a \u00fasil\u00ed. To se st\u00e1v\u00e1 zejm\u00e9na p\u0159i pr\u00e1ci s rozs\u00e1hl\u00fdmi a slo\u017eit\u00fdmi aplikacemi. Jak\u00e9 jsou vedlej\u0161\u00ed \u00fa\u010dinky m\u00fdch zm\u011bn? Pro\u010d tento \u0159\u00e1dek zde ovliv\u0148uje testy vzd\u00e1len\u00e9 \u010d\u00e1sti k\u00f3dov\u00e9 z\u00e1kladny? Dokonal\u00e9 nebo \u00fapln\u00e9 \u0159e\u0161en\u00ed neexistuje, ale Shopify p\u0159i\u0161lo s n\u00e1strojem, kter\u00fd v\u00e1m a va\u0161emu t\u00fdmu pravd\u011bpodobn\u011b pom\u016f\u017ee.<\/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\/cs\/blog\/ruby-on-rails-modularizace-s-packwerk-episode-i\/\" \/>\n<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\/cs\/blog\/ruby-on-rails-modularizace-s-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 minuty\" \/>\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\":\"cs\",\"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\":\"cs\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/ruby-on-rails-modularization-with-packwerk-episode-i\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"cs\",\"@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\":\"cs\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"cs\",\"@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\":\"cs\",\"@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\\\/cs\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Modularizace Ruby on Rails s Packwerk Episode I - The Codest","description":"Pro lidi je obt\u00ed\u017en\u00e9 vid\u011bt celkov\u00fd obraz probl\u00e9mu, ani\u017e by mu v\u011bnovali mnoho \u010dasu a \u00fasil\u00ed. To se st\u00e1v\u00e1 zejm\u00e9na p\u0159i pr\u00e1ci s rozs\u00e1hl\u00fdmi a slo\u017eit\u00fdmi aplikacemi. Jak\u00e9 jsou vedlej\u0161\u00ed \u00fa\u010dinky m\u00fdch zm\u011bn? Pro\u010d tento \u0159\u00e1dek zde ovliv\u0148uje testy vzd\u00e1len\u00e9 \u010d\u00e1sti k\u00f3dov\u00e9 z\u00e1kladny? Dokonal\u00e9 nebo \u00fapln\u00e9 \u0159e\u0161en\u00ed neexistuje, ale Shopify p\u0159i\u0161lo s n\u00e1strojem, kter\u00fd v\u00e1m a va\u0161emu t\u00fdmu pravd\u011bpodobn\u011b pom\u016f\u017ee.","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\/cs\/blog\/ruby-on-rails-modularizace-s-packwerk-episode-i\/","og_locale":"cs_CZ","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\/cs\/blog\/ruby-on-rails-modularizace-s-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 minuty"},"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":"cs","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":"Modularizace Ruby on Rails s 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":"Pro lidi je obt\u00ed\u017en\u00e9 vid\u011bt celkov\u00fd obraz probl\u00e9mu, ani\u017e by mu v\u011bnovali mnoho \u010dasu a \u00fasil\u00ed. To se st\u00e1v\u00e1 zejm\u00e9na p\u0159i pr\u00e1ci s rozs\u00e1hl\u00fdmi a slo\u017eit\u00fdmi aplikacemi. Jak\u00e9 jsou vedlej\u0161\u00ed \u00fa\u010dinky m\u00fdch zm\u011bn? Pro\u010d tento \u0159\u00e1dek zde ovliv\u0148uje testy vzd\u00e1len\u00e9 \u010d\u00e1sti k\u00f3dov\u00e9 z\u00e1kladny? Dokonal\u00e9 nebo \u00fapln\u00e9 \u0159e\u0161en\u00ed neexistuje, ale Shopify p\u0159i\u0161lo s n\u00e1strojem, kter\u00fd v\u00e1m a va\u0161emu t\u00fdmu pravd\u011bpodobn\u011b pom\u016f\u017ee.","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/#breadcrumb"},"inLanguage":"cs","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/ruby-on-rails-modularization-with-packwerk-episode-i\/"]}]},{"@type":"ImageObject","inLanguage":"cs","@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":"cs"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"cs","@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":"cs","@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\/cs\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/posts\/3564","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/comments?post=3564"}],"version-history":[{"count":5,"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/posts\/3564\/revisions"}],"predecessor-version":[{"id":7982,"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/posts\/3564\/revisions\/7982"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/media\/3565"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/media?parent=3564"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/categories?post=3564"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/cs\/wp-json\/wp\/v2\/tags?post=3564"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}