Upgrade to Pro — share decks privately, control downloads, hide ads and more …

モノリシックRailsアプリケーションを モジュラモノリスへ移行している noteの事例

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for shshimamo shshimamo
October 22, 2022

モノリシックRailsアプリケーションを モジュラモノリスへ移行している noteの事例

Avatar for shshimamo

shshimamo

October 22, 2022
Tweet

Other Decks in Programming

Transcript

  1.  ౢຊ༸໵ ʢ͠·΋ͱͻΖ΍ʣ note inc. ɾ!TITIJNBNP ɾετΞΧ ೥ ˠΫϦϓϥ ೥

    ˠOPUF ೥  ɾOPUFͰ͸ɺܾࡁ୲౰ɾγεςϜ෼ׂͳͲ
  2. note inc. ᶃύοέʔδσΟϨΫτϦ࡞੒ˍϑΝ ΠϧҠಈ ᶄύοέʔδͷґଘؔ܎Λ௥Ճ ᶅެ։ΫϥεΛ࡞੒ ᶆҧ൓ϦετΛݮΒ͍ͯ͘͠ ྫ: note Ͱͷӡ༻

    14 WBMJEBUFίϚϯυ DIFDLίϚϯυ Λ$*Ͱ࣮ߦ VQEBUF EFQSFDBUJPOTί ϚϯυΛखಈ࣮ߦ ҧ൓Ϧετ૿Ճ ҧ൓Ϧετݮগ
  3. note inc. packwerk ಋೖͷ͖͔͚ͬ 18 ɾେن໛Խʹ൐͏։ൃޮ཰௿ԼΛղফ͢ΔͨΊʹߴڽूɾૄ݁߹Λҙࣝͨ͠ߏ੒ ʹม͍͑ͯ͘ඞཁ͕͋ͬͨ ɾํ๏Λ໛ࡧ͍ͯ͠ΔதͰ̍࡭ͷॻ੶ʹग़ձ͏ ɾ 4UFQIBO)BHFNBOO

    ஶ (3"%6"-.0%6-"3*;"5*0/'0336#:"/%3"*-4 ɾஈ֊తͳυϝΠϯ෼ׂɺ੾Γ໭͕͠༰қɺͱ͍͏ಛ௃͕υϝΠϯ෼ׂͷ࠷ॳͷε ςοϓͱͯ͠ద͍ͯ͠Δͱ൑அ͠ಋೖΛܾఆ
  4. note inc. ύοέʔδԽͷखॱ 20 ᶃύοέʔδσΟϨΫτϦ࡞੒ ᶄઃఆϑΝΠϧ࡞੒ ᶅDPO fi HBQQMJDBUJPOSCʹϩʔυύε௥Ճ ᶆϑΝΠϧΛҠಈ

    ᶇҧ൓Ϧετߋ৽ ᶈҧ൓Ϧετͷࠩ෼Λ֬ೝ͠ߋʹҠಈ͢ΔϑΝΠϧ͕͋Δ͔νΣοΫ ᶉQBDLXFSLͷ੩తݕ͕ࠪ௨Δ͜ͱΛ֬ೝ ᶊҧ൓ϦετΛݮΒ͍ͯ͘͠ ᶋQBDLBHFTҠಈޙɺͬ͘͠Γ͜ͳ͍৔߹͸ݩʹ໭͢͜ͱ΋ߟ͑Δ $ mkdir packages/finance $ touch packages/finance/packages.yml $ git mv app/models/payment.rb packages/finance/app/models $ bundle exec packwerk update-deprecations $ bundle exec packwerk check
  5. note inc. packwerk ಋೖ࣌ʹ௥Ճͨ͠ઃఆ 21 ᶃBVUPMPBE@QBUIʹQBDLBHFTΛ௥Ճ ᶄ3BLF fi MFʹQBDLBHFTͷϩʔυΛ௥Ճ ᶅ"QQMJDBUJPO$POUSPMMFSʹQBDLBHFTͷ7JFXΛಡΉࠐΉઃఆΛ௥Ճ

    ᶆ$JSDMF$*ͷςετର৅ʹQBDLBHFTΛ௥Ճ ᶇGBDUPSZ@CPUͷύεʹQBDLBHFTΛ௥Ճ جຊతʹ͸֤πʔϧͷύεʹ৽نσΟϨΫτϦ( packages/ ) Λ௥Ճ͢Δ͚ͩͰok
  6. note inc. packages/README.md ͷྫ ϞδϡʔϧԽͷࢦ਑ • ෼ׂલͷେ͖͍ϞϊϦεΛίΞͱݺͿ • \3BJMTSPPU^QBDLBHFTσΟϨΫτϦԼʹϞδϡʔϧΛ഑ஔ͢Δ •

    Ϟδϡʔϧؒͷґଘؔ܎͸QBDLXFSLHFNΛ༻͍ͯ%4-ͰϧʔϧΛهड़͠ɺ$*Ͱҧ൓ͷ༗ແΛݕࠪ QBDLXFSLDIFDL ͢Δ • Ϟδϡʔϧͷத͸3BJMT&OHJOFͰߏஙͯ͠΋ྑ͍ • ϞδϡʔϧͷڥքൃݟͰ͸ҎԼΛߟྀ͢Δ ◦ ଞ͔Βಠཱͨ͠ॲཧ͔ʁ ґଘ͕গͳ͍͔  ◦ νʔϜΛඥ͚ͮΔࣄ͕Ͱ͖Δ͔ʁ ◦ σʔλϕʔεςʔϒϧ͸ଞͱಠཱ͍ͯ͠Δ͔ʁ • ཧ૝తʹ͸ɺϞδϡʔϧؒͷґଘ͸શ͘ແ͍͔ɺܾΊΒΕͨํ๏ QVCMJDBQJ΍QVCTVC ܦ༝ͷΈͰߦΘΕΔ΂͖ɻ͔͠͠ɺ ॳظͷҠߦஈ֊Ͱ͸೉͍͠ ◦ ίΞˠϞδϡʔϧɺϞδϡʔϧˠίΞͷ॥؀ࢀর͕ൃੜͯ͠͠·͏ ◦ ίΞˠϞδϡʔϧͷ௚઀ґଘ͸Ұൠతʹ༰ೝͯ͠ྑ͍ ◦ ॥؀ࢀরΛݮΒ͔͢ɺܾΊΒΕͨํ๏ͷΈͰͷ΍ΓͱΓʹ͢Δঢ়ଶΛ໨ࢦ͢ ◦ ॥؀ࢀর͕Ͳ͏ͯ͠΋ݮΒͤͳ͍৔߹ɺίΞʹ࢒ͨ͠ํ͕޷·͔ͬͨ͠Մೳੑ΋͋Δ • ॥؀ࢀরͷҰཡ͸QBDLXFSLHFNͰϦετԽ͠HJUDPNNJU͢Δʢޙड़ʣ 28
  7. note inc. packages/README.md ͷྫ public apiʹ͍ͭͯ • packwerk؅ཧͷύοέʔδ͸ɺଞͷύοέʔδ͔Βར༻͞ΕΔࣄΛલఏʹͨ͠public apiΛઃஔͰ͖Δ ◦

    σϑΥϧτͰ͸ packages/hoge/app/public/* ҎԼʹ഑ஔ͞ΕͨαʔϏεΫϥε͕public apiͱͳΔ • public api͸ ύοέʔδʹॴଐ͢Δ໊લۭؒͷ௚Լʹ Public ͱ͍͏ࢠͷnamespaceΛ੾Γɺͦͷ഑ԼʹαʔϏε ΫϥεΛஔ͘ܗͰ࣮૷͢Δ • ্ه͔ΒɺAPIͷrbϑΝΠϧ͸ packages/{{pkg_name}}/app/public/{{pkg_name}}/public/ ഑Լʹஔ͘͜ͱʹͳΔ 29