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

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

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