Slide 1

Slide 1 text

note inc. ϞϊϦγοΫRailsΞϓϦέʔγϣϯΛ ϞδϡϥϞϊϦε΁Ҡߦ͍ͯ͠Δ noteͷࣄྫ 1 Kaigi on Rails 2022 note גࣜձࣾɹౢຊ ༸໵

Slide 2

Slide 2 text

ౢຊ༸໵ ʢ͠·΋ͱͻΖ΍ʣ note inc. ɾ!TITIJNBNP ɾετΞΧ ೥ ˠΫϦϓϥ ೥ ˠOPUF ೥ ɾOPUFͰ͸ɺܾࡁ୲౰ɾγεςϜ෼ׂͳͲ

Slide 3

Slide 3 text

note inc. ࠓ೔ͷ࿩ ɾQBDLXFSLʹ͍ͭͯ ɾOPUFͷಋೖࣄྫ

Slide 4

Slide 4 text

4 packwerk ʹ͍ͭͯ

Slide 5

Slide 5 text

note inc. QBDLXFSLͱ͸ ɾ4IPQJGZ͕։ൃ ɾ3BJMT಺ʹύοέʔδʢϑΝΠϧάϧʔϓʣΛ࡞Δ͜ͱ͕Ͱ͖ΔΑ͏ʹͳΔ ɾେ͖ͳίʔυϕʔεΛখ͘͞ݟͤͯ։ൃޮ཰ߴΊΔ͜ͱ͕͜ͷHFNͷ໨త Rails App ύοέʔδ ύοέʔδ

Slide 6

Slide 6 text

note inc. ύοέʔδػೳతͳڥք ɾػೳ͝ͱʹBQQ MJCͳͲΛͭ͘ΔΠϝʔδ ɾઃఆϑΝΠϧʢQBDLBHFZNMʣΛ഑ஔͨ͠σΟϨΫ τϦ͕ύοέʔδʹͳΔ Rails App ϑΝΠφϯε ύοέʔδ ηΩϡϦςΟ ύοέʔδ package.yml package.yml package.yml

Slide 7

Slide 7 text

note inc. ύοέʔδڥքͷͨΊͷͭͷڧ੍ࣄ߲ ɾύοέʔδؒͷґଘؔ܎ ɾΞΫηείϯτϩʔϧʢެ։ඇެ։ʣ σΟϨΫτϦΛ෼͚͚ͨͩͰ͸ӨڹൣғΛݶఆ͢Δ͜ͱ͕Ͱ͖ͳ͍ɻ packwerk ͸ 2ͭͷࣄฑΛ੩తղੳͰڧ੍ ͢Δ͜ͱͰ࿦ཧతͳڥքઢΛͭ͘Δɻ

Slide 8

Slide 8 text

note inc. ڧ੍ࣄ߲ύοέʔδؒͷґଘؔ܎ ɾFOGPSDF@EFQFOEFODJFTΛUSVFʹ͢Δͱɺผύοέʔδͷࢀর͕ҧ൓ ͱΈͳ͞ΕΔ ɾผύοέʔδΛࢀর͍ͨ͠৔߹͸ґଘؔ܎Λ໌ه͢Δඞཁ͕͋Δ Rails App ύοέʔδ package.yml ύοέʔδ ❌

Slide 9

Slide 9 text

note inc. ྫϑΝΠφϯεˠηΩϡϦςΟͷҧ൓ packages/finance/app/models/payment.rb packages/security/app/models/check_content.rbɹ͕͋Δͱ͢Δɻ ผύοέʔδͰ͋ΔηΩϡϦςΟύοέʔδΛࢀর͍ͯ͠ΔͨΊҧ൓ͱͳΔɻ ͜ͷઃఆΛ࢖͏͜ͱͰύοέʔδͷӨڹൣғΛݶఆ͢Δ͜ͱ͕Ͱ͖Δɻ Rails App ϑΝΠφϯε ηΩϡϦςΟ ❌

Slide 10

Slide 10 text

note inc. ྫηΩϡϦςΟˠϑΝΠφϯε΁ͷґଘΛ௥Ճ ηΩϡϦςΟύοέʔδ͸ԣஅతʹ؂ࢹ͢Δػ ೳͳͷͰଞύοέʔδ΁ͷґଘΛڐՄ͢Δɻ ͔͠͠ɺϑΝΠφϯεύοέʔδͷ͢΂ͯͷ ΫϥεΛར༻Ͱ͖Δͷ͸޷·͘͠ͳ͍ɻ Rails App ηΩϡϦςΟ ϑΝΠφϯε ґଘ

Slide 11

Slide 11 text

note inc. ڧ੍ࣄ߲2: ΞΫηείϯτϩʔϧʢެ։/ඇެ։ʣ 11 ɾFOGPSDF@QSJWBDZΛUSVFʹ͢ΔͱBQQQVCMJDҎ֎ͷ͢΂ͯͷΫϥε͕ ඇެ։ͱͳΔʢެ։σΟϨΫτϦ͸มߋՄೳɻΫϥεࢦఆͷॻ͖ํ΋͋Δɻʣ Rails App ύοέʔδ ύοέʔδ app/public ެ։ ඇެ։ ⭕ ❌

Slide 12

Slide 12 text

note inc. ྫ: ϑΝΠφϯεͷҰ෦ͷΫϥε͚ͩެ։͢Δ 12 ɾϑΝΠφϯεύοέʔδͷFOGPSDF@QSJWBDZΛUSVFʹ͢Δ ɾBQQQVCMJDʹެ։ΫϥεΛ࡞੒ Rails App ηΩϡϦςΟ ύοέʔδ ϑΝΠφϯε ύοέʔδ app/public ެ։ Ϋϥε package.yml

Slide 13

Slide 13 text

note inc. packwerk ͷίϚϯυ 13 ᶃQBDLXFSLWBMJEBUF ઃఆϑΝΠϧͷਖ਼͠͞ͳͲΛνΣοΫ ᶄQBDLXFSLDIFDL ґଘؔ܎ɺΞΫηείϯτϩʔϧͷνΣοΫ ᶅQBDLXFSLVQEBUFEFQSFDBUJPOT ҧ൓Ϧετͷࣗಈੜ੒ɻSVCPDPQ@UPEPZNMͷΑ͏ͳࢦఠର৅֎ͷϦετɻ

Slide 14

Slide 14 text

note inc. ᶃύοέʔδσΟϨΫτϦ࡞੒ˍϑΝ ΠϧҠಈ ᶄύοέʔδͷґଘؔ܎Λ௥Ճ ᶅެ։ΫϥεΛ࡞੒ ᶆҧ൓ϦετΛݮΒ͍ͯ͘͠ ྫ: note Ͱͷӡ༻ 14 WBMJEBUFίϚϯυ DIFDLίϚϯυ Λ$*Ͱ࣮ߦ VQEBUF EFQSFDBUJPOTί ϚϯυΛखಈ࣮ߦ ҧ൓Ϧετ૿Ճ ҧ൓Ϧετݮগ

Slide 15

Slide 15 text

note inc. ҧ൓Ϧετ 15 ηΩϡϦςΟύοέʔδͷ $IFDL$POUFOUΫϥεʹରͯ͠ ґଘؔ܎ͱΞΫηείϯτϩʔϧͷҧ൓͕ൃੜɻ ҧ൓͕ൃੜ͍ͯ͠ΔϑΝΠϧ͸ϑΝΠφϯεύοέʔδͷϑΝΠϧɻ ɾSVCPDPQ@UPEPZNMͷΑ͏ͳ΋ͷ ɾϦετ͸ࢦఠͷର৅֎ͱͳΔɻҧ൓ϦετΛʹ͢Δ͜ͱ͕࠷ऴతͳ໨ඪ

Slide 16

Slide 16 text

note inc. ஫ҙ఺ 16 ɾ;FJUXFSL͕લఏͱͳ͍ͬͯΔ ɾ;FJUXFSL͕ແޮͰ΋QBDLXFSLΛ࢖͏͜ͱ͸Ͱ͖Δ͕ɺ;FJUXFSL ͷن໿ʹ൓͢Δఆ਺͸ҧ൓ݕ஌͞Εͳ͍ ɾఆ਺ϕʔεͷ੩తղੳͰ͋Δ ɾҾ਺ͰผύοέʔδͷΦϒδΣΫτΛड͚औ͍ͬͯͨͱͯ͠΋ҧ൓ݕ஌ ͞Εͳ͍

Slide 17

Slide 17 text

17 note ͷಋೖࣄྫ

Slide 18

Slide 18 text

note inc. packwerk ಋೖͷ͖͔͚ͬ 18 ɾେن໛Խʹ൐͏։ൃޮ཰௿ԼΛղফ͢ΔͨΊʹߴڽूɾૄ݁߹Λҙࣝͨ͠ߏ੒ ʹม͍͑ͯ͘ඞཁ͕͋ͬͨ ɾํ๏Λ໛ࡧ͍ͯ͠ΔதͰ̍࡭ͷॻ੶ʹग़ձ͏ ɾ 4UFQIBO)BHFNBOO ஶ (3"%6"-.0%6-"3*;"5*0/'0336#:"/%3"*-4 ɾஈ֊తͳυϝΠϯ෼ׂɺ੾Γ໭͕͠༰қɺͱ͍͏ಛ௃͕υϝΠϯ෼ׂͷ࠷ॳͷε ςοϓͱͯ͠ద͍ͯ͠Δͱ൑அ͠ಋೖΛܾఆ

Slide 19

Slide 19 text

note inc. ݱࡏͷ note ͷσΟϨΫτϦߏ੒ 19 QBDLBHFT഑Լʹ ͭͷύοέʔδ ֤ύοέʔδʹ͸ BQQҎ֎΋͢΂ͯҠಈ

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

note inc. packwerk ಋೖ࣌ʹ௥Ճͨ͠ઃఆ 21 ᶃBVUPMPBE@QBUIʹQBDLBHFTΛ௥Ճ ᶄ3BLF fi MFʹQBDLBHFTͷϩʔυΛ௥Ճ ᶅ"QQMJDBUJPO$POUSPMMFSʹQBDLBHFTͷ7JFXΛಡΉࠐΉઃఆΛ௥Ճ ᶆ$JSDMF$*ͷςετର৅ʹQBDLBHFTΛ௥Ճ ᶇGBDUPSZ@CPUͷύεʹQBDLBHFTΛ௥Ճ جຊతʹ͸֤πʔϧͷύεʹ৽نσΟϨΫτϦ( packages/ ) Λ௥Ճ͢Δ͚ͩͰok

Slide 22

Slide 22 text

note inc. ᶃ autoload_path ʹ packages/ Λ௥Ճ 22

Slide 23

Slide 23 text

note inc. ᶄ Rakefile ʹ packages/ ͷϩʔυΛ௥Ճ 23

Slide 24

Slide 24 text

note inc. ᶅ ApplicationController ʹ packages/ ͷ View ΛಡΈࠐΉઃఆΛ௥Ճ 24

Slide 25

Slide 25 text

note inc. ᶆ CircleCI ͷςετର৅ʹ packages/ Λ௥Ճ 25

Slide 26

Slide 26 text

note inc. ᶇ factory_bot ͷύεʹ packages/ Λ௥Ճ 26

Slide 27

Slide 27 text

note inc. ύοέʔδԽͷϧʔϧ 27 ɾQBDLBHFT3&"%.&NEύοέʔδԽͷϧʔϧ ύοέʔδԽʹڵຯΛ΋ͬͨνʔϜ͕ੵۃతʹಈ͚ΔΑ͏ʹߟ͑ํ΍खॱΛ੔උ ɾQBDLBHFT\ύοέʔδ໊^3&"%.&NE֤ύοέʔδͷઆ໌ ύοέʔδͷ໾ׂ΍࢖͍ํ

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

note inc. ֤ύοέʔδͷ3&"%.&NEͷྫ 30

Slide 31

Slide 31 text

31 packwerk ͷϝϦοτ

Slide 32

Slide 32 text

note inc. ϝϦοτ: ஈ֊తʹ෼ׂΛਐΊΔ͜ͱ͕Ͱ͖Δ 32 ɾϚΠΫϩαʔϏεͷΑ͏ʹಈ͘ঢ়ଶͰ੾Γग़͢ඞཁ͸ͳ͘ɺஈ֊తʹϑΝΠ ϧΛҠಈ͢Ε͹Α͍ ɾ௨ৗ։ൃΛ͠ͳ͕Βগͣͭ͠ύοέʔδԽΛਐΊΒΕΔɻίϯϑϦΫτ΋ආ ͚΍͍͢

Slide 33

Slide 33 text

note inc. ϝϦοτ: ؆୯ʹ΍Γ௚͕͠Ͱ͖Δ 33 ɾ࠷ॳͷ࡞ۀ͸୯७ͳϑΝΠϧҠಈͳͷͰ؆୯ʹ΍Γ௚͠Ͱ͖Δ ɾύοέʔδԽͷཻ౓΍ɺύοέʔδʹؚΊΔཁૉͳͲɺࢼߦࡨޡ͠ͳ͕Βਐ ΊΔ͜ͱ͕Ͱ͖Δ

Slide 34

Slide 34 text

note inc. ϝϦοτ: ϦϙδτϦ಺ͷߏ੒ཁૉɺґଘؔ܎͕೺Ѳ͠΍͘͢ͳΔ 34 ɾڊେͳϦϙδτϦ಺͕ͲͷΑ͏ͳߏ੒ཁૉ͔Β੒ΓɺͦΕΒ͕Ͳ͏ґଘ͠ ͍ͯΔ͔͕೺Ѳ͠΍͘͢ͳͬͨ ɾίʔυͷमਖ਼ൣғͱӨڹൣғ͕֬ೝ͠΍͘͢ͳͬͨ ɾ৽͍͠ϝϯόʔͷೝ஌ෛՙ͕ܰݮ

Slide 35

Slide 35 text

note inc. ϝϦοτ: ϦϑΝΫλϦϯάͷଅਐޮՌ 35 ɾҧ൓Ϧετ͔Βύοέʔδؒͷґଘͷ౓߹͍͕͋Δఔ౓೺ѲͰ͖Δ ɾଞΫϥεʹҠಈͨ͠΄͏͕ྑ͍ϝιουɺ੹຿Λ෼ׂͨ͠ํ͕͍͍Ϋϥε͕ݟ ͔ͭͬͨΓ͢Δ ɾ֤ύοέʔδ഑Լ͸୲౰νʔϜʹࡋྔΛ࣋ͨͤͨ͜ͱͰɺίʔσΟϯάϧʔϧ ͳͲͷҙࢥܾఆ͕εϜʔζʹͳͬͨ

Slide 36

Slide 36 text

note inc. σϝϦοτ 36 ɾҰൠతͳ3BJMTͷσΟϨΫτϦߏ଄Ͱ͸ͳ͘ͳΔͷͰࣾ಺Ͱͷप஌Λ͔ͬ͠ Γߦ͏ඞཁ͕͋Δ

Slide 37

Slide 37 text

37 ࠓޙͷ՝୊

Slide 38

Slide 38 text

note inc. ՝୊: ·ͩશମͷ2ׂఔ౓͔͠ύοέʔδԽͰ͖͍ͯͳ͍ 38 ɾਐΊ΍͢͞ɺࢼߦࡨޡͷ͠΍͢͞͸͋Δ΋ͷͷɺυϝΠϯڥքͷݕূɺඥ෇͚ ΔνʔϜͷௐ੔ɺͳͲ͸ϚΠΫϩαʔϏεͱಉ͡Α͏ʹ͕͔͔࣌ؒΔ ɾύοέʔδԽ͕׬͍ྃͯ͠Δ΋ͷ͍ͭͯ΋ɺҧ൓Ϧετ͕࢒͍ͬͯΔঢ়ଶɻ· ͩํ਑Λٞ࿦͍ͯ͠Δ෦෼΋͋Δʢެ։*'ͷฦΓ஋Λ+40/ʹ͢ΔͳͲʣ

Slide 39

Slide 39 text

note inc. ՝୊: ࣅͨΑ͏ͳ໾ׂͷϑΝΠϧ͕ෳ਺ଘࡏ͍ͯ͠Δ 39 ɾ΋ͱ΋ͱ͋ͬͨ໰୊͕ύοέʔδԽʹΑͬͯݦࡏԽ ɾྫ͑͹4͔ΒϑΝΠϧΛऔಘ͢ΔॲཧͳͲɺࣅͨΑ͏ͳϢʔςΟϦςΟΫ ϥε͕ෳ਺ͷύοέʔδʹଘࡏ͍ͯ͠Δ ɾݱࡏ͸ύοέʔδΛ·͍ͨͩڞ௨Խ͸ա౓ʹٻΊͳ͍ํ਑ͰਐΊ͍ͯΔ͕ɺ ॏෳϑΝΠϧ͕૿͖͑ͯͨΒํ਑స׵͕ඞཁ͔΋͠Εͳ͍

Slide 40

Slide 40 text

40 ͦͷଞ

Slide 41

Slide 41 text

note inc. ֤υϝΠϯʹݻ༗ͷnamespaceΛׂΓ౰ͯΔ 41 ɾద੾ͳOBNFTQBDFʹDMBTTΛҠಈͤͯ͞ߏ଄Խ͓ͯ͘͠ࣄ΋ॏཁ ɾSVCZBUTDBMFTUJNQBDLͷߏ଄͕ࢀߟʹͳΔ ଞύοέʔδΛҙࣝ͠ͳ͍͍ͯ͘Α͏ʹ υϝΠϯ໊ͷωʔϜεϖʔεΛ੾ΔΑ͏ ʹ͍ͯ͠Δɻ ݱঢ়͸1030ʹͷΈద༻

Slide 42

Slide 42 text

note inc. ެ։IFͷ໭Γ஋ 42 ɾ"DUJWF3FDPSE΍"DUJWF3FDPSE3FMBUJPOͷΦϒδΣΫτΛฦ͢ͱ޷ ͖উखͰ͖ͯ͠·͏ͷͰɺকདྷతʹ෼཭͢ΔՄೳੑ͕ߴ͍υϝΠϯʹؔͯ͠ ͸+40/΍1SPUPDPM#V ff FSTͰฦ͢͜ͱΛݕ౼தɻ ɾͨͩ͠"3ͷརศੑɺՄಡੑΛࣦͬͯ͠·͏ͨΊద༻͢Δύοέʔδ͸ݫબ ͨ͠ํ͕͍͍͔΋͠Εͳ͍ Rails App ύοέʔδ ύοέʔδ app/public +40/

Slide 43

Slide 43 text

note inc. ૊৫࿦ʹ͍ͭͯ 43 ɾϚΠΫϩαʔϏε΄ͲͰ͸ͳ͍ʹ͠ΖɺϞδϡϥϞϊϦεԽʹ͸૊৫ͷڠྗ ͱڧ͍࢟੎͕ඞཁɻʢ͔ͭQBDLXFSLͷΑ͏ͳ࢖͍উखͷྑ͍੩తݕࠪπ ʔϧͷॿ͚΋ॏཁʣ ɾղମΛਪ͠ਐΊΔΤϯδχΞͷڧ͍ҙࢤͱ࣮ߦྗʢ࿹ྗɺ$50΍ςοΫϦ ʔυͷ߸ྩͳͲʣ͕֬อͰ͖ͳ͍ঢ়ଶͳΒɺͦͷஈ֊Ͱ͸ղମʹ͸౿Έࠐ·ͳ ͍ํ͕ྑ͍͔΋͠Εͳ͍

Slide 44

Slide 44 text

44 ·ͱΊ

Slide 45

Slide 45 text

note inc. ·ͱΊ 45 ɾυϝΠϯ෼ׂΛਐΊΔʹ͋ͨͬͯQBDLXFSLͷಛ௃͕OPUFʹ͸దͯ͠ ͍ͨ ɾࠓͷͱ͜ΖOPUFͰ͸ଟ͘ͷϝϦοτΛײ͓ͯ͡ΓɺσϝϦοτ͸΄ͱΜ Ͳײ͍ͯ͡ͳ͍ ɾQBDLXFSLΛಋೖͨ͜͠ͱͰಋೖ໨తͰ͋ͬͨߴڽूɾૄ݁߹ͳγεςϜͷ ࣮ݱ͸গͣͭ͠Ͱ͸͋Δ͕ண࣮ʹલʹਐΊΒΕ͍ͯΔ ɾ͔͠͠՝୊΋ଟ͘·ͩ·ͩઌ͸௕͍ͷͰࠓޙ΋ܧଓͯ͠ଓ͚͍͖͍ͯͨ