Slide 1

Slide 1 text

ҏ౻ߒҰ&4. *OD ίϛολʔ௚఻ 3VCP$PQ࣮ફΨΠυ Beyond the RuboCop Defaults 3VCZηϛφʔ౦ژ  Ϗδϣϯηϯλʔ඼઒

Slide 2

Slide 2 text

@koic w044ϓϩάϥϚʔ w3VCP$PQίΞνʔϜίϛολʔ wגࣜձࣾӬ࿨γεςϜϚωδϝϯτ &4. *OD  ΤϯδχΞϦϯάϚωʔδϟʔ σΟεςΟϯάΠογϡυɾΤϯδχΞ

Slide 3

Slide 3 text

3VCP$PQDPSFEFWFMPQFST +0900 UTC+0200 +0300 +0800 -0400 ೥ؒͰਓҎ্ͷ։ൃऀ͕ؔΘΔϓϩδΣΫτ

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Support OSS community

Slide 6

Slide 6 text

w !LPJD1BSTFSHFNίϛολʔ w !KVOL-SBNBίϛολʔ w !4)(".&-*/,4QBSTFZίϯτϦϏϡʔλ w !GVHBLLCO3#4ίϯτϦϏϡʔλ w ෦һืूதʂ ߏจղੳثݚڀ෦ IUUQTNBHB[JOFSVCZJTUOFUBSUJDMFT'PMMPX6Q,JSJTIJNB3VCZIUNM

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

ࠓ೔ͷ࿩

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

IUUQTSBJMTEFWFMPQFSDPNTVSWFZXIJDISVCZHFNTEPZPVMPWF

Slide 11

Slide 11 text

IUUQTSBJMTEFWFMPQFSDPNTVSWFZXIJDISVCZHFNTGSVTUSBUFZPVUIFNPTU

Slide 12

Slide 12 text

σϑΥϧτ͸࢖͍ ͮΒ͍͕ߏ੒͢Δ ͷ͸໘౗ͱ͍͏੠

Slide 13

Slide 13 text

मޗ͞Μ͔ΒͷΦϑΝʔ IUUQTUXJUUFSDPNNPSJNPSJIPHFTUBUVT ͜Ε͔Β3VCP$PQΛಋೖ͞ΕΔํ΍ɺಋೖ ͍ͯ͠Δ͚ΕͲ΋σϑΥϧτʹ͍ۙઃఆͰ 3VCP$PQͷ͍͍ͳΓͰ͔͑ͬͯಡΈʹ͍͘ Α͏ͳमਖ਼Λͯ͠͠·͍ͬͯΔํʹɺ͜͏͍ ͏෩ʹ࢖͏ͱ͍͍Αͱ͍͏ώϯτʹͳΔΑ ͏ͳ͓࿩Λ͍͚ͨͩΕ͹ͱࢥ͍ͬͯ·ͨ͠ ͭ·Γ3VCP$PQͱͷ޲͖߹͍ํͷڑ཭ײͱཧղ͠·ͨ͠

Slide 14

Slide 14 text

3VCP$PQͱͷ ࣮ફͰͷ޲͖߹͍ํ

Slide 15

Slide 15 text

w ൃද࣌ͷ࠷৽ͷ3VCP$PQΛલఏʹ͠ ͯ·͢ ຊτʔΫʹ͓͚Δόʔδϣϯ $ ruby -v ruby 3.4.0dev (2024-09-19T18:51:21Z master 2230ac4a28) +PRISM [x86_64-darwin23] $ bundle exec rubocop -V 1.66.1 (using Parser 3.3.5.0, rubocop-ast 1.32.3, running on ruby 3.4.0) [x86_64-darwin23] ࠓ೔͸όʔδϣϯґଘ௿Ίͷߟ͑ํΛத৺ͱͨ͠࿩Ͱ͕͢೦ͷҝ

Slide 16

Slide 16 text

 ྺ࢙ͱߟ͑ํ  3VCP$PQͷ͸͡Ί͔ͨ  ΦʔτίϨΫτ΁ͷߟ͑ํ  3BJMT ͱ3VCP$PQ  σϑΥϧτͷະདྷΛߟ͑Δ ໨࣍

Slide 17

Slide 17 text

 ྺ࢙ͱߟ͑ํ

Slide 18

Slide 18 text

w 3VCZ೥݄೔ੜ·Ε w IUUQTCMBEFSVCZMBOHPSHSVCZMJTU w 3BJMT೥݄೔ʹΞφ΢ϯε w IUUQTCMBEFSVCZMBOHPSHSVCZUBML w 3VCP$PQ೥݄೔ʹTUίϛοτ w IUUQTHJUIVCDPNSVCPDPQSVCPDPQDPNNJUBGCFBE 3VCZ 3BJMT 3VCP$PQͷ஀ੜ

Slide 19

Slide 19 text

w 3BJMTʹΑΔϝΨώοτޚྱʹΑΓϕςϥϯ ͔ΒϏΪφʔ·Ͱ෯޿͍Ϣʔβʔ૚Λ࣋ͭ w 3VCZίϛολʔͰ΋޷Έ͕Θ͔ΕΔɺଟ༷ ͳॻ͖ํ͕Ͱ͖ΔॊΒ͔͞Λ࣋ͭݴޠ w ݸਓ΍૊৫ʹΑΔɺࢲ ͨͪ ͷߟ͑ͨ਺ଟ ͷ࠷ѪͷελΠϧ 3VCZͰͷελΠϧͷ౔৕

Slide 20

Slide 20 text

఩ਓدΓʁࢻਓدΓʁ ఩ਓ ࢻਓ w νʔϜ։ൃ w ݎ͍ن໿ w ౷Ұੑͷ९क w ݸਓ։ൃ w ؇͍ن໿ w ଟ༷ͷड͚ೖΕ ౓߹͍

Slide 21

Slide 21 text

3VC$PQཱ֬લͷ3VCZ೥΁ͷެࣜ఩ֶ IUUQTEPDTSVCPDPQPSHSVCPDPQJOEFYIUNMQIJMPTPQIZ

Slide 22

Slide 22 text

w 3VCP$PQ͸3VCZ4UZMF(VJEFͷϥϯλΠϜ࣮૷ w ॳظʹ໨ࢦͨ͠ͷ͸HPGNUతͳେ౷ҰϑΥϚολʔ w 3VCZίϛϡχςΟʹ͸ڝ߹͢ΔελΠϧ΍޷Έ͕ ͋Δ͜ͱʹؾͮ͘ FH จࣈྻͷΫΥʔτ  w 3VCZ4UZMF(VJEFΛσϑΥϧτͱͯ͠ɺҰൠతͱ ࢥΘΕΔελΠϧΛߏ੒Մೳʹ͢ΔΑ͏ʹͳΔ 3VCP$PQͷ఩ֶαϚϦʔ https://rubystyle.guide/

Slide 23

Slide 23 text

େ౷ҰͰ͖Δ͔໰୊ ఩ਓ ࢻਓ w ελΠϧͰ޷Έ͕෼͔ΕΔ w ఩ਓࢻਓͷ౓߹͍͕։ൃऀ͝ͱʹҟͳΔ w ͳΜͳΒ3VCZίϛολʔͰ΋ҟͳ͍ͬͯͨ ౓߹͍

Slide 24

Slide 24 text

޷Έͷҧ͍Λड͚ ೖΕΔͱ͍͏఩ֶ

Slide 25

Slide 25 text

3VCZ,BJHJ େ౷ҰϑΥʔϚολͷಋೖ͕೉͍͠ݴޠ͸ɺϢʔβʔʹѪ͞Ε͍͗ͯ͢Δઆ %BWF5IPNBT IUUQTXXXZPVUVCFDPNXBUDI W&$'(C+9Z*

Slide 26

Slide 26 text

։ൃऀؒͰଟ༷ͳ ޷Έ͕͋ΔνʔϜ

Slide 27

Slide 27 text

l ҟͳΔ ελΠϧΛࠞͥͯ͠· ͏ͱɺ͘͢͝ಡΈʹ͍͘΋ͷʹ ͳͬͯ͠·͏ɻ ུ ͦ͜Ͱ͸ϓ ϩδΣΫτͷن໿ʹ͕ͨ͠͏Α ͏ʹͨ͠ɻҰ؏ੑͷํ͕େ੾ͳ ͜ͱ͔ͩΒͩɻ ݸਓݸਓͷ޷ΈͱҰ؏ੑ ʰϦʔμϒϧίʔυʱΑΓ

Slide 28

Slide 28 text

͖Έ͸ݸਓͷ੒ޭͱνʔϜͷ੒ޭ ͲͪΒΛબͿʁ ಉ͡&DMJQTF*%&Λ࢖ͬͨ ϖΞϓϩάϥϛϯάͰΩʔόΠϯυ ͕͋Θͳ͍ɻͲ͏ࢥ͏ʁ @KKD asked @KentBeck KKD఻ฉ (2006೥ࠒ)

Slide 29

Slide 29 text

ਓؒؔ܎ͷຎࡲΛ ݮΒͨ͢Ίʹ࢖͏ ͷ্͕खͳ࢖͍ํ

Slide 30

Slide 30 text

ᘭ຤ͳCZOBNFϨϏϡʔΛආ͚Δ IUUQTUXJUUFSDPNPOLTUBUVT

Slide 31

Slide 31 text

ΞδϟΠϧͳνʔϜ։ൃʹֶͿ w ਓؒ͸܁Γฦ͠ͷ ࢦఠΛ͢Δͷ΋͞ ΕΔͷ΋ۤख w ίʔυͷຊ࣭తͳ ໰୊ʹਓ͕ؒ஫ྗ Ͱ͖Δߏਤʹ͢Δ IUUQTPCKFDUDMVCKQEPXOMPBE fi MFTQG1SPKFDU'BDJMJUBUJPO7BMVF1SJODJQMFQEG ʰϓϩδΣΫτϑΝγϦςʔγϣϯՁ஋ͱݪଇฤʱΑΓ

Slide 32

Slide 32 text

ιϑτ΢ΣΞ։ൃͰͷ3VCP$PQͷҐஔ෇͚ʹ΋ͳΔͩΖ͏ IUUQTBHJMFNBOJGFTUPPSHJTPFONBOJGFTUPIUNM

Slide 33

Slide 33 text

w 3VCP$PQͷσϑΥϧτͷίʔσΟϯάن໿ ͱ͋Θͳ͚Ε͹ΧελϚΠζͰ͖Δ w طʹνʔϜͷจԽ͕͋Ε͹ͦΕΛଚॏͰ͖Δ w ྫ͑͹.FUSJDT෦ॺͷ$PQʹैͬͯɺٯʹಡ ΈͮΒ͘ͳΔͷͰ͋Ε͹ɺແཧʹͦͷσϑΥ ϧτʹै͏ඞཁ͸ͳ͍ 3VCP$PQσϑΥϧτ͸܅ओͰ͸ͳ͍

Slide 34

Slide 34 text

 3VCP$PQͷ͸͡Ί͔ͨ

Slide 35

Slide 35 text

w ࣗ෼ͨͪͷελΠϧ͕ॏཁͳ৔߹͸ɺ %JTBMCFE#Z%FGBVMUUSVFʹઃఆͯ͠ɺ ݕ஌͍ͨ͠ϧʔϧΛ&OBCMFUSVFʹ͢Δઓུ w ελΠϧ΁ͷؾ͕࣋ͪগͳ͍ϝϯόʔߏ੒ͷ ৔߹ɺ3VCP$PQσϑΥϧτ͔Β߹Θͳ͍΋ ͷΛ&OBCMFGBMTF͋Δ͍͸มߋ͢Δઓུ ͸͡Ί͔ͨ͸νʔϜߏ੒ʹΑΔ

Slide 36

Slide 36 text

%JTBCMFE#Z%FGBVMUUSVF 3VCP$PQͷσϑΥϧτߏ੒ SE1BSUZͷϓϦηοτ ϧʔϧ͕ݫ͘͠ͳΔ طଘίʔυ͕͋Δͱ͖ͷಋೖͷ೉қ౓ ҧ൓͕ݕ஌͞ΕΔਪఆྔ ࣗ෼ͨͪͷϧʔϧ ؾʹೖΒͳ͍ϧʔϧΛ ΧελϚΠζ͢Δ ͋ͱͰߏ੒͢Δ ྫ͑͹1VMM3FRVFTUͰͷϨϏϡʔʹ ج͍ͮͯಉ͡ࢦఠ͕ͳ͍Α͏ߏ੒͢Δ %3: ⭐ ⭐ ⭐ ⭐ελʔτ஍఺ SEQBSUZ੡ͷϓϦηοτ ͷ··Ͱ΋ྑ͍͠ߏ੒ ͯ͠΋ྑ͍ ࠷খߏ੒Ͱͷ࢝Ίํͷྫ 4UBOEBSE3VCZ ߏ੒ෆՄ  SVCPDPQSBJMT@DPO fi H ߏ੒Մ  SVCPDPQSBJMTPNBLBTF ߏ੒Մ

Slide 37

Slide 37 text

ߏ੒ͷ࣮ફͱݟฉ

Slide 38

Slide 38 text

w 3VCP$PQࣗମͰ3VCP$PQ͕࢖ΘΕ͍ͯΔ w σϑΥϧτʹ͍ۙઃఆ͕ద༻͞Ε͍ͯΔ w ͔ͭͯ.FUSJDT"CD4J[F͸.BY͕ͩͬͨ ʹߋ৽͞Εͨ SVCPDPQSVCPDPQ  w σϑΥϧτ஋͕ଥ౰ͳదਖ਼஋ͱ͸ݶΒͳ͍ ߏ੒ྫ SVCPDPQSVCPDPQ

Slide 39

Slide 39 text

w ೥Ͱ ਓͷ։ൃऀ͕ؔΘ͍ͬͯΔେܕ ϓϩμΫτ w %JTBCMFE#Z%FGBVMUUSVFͱ͞Ε͍ͯΔ w ଟ਺͔Βͷ13ʹରͯ͠ɺϨϏϡʔࢦఠΛͨ͠ $PQΛ༗ޮʹ͢Δ܏޲ʹ͋Δ w ಉ͡ࢦఠΛ܁Γฦ͠ਓ͕ߦΘͳ͍ͨΊͷ࢖͍ํ ߏ੒ྫ SBJMTSBJMT

Slide 40

Slide 40 text

w UNN͔ΒϝϯςφʔΛҾ͖ܧ͍ͩϓϩμΫτ w -41Λ࢖͍͔ͨͬͨ͜ͱ΋͋Γಋೖ w %JTBCMFE#Z%FGBVMUUSVFͱ͍ͯ͠Δ͕޷ΈͰ ෼͔ΕΔ4UZMF෦ॺҎ֎͸֓Ͷ༗ޮԽ͍ͯ͠Δ w 4UZMF͸طଘίʔυଚॏΛجຊͱͯ͠ɺܯࠂͷ ͏ͪؾʹͳΔ΋ͷͷΈΛ༗ޮԽͨ͠ ߏ੒ྫ UNNUFTURVFVF

Slide 41

Slide 41 text

w େࡕ3VCZձٞ޲͚ʹεΫϥον࣮૷ͨ͠(FN w /FX$PQTFOBCMFͰ৽͍͠$PQΛ༗ޮԽ w .FUSJDT෦ॺ͸·͖ͬ͞ʹ&OBCMFEGBMTFʹͨ͠ w -JOU"NCJHVPVT0QFSBUPS1SFDFEFODF͸ઈڐͷ $PQͳͷͰແޮԽ VQTUSFBNͰQFOEJOH  w ࢖ͬͯ߹Θͳ͍4UZMFߏ੒Λ͍͔ͭ͘มߋͯ͠Δ ߏ੒ྫ LPJDNJOJGZSC

Slide 42

Slide 42 text

w ࣗ෼͕ΧελϚΠζߏ੒ͯ͠ΔϓϩδΣΫτྫ w SVCPDPQSBJMT@DPO fi HϕʔεͰͷɺӬ࿨ۘ੡ ࣾ಺FTBJPڞ༗ ϧʔϧͷԣஅద༻ͳͲ w ྑ໊͍લ͕෇͍ͨΒ(FNԽͯ͠ྑ͍͚ΕͲ w ΦϯϥΠϯٕज़ސ໰αʔϏεͱ͍͏΋ͷ͕͋Δ ͨΊɺ͝׆༻͍ͩ͘͞ ߏ੒ྫ ͓࢓ࣄϓϩδΣΫτྫ

Slide 43

Slide 43 text

w Ͳͷߏ੒ྫ΋σϑΥϧτͷ··࢖͍ͬͯͳ͍ w 3VCP$PQࣗମ͑͞΋ʂ w ॻ͖ͮΒ͍ɺ͔͑ͬͯಡΈͮΒ͍ͱࢥͬͨΒ 3VCP$PQͷઃఆΛٙͬͯΈΔͷ΋ͻͱͭ w 3VCP$PQʹै͏ͷ͕໨తʹͳΔͱຊ຤స౗ w ͢ͰʹνʔϜͷจԽ͕͋Ε͹ͦΕΛଚॏ͢Δ ӡ༻͕࠷্ྲྀ

Slide 44

Slide 44 text

w ςετΧόϨοδ΁ͷύϥυοΫεͷΑ͏ʹ ܯࠂΛফ͢͜ͱ͕໰୊ղܾͱ͸ݶΒͳ͍ w .FUSJDT"CD4J[Fͷܯࠂফ͕͠໨తʹͳΓɺ ຊ࣭తͰͳ͍ϝιουநग़ΛߦͬͨΓɺ -BZPVU-JOF-FOHUIආ͚ʹ໊લΛ୹ͯ͘͠ Χϥϑϧͳ໋໊ΛࣦΘͳ͍Α͏Ͱ͖ΔͱΑ͍ ܯࠂফ͠Λ໨తͱͨ͠ίʔυมߋ͠ͳ͍

Slide 45

Slide 45 text

मޗ͞Μ͔ΒͷΦϑΝʔ IUUQTUXJUUFSDPNNPSJNPSJIPHFTUBUVT ͜Ε͔Β3VCP$PQΛಋೖ͞ΕΔํ΍ɺಋೖ ͍ͯ͠Δ͚ΕͲ΋σϑΥϧτʹ͍ۙઃఆͰ 3VCP$PQͷ͍͍ͳΓͰ͔͑ͬͯಡΈʹ͍͘ Α͏ͳमਖ਼Λͯ͠͠·͍ͬͯΔํʹɺ͜͏͍ ͏෩ʹ࢖͏ͱ͍͍Αͱ͍͏ώϯτʹͳΔΑ ͏ͳ͓࿩Λ͍͚ͨͩΕ͹ͱࢥ͍ͬͯ·ͨ͠ σϑΥϧτͱͷڑ཭ײͱΧελϚΠζʹ͍ͭͯ఻Θ͖ͬͯͨʁ

Slide 46

Slide 46 text

ίʔυϕʔε͕ େ͖͍ରॲࣄྫ

Slide 47

Slide 47 text

w SVCPDPQBVUPHFODPO fi HͰޙճ͠ʹ͢Δ w SVCPDPQEJTBCMFVODPSSFDUBCMFΛ࢖ͬͯ ΦʔτίϨΫτΛͭͭ͠ɺαϙʔτ͞Ε͍ͯ ͳ͚Ε͹SVCPDPQUPEPΛࣗಈ෇༩ͤ͞Δ w ͜ΕΒެࣜػೳͰ͸ͳ͘HSZHFNΛ࢖͏ͱ ͍͏બ୒΋͋Δʁ ్தಋೖͷ࢝Ίํ͍Ζ͍Ζ Ԧಓฤʁ

Slide 48

Slide 48 text

w SVCPDPQGPSNBUP ff FOTFTΛ࢖ͬͯܯࠂͷ ଟ͍ϥϯΩϯάॱʹΦʔτίϨΫτΛߟ͑Δ w ಉ྅TXBNQͱͷPO͔ΒΦʔτίϨΫτ ͷαϙʔτ༗ແ΋දࣔ͞ΕΔΑ͏ʹͨ͠ Өڹ͕େ͖͘ॱʑʹద༻͍ͨ͠ͱ͍͏ཁ๬

Slide 49

Slide 49 text

w SVCPDPQEJTBCMF.FUSJDT"CD4J[Fͱ͍ͬ ͨίϝϯτΞϊςʔγϣϯΛ࢖͑Δ w SVCPDPQZNMͷ&YDMVEFࢦఆͯ͠আ֎ɺ͋Δ ͍͸SVCPDPQ@UPEPZNMͷ&YDMVEFࢦఆͰҰ ࣌తʹআ֎Ͱ͖Δ ։ൃӡ༻࣌͸ແཧͤͣճආͰ͖Δ

Slide 50

Slide 50 text

EJTBCMF UPEP ίϝϯτͷτϨʔυΦϑ def complex_method # rubocop:disable Metrics/AbcSize complex_code ... end w ߦ຤ίϝϯτ͸FOBCMFίϝϯτ͕ෆཁ͕ͩɺHJUCMBNFʹऑ͍ EJTBCMFίϝϯτΛফͤΔݟཱ͕ͯͳ͍৔߹ʹ࢖͑Δɻ ࣮૷͕มΘΓͦ͏ͳ"CD4J[Fʹ͸ෆ޲͖ɻ # rubocop:todo Metrics/AbcSize def complex_method complex_code ... end # rubocop:enable Metrics/AbcSize w ൣғίϝϯτ͸HJUCMBNFʹڧ͍൓໘ͰFOBCMFίϝϯτ͕ඞཁ EJTBCMFίϝϯτΛফͤΔݟཱ͕ͯ͋Δ৔߹ʹ༗༻ɻ ಛʹҙࢤΛ͍ࣔͨ͠৔߹͸SVCPDPQUPEPͰ໌ࣔɻ

Slide 51

Slide 51 text

w ಉ͡$PQʹର͢ΔSVCPDPQEJTBCMFίϝϯτ ͕සग़͍ͯ͠ΔΑ͏Ͱ͋Ε͹ɺͦ΋ͦ΋ͦͷ $PQΛ༗ޮԽ͍ͯ͠Δҙຯ͸͋Δ͔ʁ w SVCPDPQZNMͰɺ౰֘$PQΛ&OBCMFGBMTF ʹ͢Δݕ౼͸ͻͱͭͷखཱͯ ͦ΋ͦ΋࿦

Slide 52

Slide 52 text

 ΦʔτίϨΫτ΁ͷߟ͑ํ

Slide 53

Slide 53 text

w rubocop -aΦϓγϣϯ͸ΦʔτίϨΫτʹ Αͬͯඇޓ׵͕ੜ͡ͳ͍ ҆શͳ $PQʹݶఆ͠ ࣮ͯߦ͢Δ w rubocop -AΦϓγϣϯ͸ɺِཅੑɺҙਤత ʹΑΒͣৼΔ෣͍͕มΘΓ͏Δɺ$PQΛؚΉ͢ ΂ͯͷ ҆શͰͳ͍ ΦʔτίϨΫτΛ࣮ߦ͢Δ छྨͷΦʔτίϨΫτ

Slide 54

Slide 54 text

w ޡղΛڪΕ͍ͣ͏ͳΒɺΦʔτίϨΫτ͸ ޿ٛͷϦϑΝΫλϦϯάࢧԉπʔϧ w ΦʔτίϨΫτΛ࢖͏৔߹͸ςετॏཁ w ϦϑΝΫλϦϯά͸ج൫ͱͳΔ࠶ݱՄೳͳ ςετίʔυ͕͋ͬͯ੒Γཱͭ ϦϑΝΫλϦϯάͷࣗಈԽ ΦʔτίϨΫτͰγεςϜ͕յΕͯྦ໨ʹͳΒͳ͍Α͏ʹ

Slide 55

Slide 55 text

w ΦʔτίϨΫτͷͨΊʹ3VCP$PQΛ࢖ͬͯ ͍Δ w ෳࡶͳίʔυΛΦʔτίϨΫτ͍ͯ͢͠͝ w ΦʔτίϨΫτͰյΕΔ͜ͱ͕͋Δ ΦʔτίϨΫτ΁ͷϢʔβʔͷ੠

Slide 56

Slide 56 text

w ख࡞ۀͰมߋ͢Δͷ͸େมͳͷͰɺ౰ॳ͸ खܰͳαϙʔτఔ౓Ͱఏڙ͍ͯ͠Δͭ΋Γ ͩͬͨ ιʔεࣦ೦ͷCCBUTPWஊ  w ΦʔτίϨΫτΛͦ͜·Ͱ৴༻͠ͳ͍ํ͕ ྑ͍ͱࢥ͍ͬͯͯɺSVCPDPQBͷίʔυ͕ ਖ਼ٛͱ͍͏ѻ͍ʹ͢΂͖Ͱͳ͍ ࢲͷݟղ ΦʔτίϨΫτ΁ͷ։ൃऀͷ੠

Slide 57

Slide 57 text

w ΦʔτίϨΫτίʔυΛਖ਼͍͠ͱܾΊͣɺ ࣗ෼ͷظ଴͢Δίʔυͱҧ͑͹खΛೖΕΔ w ςϯϓϨʔτੜ੒͞Εͨίʔυ΍ɺίϚϯ υϓϩϯϓτʹΑͬͯ"*Ͱੜ੒͞Εͨίʔ υ͸ਆ੟ෆՄ৵ͷίʔυͰ͸ͳ͍ͷͱಉ͡ ΦʔτίϨΫτίʔυΛۚՊۄ৚ʹ͠ͳ͍ πʔϧ͸ϓϩηεʹ͓͚Δબ୒ͷͻͱͭͰ͋ΓɺϓϩδΣΫτʹ࢒Δͷ͸݁Ռͷίʔυ

Slide 58

Slide 58 text

w -BZPVU-JOF-FOHUIͷΦʔτίϨΫτʹ ΑͬͯɺંΓฦ͞ΕͨҎԼͷίʔυ͸ಡΈ ΍͍͔͢Ͳ͏͔ߟ͑Δ͜ͱ͕Ͱ͖ΔͩΖ͏ ΦʔτίϨΫτ͞Εͨίʔυ΁ͷٙ໰ ΦʔτίϨΫτͷ࣮૷౎߹ ͰͷંΓฦ͕͠ద༻͞Εͯ ͍Δ͚ͩͳͷ͕֞ؒݟ͑Δ

Slide 59

Slide 59 text

w Bͱ"ͷ͍ͣΕʹͯ͠΋ɺͦ΋ͦ΋ͷΦʔ τίϨΫτࣗମͷόάͱ͍͏ͷ͸ɺେ͖͘ ҎԼͷͭ͋Δ 3VCP$PQ΋ϓϩάϥϜ  w *OWBMJE4ZOUBY΁ͷίʔυมߋ͸ৗʹόά w ޓ׵ੑΛظ଴ͯ͠rubocop -aΛ࢖ͬͨͷ ʹৼΔ෣͍͕มΘΔίʔυ΁ͷมߋ͸όά ΦʔτίϨΫτͷόάՄೳੑ

Slide 60

Slide 60 text

l ϦϑΝΫλϦϯάΛߦ͏ͱ͖ɺ ࠷ॳʹ͢Δ͜ͱ͸ৗʹಉ͡Ͱ ͢ɻର৅ͱͳΔίʔυʹ͍ͭͯ ͖ͪΜͱͨ͠ςετ܈Λ࡞Γ্ ͛Δ͜ͱͰ͢ɻςετ͸ෆՄܽ Ͱ͢ɻ ੬͖΋ͷΑɺೊͷ໊͸ιϑτ΢ΣΞ ʰϦϑΝΫλϦϯάୈ൛ʱΑΓ

Slide 61

Slide 61 text

w ΦʔτίϨΫτ͕࠷΋ྗΛൃش͢Δ৔ॴ͸ ϦΞϧλΠϜॲཧͷ-41ʹͳͬͨ ࢲݟ  w ಛʹίʔυϑΥʔϚολʔͱͯ͠ͷ-41͸ ։ൃମݧΛม͑Δ ΋ͪΖΜҧ൓ݕ஌΋  w 3VCP$PQ΍4UBOEBSEͷ૊ΈࠐΈ-41  SVCZMTQͳͲ͕͋Δ ࣌୅͸-41ͰͷΦʔτίϨΫτ

Slide 62

Slide 62 text

-41σϞ

Slide 63

Slide 63 text

ϑΥʔϚοτࡁΈίʔυ ·ͣେ͖ͳҧ࿨ײ͕ͳ͍Ͱ͋Ζ͏ϑΥʔϚοτ͞ΕͨίʔυΛݟͯΈ·͢

Slide 64

Slide 64 text

ϑΥʔϚοτΛ่͠·͢ ࣍ʹ͜Μͳίʔυ͕དྷͨΒࠔΔͱɺಡΊͳ͍ͱ͸͜͏͍͏ͳίʔυΛࣔ͠·͢

Slide 65

Slide 65 text

-41ʹΑΔϑΥʔϚοτ ࠷ޙʹ-41Λ࢖ͬͯɺΤσΟλ্ͰϑΥʔϚοτ͞ΕΔ͜ͱΛݟͯΈ·͢

Slide 66

Slide 66 text

w ίʔσΟϯάத͸-41ͰฤूதϑΝΠϧΛ ϦΞϧλΠϜॲཧͯ͠ɺԣஅͨ͠Ұׅॲཧ Λ͍ͨ࣌͠͸ίϚϯυϥΠϯͱ࢖͍෼͚Δ w ؀ڥࠩҟ͕ى͖ͳ͍໳൪ͱͯ͠$*Ͱ࢖͏ w ฤू࣌ΦʔτίϨΫτͷ-41͸SVCPDPQB ͱ͍͏ෆཁͳ࡞ۀϩάίϛοτආ͚ʹͳΔ -41ͱίϚϯυϥΠϯͱ$*

Slide 67

Slide 67 text

 3BJMT ͱ3VCP$PQ

Slide 68

Slide 68 text

SBJMTSBJMT "EE BWFSZCBTJD 3VCPDPQCZEFGBVMU

Slide 69

Slide 69 text

%))ͷ͓ؾ͕࣋ͪ٧·͍ͬͯΔ ࠷ऴతʹ3VCPDPQΛड͚ೖΕ·͕ͨ͠ɺελΠϧͷڧ੍͸ඇৗʹܰ͘อͭ ͜ͱ͕৚݅Ͱ͢ɻ͜Ε͸ࣗసंஔ͖৔ͷٞ࿦ʹͳΓ͔Ͷͳ͍ͷͰɺݸਓత Ͱಠࣗͷ޷Έʹج͍ͮͯελΠϧͷڧ੍Λ཈͑Α͏ͱߟ͍͑ͯ·͢ɻ

Slide 70

Slide 70 text

$ rails new example && cd $_ $ rails new example && cd $_ $ cat Gemfile | grep rubocop # Omakase Ruby styling [https://github.com/rails/rubocop gem "rubocop-rails-omakase", require: false 3BJMTͰͷSBJMTOFX $ rails new example && cd $_ $ cat Gemfile | grep rubocop # Omakase Ruby styling [https://github.com/rails/rubocop gem "rubocop-rails-omakase", require: false $ cat .rubocop.yml # Omakase Ruby styling for Rails inherit_gem: { rubocop-rails-omakase: rubocop.yml } # Overwrite or add rules to create your own house style # # # Use `[a, [b, c]]` not `[ a, [ b, c ] ]` # Layout/SpaceInsideArrayLiteralBrackets: # Enabled: false

Slide 71

Slide 71 text

SVCPDPQSBJMTPNBLBTF w %))ۘ੡ͷ ઃఆϑΝΠϧ w ࢖͍ํʹ͍ͭͯ PNBLBTF 🤔 w HPGNUͷΑ͏ͳ ສਓૂ͍Ͱͳ͍

Slide 72

Slide 72 text

w 3VCP$PQͷσϑΥϧτΑΓ΋ɺ͸Δ͔ʹ ܰྔͳɺग़ൃ఺ͱ΋ͳΓ͏Δઃఆ w SBJMTSBJMTϦϙδτϦͷSVCPDPQZNMઃఆ ͱҟͳΔ SBJMTSBJMTͷߏ੒͸தྔڃ  w ͭ·ΓϑϨʔϜϫʔΫϨΠϠʔͱΞϓϦ έʔγϣϯϨΠϠʔͰߏ੒͸ဃ཭͍ͯ͠Δ બ୒ࢶͷͻͱͭͱͳΔߏ੒

Slide 73

Slide 73 text

%JTBCMFE#Z%FGBVMUUSVF 3VCP$PQͷσϑΥϧτߏ੒ SE1BSUZͷϓϦηοτ ϧʔϧ͕ݫ͘͠ͳΔ طଘίʔυ͕͋Δͱ͖ͷಋೖͷ೉қ౓ ҧ൓͕ݕ஌͞ΕΔਪఆྔ ࣗ෼ͨͪͷϧʔϧ ؾʹೖΒͳ͍ϧʔϧΛ ΧελϚΠζ͢Δ ͋ͱͰߏ੒͢Δ ྫ͑͹1VMM3FRVFTUͰͷϨϏϡʔʹ ج͍ͮͯಉ͡ࢦఠ͕ͳ͍Α͏ߏ੒͢Δ %3: ⭐ ⭐ ⭐ ⭐ελʔτ஍఺ SEQBSUZ੡ͷϓϦηοτ ͷ··Ͱ΋ྑ͍͠ߏ੒ ͯ͠΋ྑ͍ ࠷খߏ੒Ͱ࢝ΊΔબ୒ࢶͷͻͱͭ 4UBOEBSE3VCZ தྔڃ  SVCPDPQSBJMT@DPO fi H தྔڃ  SVCPDPQSBJMTPNBLBTF ܰྔڃ

Slide 74

Slide 74 text

w SVCPDPQSBJMTPNBLBTFຊମͦͷ΋ͷ΁ͷఏҊ ͸/P5IBOLZPVͱ͞Ε͍ͯΔ w ͦͷ··࢖ͬͯྑ͍͠ΞϓϦଆͰߋ৽ͯ͠΋ྑ͍ w ݩ͋ΔจԽʹΑΔϧʔϧ͕͋Ε͹ɺؾʹͤͣε ΫϥονͰઃఆΛ࡞ΔͳΓ࣋ͬͯ͘ΔͳΓ͢Ε͹ ྑ͍ SVCPDPQSBJMTPNBLBTFͷಛ௃ ݸਓతʹ%))ͷ3VCZͷهड़ྗͷߴ͞΁ͷϦεϖΫτͱݱ࣮ͷଥڠ఺Λײ͡Δ

Slide 75

Slide 75 text

$ rails new example && cd $_ $ cat Gemfile | grep rubocop # Omakase Ruby styling [https://github.com/rails/rubocop gem "rubocop-rails-omakase", require: false $ cat .rubocop.yml # Omakase Ruby styling for Rails inherit_gem: { rubocop-rails-omakase: rubocop.yml } # Overwrite or add rules to create your own house style # # # Use `[a, [b, c]]` not `[ a, [ b, c ] ]` # Layout/SpaceInsideArrayLiteralBrackets: # Enabled: false 3BJMTͷPNBLBTF͸Ͳ͏ʁ Ͳ͏ͳΜͩΖ͏͔ʁͱ͍͏ σϑΥϧτ͚ͩΕͲɺ Ϣʔβʔ΁ઃఆΛଅͨ͢Ί Θ͟ͱ΍ͬͯΔʁ σϑΥϧτ

Slide 76

Slide 76 text

SVCPDPQSBJMTPNBLBTFY34QFD w PNBLBTF͸σϑΥϧτSVCPDPQNJOJUFTU w SVCPDPQZNMʹSFRVJSFSVCPDPQSTQFD ͱ34QFD&OBCMFEUSVFΛ௥ه͢Ε͹ɺ σϑΥϧτ༗ޮͷ34QFD$PQT͕༗ޮԽ inherit_gem: { rubocop-rails-omakase: rubocop.yml } require: - rubocop-rspec RSpec: Enabled: true ಉ྅͔Βࣾ಺4MBDLͰ࣭໰͕͋ͬͨ಺༰

Slide 77

Slide 77 text

w 5IF3BJMT%PDUSJOFͷͻͱͭ w ϑϨʔϜϫʔΫ͕͍͍ࣔͩͨ͢ ্ख͍͘͘PNBLBTFͱ͍͏Α ΓɺSVCPDPQSBJMTPNBLBTF ͸ϢʔβʔʹؙͬͱPNBLBTF ͍ͯ͠Δײ͕͋Δ(JO[BSCઆ w ͭ·Γɺ3VCZίʔσΟϯάε λΠϧͷσϑΥϧτͮ͘Γ͸೉ ͍͠  3VCZѪͷߴ͞ 5IFNFOVJTPNBLBTF

Slide 78

Slide 78 text

3BJMTY3VCP$PQ 1SP5JQT

Slide 79

Slide 79 text

CJOSBJMTHͰίʔυੜ੒࣌ʹࣗಈमਖ਼ - #config.generators.apply_rubocop_autocorrect_after_generate! + config.generators.apply_rubocop_autocorrect_after_generate! w DPO fi HFOWJSPONFOUTEFWFMPQNFOUSCͰ ίϝϯτΞ΢τ͞Ε͍ͯΔ BQQMZ@SVCPDPQ@BVUPDPSSFDU@BGUFS@HFOF SBUFΛ༗ޮʹ͢ΔCJOSBJMTHͨ͠ίʔυʹ ରͯ͠ΦʔτίϨΫτద༻ͱͳΔ SBJMTSBJMTʹσϑΥϧτແޮͷཧ༝͸ৄ͍͕͠جຊ༗ޮͰྑ͍ͱࢥ͏

Slide 80

Slide 80 text

(JU)VC"DUJPOTͰͷσϑΥϧτ$*ઃఆ w ݕ஌ͨ͠ҧ൓Λ(JU)VCʹίϝϯτ͢Δ CJOSVCPDPQGHJUIVCΦϓγϣϯ͕ σϑΥϧτͰࢦఆ͞Ε͍ͯΔ # .github/workflows/ci.yml jobs: lint: # snip - name: Lint code for consistent style run: bin/rubocop -f github ͜Ε΋·ͨ޷Έ͕෼͔ΕΔ͔΋͠Εͳ͍

Slide 81

Slide 81 text

3BJMT ͷσϑΥϧτ-41 w SBJMTOFXͷEFWDPOUBJOFSΦϓγϣϯͰ HJUIVCDPNSBJMTEFWDPOUBJOFSϦϙδτ Ϧ͕ݩʹͳ͍ͬͯΔΠϝʔδ͕࢖ΘΕΔ w 3BJMT%FW$POUBJOFSʹࠝแ͞Ε͍ͯΔ TIPQJGZSVCZMTQ͕࢖ΘΕΔ࢓૊Έʹͳͬ ͍ͯΔ ೖ໳ऀ΁ͷηοτΞοϓʹ΋қ͍࣌͠୅

Slide 82

Slide 82 text

 σϑΥϧτͷະདྷΛߟ͑Δ

Slide 83

Slide 83 text

मޗ͞Μ͔ΒͷΦϑΝʔ IUUQTUXJUUFSDPNNPSJNPSJIPHFTUBUVT ͜Ε͔Β3VCP$PQΛಋೖ͞ΕΔํ΍ɺಋೖ ͍ͯ͠Δ͚ΕͲ΋σϑΥϧτʹ͍ۙઃఆͰ 3VCP$PQͷ͍͍ͳΓͰ͔͑ͬͯಡΈʹ͍͘ Α͏ͳमਖ਼Λͯ͠͠·͍ͬͯΔํʹɺ͜͏͍ ͏෩ʹ࢖͏ͱ͍͍Αͱ͍͏ώϯτʹͳΔΑ ͏ͳ͓࿩Λ͍͚ͨͩΕ͹ͱࢥ͍ͬͯ·ͨ͠ ͜͜·Ͱͷ࿩Λ౿·͑ͯσϑΥϧτͷະདྷΛۭ૝ͯ͠Έ·͢

Slide 84

Slide 84 text

w σϑΥϧτ͕ݫ͗͢͠Δ w ݫ͍͠కΊ෇͚͕ྑ͍ͱ͍͏੠΋͋Δ w σϑΥϧτͰબ୒͞ΕͨελΠϧ͕͋Θͳ͍ w ରۃ͕࣠͋Δ΋ͷ͸೉͍͠ɻྫ͑͹γϯάϧΫΥʔτ೿ͱμϒϧ ΫΥʔτ೿ͷ߅૪͸ऴΘΒͳ͍ɻ3VCZ͕޷͖ͳͷ͸Θ͔ͬͨɻ w σϑΥϧτͰ༗ޮͷϧʔϧ͕ଟ͗͢Δ w ͜Ε͸ͦ͏ɻؤுͬͯݮΒ͢׆ಈΛ͍ͯ͠Δ͕ɺ͍ͨ΁Μɻ σϑΥϧτ΁ͷݱ࣮ͷ੠

Slide 85

Slide 85 text

͍ͪͲσϑΥϧτʹ ͳͬͨ΋ͷ͸खڧ͍

Slide 86

Slide 86 text

ϝϯςφʔ͙͠͞

Slide 87

Slide 87 text

.*/"48"/ ΁ͷෛ୲ΛݮΒ͢ ඞཁҎ্ͷΧελϚΠζઃఆ

Slide 88

Slide 88 text

w ཧ૝ͱ͢ΔσϑΥϧτ͸5IF3BJMT%PDUSJOF ͷʮ5IFNFOVJTPNBLBTFʯͷੈք؍ w ͍͍ͩͨͷ৔߹͸σϑΥϧτͰ͏·͍͘͘ w ͨ·ʹ ͋Θͳ͍෦෼͸ΧελϚΠζͰ͖Δ w SVCPDPQSBJMTPNBLBTF͸੯͍͠ શͯԕ͖ཧ૝ڷ

Slide 89

Slide 89 text

Ͳ͏͍͏ߟ͑ํʹ ࢲ͸ج͍ͮͯΔʁ

Slide 90

Slide 90 text

w ίϯτϦϏϡʔλ΁ͷ Ϛʔδ΁ͷ ຬ଍ײ Ͱ͸ͳ͘ɺϓϩμΫτ΁ͷϢʔβʔͷ࢖͍উ खΛॏࢹ͢Δ w ͨͱ͑͹ಛఆͷϓϩδΣΫτͷ޷Έ͕σϑΥ ϧτ޲͖ͱ͸ݶΒͳ͍ $PQDPQͱ͍͏ϝλ׆ಈ Ϋϩʔζ͸৺ॏ͍Ͱ͕͢Ϣʔβʔͷ൵໐Λ๷͙ͷΛ༏ઌ

Slide 91

Slide 91 text

ݱߦσϑΥϧτ΁ͷݟղ ఩ਓ ࢻਓ w σϑΥϧτϧʔϧ͸΋ͬͱ؇ͯ͘ྑ͍ w ΋ͬͱࣗ༝౓͕͋Δͱࣗવຯ ָ͠͞ ͋Δ w ʮݫ͗͢͠ͳʯϧʔϧͷఏҊ͸͓فΓ͢Δ ౓߹͍

Slide 92

Slide 92 text

w ϧʔϧͱͯ͠ݫ͗͢͠Δ w ಠࣗϧʔϧײ͕ڧ͍ w ِཅੑ͕ଟ͍͜ͱ͕ࣗ໌ͳ΋ͷ w ϚʔδޙʹϢʔβʔͷ൵໐͕େ͖ͦ͏ͳ΋ͷ 3VCP$PQຊମʹड͚ೖΕʹ͍͘৽ϧʔϧ ͜ΕΒ͸ຊମͰ͸ͳ͘SEύʔςΟʔͰͷެ։Λ঑Ί͍ͯΔ ఏҊऀͰ͸ͳ͘ଟ༷ͳਓ͕ ࢖͏σϑΥϧτͱͯ͠࢖͍ উख͕ଥ౰ͳఏҊ͔Ͳ͏͔

Slide 93

Slide 93 text

w 3VCP$PQͱͯͦ͠ͷ··ͷσϑΥϧτͰ ͍͍ײ͡ʹ࢖͑ΔઃఆΛ༻ҙ͍ͨ͠ ເ  w SVCPDPQSBJMTPNBLBTF͸ྑׂ͍Γ੾Γͷ ͻͱ͚ͭͩͲ5IF%FGBVMUͰ͸ͳ͍ w HPGNUͷΑ͏ͳ5IF%FGBVMUΛ༻ҙͰ͖ͳ ͍ͷͰ͍͔ͭ͘ͷΦϓγϣϯΛఏڙʁ σϑΥϧτ͸ॏཁ͚ͩͲ

Slide 94

Slide 94 text

" ΑΓྑ͍σϑΥϧτΛٻΊͯ

Slide 95

Slide 95 text

w ϓϩάϥϚʔͷϝϞϦ؅ཧ͔ॲཧܥͷ($ͷ ୒Ͱͳ͘ɺίϯύΠϥͰϝϞϦ؅ཧΛղܾ ͢Δ3VTUͷಓ w ੩తܕ෇͚ͷܕԸܙ͔ಈతܕ෇͚ͷखܰ͞ͷ ୒Ͱͳ͘ɺܕఆٛϑΝΠϧͰ྆औΓΛ໨ࢦ ͢3#4ͷಓ ୈࡾͷղܾ

Slide 96

Slide 96 text

w HPGNUͷΑ͏ͳ୒ҰϑΥʔϚοτͱϢʔβʔ ΧελϜͷߏ੒ͷ୒Ͱ͸ͳ͘ɺͳΜͱͳ͘ ೲಘײͷ͋Δʮ͍͍ͩͨ͏·͍͘͘ߏ੒ʯ w 3VCP$PQͰݕ౼͞ΕͯΔϓϦηοτ͕ͦΕ ʹ͍͕ۙʮ୭͔ͷዞҙੑʯ͔Βൈ͚ग़ͤͳ͍ 3VCP$PQͰ΋ୈࡾͷղܾ

Slide 97

Slide 97 text

Ѫ৘͋Δዞҙੑ͕ ղܾ΁ͷಓʁ

Slide 98

Slide 98 text

w ίϛϡχςΟͷҙࢥܾఆͱผʹ༏͍͠ಠࡋऀͷΑ ͏ͳݸਓʹΑΔҙࢥܾఆϞσϧ w ੨໦ๆ࿠͞Μͷʮ3VCZͷίʔσΟϯάελΠϧʯ w લాमޗ͞Μͷʮ3VCZίʔσΟϯάن໿ʯ w ۩ମతͳʮಛఆͷ୭͔ʯॏཁͰ͸ʁ FH0OL$PQ ଥ౰ͦ͏ͳʮ୭͔ʯϧʔϧʁ

Slide 99

Slide 99 text

w ͍͍ͩͨ͏·͍͖ͦ͘͏ʁ .BU[$PQ

Slide 100

Slide 100 text

w ·ͭ΋ͱ͞Μ؂म ͷϓϦηοτ w 3VCZͷ਌ͱ͍͏͜ͱ͸Ѫ৘͸ੈքҰ   w DisabledByDefault: trueϕʔεͷ֦ுHFN w ϧʔϧ $PQ ͸ແݶʹ૿͍͍͑ͯͬͯΔͷͰɺ ϛχϚϜͷελʔλʔΩοτΑ͏ͳ΋ͷʹͳΓ ͦ͏ .BU[$PQ͕બ୒Ͱ͖Δͱೲಘʁ

Slide 101

Slide 101 text

w େਓʹͳͬͨ3VCZΛݟकΔ.BU[$PQͷΑ͏ͳݖ ҖͷσϑΥϧτ͕͋Δͱ޾ͤͳ3VCZJTU͸͍ͦ͏ w ͱ͸͍͑ϧʔϧͷऔࣺબ୒͕͍ͨ΁Μͦ͏ w 3VCP$PQϓϩμΫτͱͯ͠͸αϙʔτελΠϧ ͷͻͱͭͱݟ၏͠3VCP$PQͷ఩ֶΛຬ଍ͤ͞Β ΕΔ 3VCP$PQ͕·ͩݟ͵ੈք 3VCP$PQ΁ͷ॓୊

Slide 102

Slide 102 text

lιϑτ΢ΣΞ͸ਓ͕ ਓͷͨΊʹ࡞͍ͬͯΔ 3VCP$PQͱ͍͏ιϑτ΢ΣΞͱਓͷରൺʹয఺Λ౰ͯΔͱผͷຯΘ͍͕͋Γ·͢Ͷ Software is made for people by people ฏು݈ࣇ &4. *OD$&0

Slide 103

Slide 103 text

νʔϜʹڞ௨ͷίʔσΟϯάඪ४ΛٻΊΔͷ͸೉͍͠࿩ͩΖ͏ɻ ϓϩάϥϚʔ͸ඇৗʹ߆Γ͕ڧ͘ɺதׅހͷҐஔΛม͑Δ΄Ͳ ͳΒࣙΊͯ͠·͏͔΋͠Εͳ͍ɻͨͩ͠ɺ ✦ 91ͱ͍͏Ξϓϩʔν͕ɺ൴ΒΛ੒ޭ͢ΔνʔϜͷҰһʹ͢Δ ՄೳੑΛߴΊΔͳΒɻ ͦͷ৔߹ɺελΠϧΛগ͠ۂ͛Δ͜ͱΛԀΘͳ͍͔΋͠Εͳ͍ɻ ͞ΒʹɺίʔσΟϯάඪ४͕ͳ͚Ε͹ɺ༨ܭͳຎࡲ͕ੜ͡ɺ ϖΞϓϩάϥϛϯά΍ϦϑΝΫλϦϯά͕ஶ͘͠஗͘ͳΔɻ $PEJOH4UBOEBSET 91&TU3PDLT

Slide 104

Slide 104 text

ϧʔϧ͸։ൃऀΛറΔͨΊͰ ͸ͳָ͘ʹ͢ΔͨΊʹ࢖͓͏