Slide 1

Slide 1 text

ָ͍͠υΩϡϝϯςʔγϣϯ Λ໨ࢦͯ͠ —RDoc֦ுػೳج൫ BuriKaigi 2025 OKURA Masafumi, 2025-02-01

Slide 2

Slide 2 text

͸͡Ίʹɿ͜ͷൃදʹ͓͚Δ༻ޠͷఆٛ • υΩϡϝϯτɿιʔείʔυʹίϝϯτͱͯ͠෇ਵ͢ΔλΠϓͷจ ॻɺREADMEͳͲ͸ݪଇతʹআ֎ • υΩϡϝϯςʔγϣϯɿυΩϡϝϯτͷू߹ʢݩʑͷҙຯʣɺ͋Δ͍ ͸υΩϡϝϯτΛهड़͢Δ͜ͱʢಠࣗͷҙຯʣ • υΩϡϝϯςʔγϣϯπʔϧɿهड़͞ΕͨυΩϡϝϯτΛਓؒʹΑͬ ͯར༻Մೳͳܗʹม׵͢Δπʔϧ • RDocɿRubyʹඪ४ఴ෇͞Ε͍ͯΔυΩϡϝϯςʔγϣϯπʔϧ

Slide 3

Slide 3 text

υΩϡϝϯτΛ ॻ͘ͷ͸ָ͍͠ Ͱ͔͢ʁ

Slide 4

Slide 4 text

ࢲ͸͋·Γ ָ͋͘͠Γ·ͤΜ :)

Slide 5

Slide 5 text

WHY?

Slide 6

Slide 6 text

ͳͥυΩϡϝϯτΛॻ͘ͷ͸ָ͘͠ͳ͍ͷ͔ • ίʔυΛॻ͘΄͏ָ͕͍͔͠Β • Θ͔Δ • ͨ͘͞Μॻ͔ͳͯ͘͸͍͚ͳ͍͔Β • ͳΜͱ͔Ͱ͖ΔͷͰ͸ʁ • ॻ͍ͨυΩϡϝϯτ͕໾ʹཱͭؾ͕͠ͳ͍͔Β • ໾ʹཱͭΑ͏ͳυΩϡϝϯτΛੜ੒Ͱ͖ͨΒʁ

Slide 7

Slide 7 text

ͨͷ͍͠υΩϡϝϯ ςʔγϣϯͷͨΊʹɺ υΩϡϝϯςʔγϣϯ πʔϧ͕Ͱ͖Δ͜ͱ

Slide 8

Slide 8 text

1. লྗԽ

Slide 9

Slide 9 text

2. ༗༻Խ

Slide 10

Slide 10 text

͋ͳͨ͸୭ʁ

Slide 11

Slide 11 text

ࣗݾ঺հ • ໊લɿେ૔խ࢙ʢ͓͓͘Β·͞;Έʣ • ॴଐɿϑϦʔϥϯε • ՝֎׆ಈɿKaigi on RailsɺTokyoWomen.rbɺRubygemsίʔυϦʔ σΟϯά෦ʢҎ্ओ࠵ʣɺOSS׆ಈʢGitHub Star ߹ܭ1000௒ʣ • ࢲͱBuriKaigiɿ2020೥ొஃʢinstance_evalʣɺ2022೥ొஃ ʢDSLʣɺ2024೥ొஃʢRubyʹBoolean͕ͳ͍ཧ༝ʣ

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

ָ͍͠υΩϡϝϯςʔγϣϯ Λ໨ࢦͯ͠—RDoc֦ுػೳج ൫ BuriKaigi 2025 OKURA Masafumi, 2025-02-01

Slide 16

Slide 16 text

Rubyist

Slide 17

Slide 17 text

Ruby

Slide 18

Slide 18 text

RDoc

Slide 19

Slide 19 text

RDocͱ͸ • Rubyʹඪ४ఴ෇͞Ε͍ͯΔʢผ్ͷΠϯετʔϧ͕ෆཁͳʣυΩϡϝϯςʔ γϣϯπʔϧ • HTMLυΩϡϝϯτΛੜ੒͢Δ`rdoc`ίϚϯυͱίϚϯυϥΠϯ͔ΒυΩϡϝ ϯτΛӾཡ͢Δ`ri`πʔϧΛಉࠝ • RDoc͕σϑΥϧτͰѻ͏ϑΥʔϚοτ͸`RDϑΥʔϚοτ`ͱݴ͏͕ɺRDoc ϑΥʔϚοτͱݺ͹ΕΔ͜ͱ΋͋Δ • Ruby on RailsͰ࠾༻͞Ε͍ͯΔଞɺRubyຊମ΋͜ͷه๏

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

΍΍͍͜͠࿩

Slide 22

Slide 22 text

YARD

Slide 23

Slide 23 text

YARDͱ͸ • Rubyͷඇඪ४υΩϡϝϯςʔγϣϯπʔϧ • ϥΠϒϥϦʹ͓͚ΔγΣΞ͸ѹ౗తʹߴ͍ • ಠࣗͷʢ@returnͷΑ͏ͳʣه๏Λ࣋ͭ • ͪͳΈʹ໊শ͸”Yay! A Ruby Documentation”ͷ಄ࣈޠ

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

υΩϡϝϯςʔγϣϯ πʔϧ ʢͱϑΥʔϚοτʣ ͕2ͭ͋Δʂ

Slide 26

Slide 26 text

RubyͷੈքͰ υΩϡϝϯςʔγϣϯ πʔϧ͕΍Δ΂͖͜ͱ

Slide 27

Slide 27 text

0. πʔϧͷ ౷߹

Slide 28

Slide 28 text

͓඼ॻ͖ • πʔϧͷ౷߹ • υΩϡϝϯςʔγϣϯͷলྗԽ • υΩϡϝϯςʔγϣϯͷ༗༻Խ

Slide 29

Slide 29 text

௨૗௿Իͱͯ͠ͷ ֦ுػೳج൫

Slide 30

Slide 30 text

0. πʔϧͷ ౷߹

Slide 31

Slide 31 text

RDoc or YARD

Slide 32

Slide 32 text

RDoc or YARD

Slide 33

Slide 33 text

ͳͥRDocͳͷ͔ • ඪ४ఴ෇͞Ε͍ͯΔͷͰผ్ͷΠϯετʔϧͳͲ͕ෆཁ • RDoc͸ͳ͘ͳΔ͜ͱ͸ͳ͍ • CRubyͷιʔείʔυ಺ͷυΩϡϝϯτΛղऍͰ͖Δͷ͸RDocͷΈ • YARDͷϝϯςφϯεঢ়گ͕ෆ҆ • େ͖Ίͷվળ΋࠷ۙ͸গͳ͍͠ɺϝϯςφϯε͸جຊݸਓ͕͍ͯ͠ Δ

Slide 34

Slide 34 text

Ͳ͏౷߹͢Δʁ

Slide 35

Slide 35 text

֦ுػೳج൫Ͱ ΍Γ͍ͨʂ

Slide 36

Slide 36 text

ͳ֦ͥுػೳج൫ͳͷ͔ • YARDؔ܎ͷػೳ͸ৗʹ࢖͏ͱ͸ݶΒͳ͍ • ֦ுػೳʹͯ͠औΓ֎͠Մೳʹ͢Δ • ຊମʹ͍ۙͱ͜ΖʹೖΕΔͱϝϯςφϯεΛࠔ೉ʹ͢ΔՄೳੑ͕͋Δ • YARDຊମͷίʔυΛ࢖͍ͨ͘ͳ͍ͷͰίʔυ͸1͔Βॻ͘ • ํ਑ΛܾΊΔࣗ༝͕͋Δ

Slide 37

Slide 37 text

֦ுػೳج൫ͷઃܭ • RDocͷطଘίʔυ಺͔ΒΠϕϯτΛൃՐͤ͞Δʢྫɿpost_parseʣ • ֤֦ுػೳ͸ΠϕϯτΛϦοεϯ͠ɺ؀ڥΦϒδΣΫτΛड͚औΓɺ มߋ͢Δ • ؀ڥΦϒδΣΫτ͸RDocຊମͷ৘ใ΍֤֦ுػೳ͔Βड͚औͬͨ σʔλΛอ࣋͢Δ • RDocͷطଘίʔυͰ೚ҙͷλΠϛϯάͰݱࡏͷ؀ڥΛࢀর͢Δ

Slide 38

Slide 38 text

֦ுػೳج൫ͰYARDΛRDocʹ౷߹͢Δ • ·ͣYARDύʔαʔΛ࡞Δ • खॻ͖ͱύʔαʔδΣωϨʔλʔͷ2ͭͷखஈ͕͋Δ͕ɺ͓ͦΒ͘खॻ͖ͷํָ͕ • ίϝϯτจࣈྻͷऔಘ͕ऴΘͬͨλΠϛϯάͰΠϕϯτΛൃՐ͢Δ • YARD֦ுػೳ͕ΠϕϯτΛϦοεϯ͠ɺ؀ڥΦϒδΣΫτ͔ΒίϝϯτจࣈྻΛऔ ಘ͢Δ • YARDύʔαʔͰίϝϯτจࣈྻΛύʔε͠ɺܕ৘ใͳͲΛऔಘͯ͠؀ڥΦϒδΣΫ τʹอଘ͢Δ

Slide 39

Slide 39 text

1. লྗԽ

Slide 40

Slide 40 text

υΩϡϝϯτΛ ॻ͘ͷ͸ ΊΜͲ͍͘͞…

Slide 41

Slide 41 text

υΩϡϝϯτͷΊΜͲ͍͘͞ɺ͋Δ͋Δ • `@example`తͳίʔυྫ͕௕͘ͳͬͯεΫϩʔϧ͠ͳ͍ͱ࣍ͷϝιο υʹͨͲΓண͚ͳ͍ • ϝιουͷ࢓༷͕ॻ͍ͯ͋Δ͚Ͳɺࡉ͔͍ͱ͜ΖΛ஌ΔͨΊʹ݁ہ࣮ ૷ͱςετίʔυΛಡΉ • ʲRubyݶఆʳҾ਺΍ฦΓ஋ͷܕΛυΩϡϝϯςʔγϣϯπʔϧݻ༗ ͷϑΥʔϚοτͰॻ͚͘ͲɺͦΕͱ͸ผʹܕπʔϧͷܕ΋͋Δ

Slide 42

Slide 42 text

໰୊1ɿ example͕௕͍

Slide 43

Slide 43 text

ղܾࡦ1ɿ example͸ ผϑΝΠϧʹ͢Δ

Slide 44

Slide 44 text

example͸ผͷϑΝΠϧʹ͢Δ • ϥΠϒϥϦͩͱ`examples`σΟϨΫτϦ͕͋Δ͜ͱ΋ଟ͍ͷͰɺͦ͜ ʹʮͲͷΫϥε΍ϝιουʹඥ෇͔͘ʯͷλά͕෇͚͹͍͚Δ͔΋ • ϓϩμΫτͩͱɺςετίʔυ͕࣮ࡍͷར༻ྫʹ͍ۙ৔߹͕ଟ͍ͷ ͰɺςετίʔυΛexampleͱͯ͠ར༻Ͱ͖ͳ͍͔ • ֦ுػೳͱͯ͠ʮσʔλιʔεʯͷ֓೦Λಋೖͯ͠ɺίϝϯτจࣈྻ Ҏ֎͔Βಘͨ৘ใΛ౷߹͍ͨ͠

Slide 45

Slide 45 text

໰୊2ɿ ݁ہίʔυ΍ ςετίʔυΛಡΉ

Slide 46

Slide 46 text

ղܾࡦ2ɿ ςετίʔυ͔Β υΩϡϝϯτΛ ੜ੒͢Δ

Slide 47

Slide 47 text

ςετίʔυ͔ΒυΩϡϝϯτΛੜ੒͢Δ • RubyͰ͸RSpecͱ͍͏ςεςΟϯάϥΠϒϥϦ͕޿͘࢖ΘΕ͍ͯΔ • RSpecʹ͸`—format documentation`ͱ͍͏Φϓγϣϯ͕͋Δ • exampleͷ৔߹ͱಉ༷ʹ֦ுػೳ͕RSpecΛσʔλιʔεͱͯ͠ར༻ ͠ɺӾཡ࣌ʹखॻ͖ͷυΩϡϝϯτͱϚʔδ͢Δ • Ҋ1ɿRSpecͷग़ྗΛར༻͢Δʢ࣮ߦඞཁʣ • Ҋ2ɿRSpecͷιʔείʔυΛύʔε͢Δʢ࣮ߦෆཁʣ

Slide 48

Slide 48 text

໰୊3ɿ ܕ͕υΩϡϝϯτ ͱઐ༻πʔϧͰผ

Slide 49

Slide 49 text

ղܾࡦ3ɿ ެࣜͷܕʢRBSʣ ʹἧ͑Δ

Slide 50

Slide 50 text

ͷɺલʹ

Slide 51

Slide 51 text

Rubyͷܕࣄ৘ʹ͍͓ͭͯ͞Β͍ • ެࣜͷܕγεςϜͰ͋ΔRBSͱɺඇެࣜͷܕγεςϜͰ͋ΔSorbet ʢRBIʣ͕ଘࡏ͢Δ • RBSͱRBI͸ݱঢ়ඇޓ׵ͰผʑͷΤίγεςϜ͕ଘࡏ͢Δ • RBS͸ผϑΝΠϧʹهड़͢Δํ͕ࣜओྲྀʢޙड़ʣɺRBI͸ιʔείʔυ ಺ʹݴޠ಺DSLͱͯ͠هड़͢Δ • YARDʹ͸ಠࣗͷܕه๏ʢܕݕࠪͳͲ͸ͳ͠ʣ͕ଘࡏ͢Δ

Slide 52

Slide 52 text

RubyͷܕγεςϜͱυΩϡϝϯτͷ݉Ͷ߹͍ • SorbetʢRBIʣ͸ίϝϯτͱಉ͡ҐஔʹRubyίʔυͱͯ͠ॻ͘ • ඪ४Ͱ͸υΩϡϝϯτʹܕ৘ใΛදࣔͰ͖ͳ͍ • RBSʹ͸࠷ۙrbs-inlineͱ͍͏ํ͕ࣜੜ·ΕɺRubyϑΝΠϧ಺ʹܕ৘ ใΛهड़Ͱ͖ΔΑ͏ʹͳͬͨ • υΩϡϝϯτʹ͸൓ө͞Εͳ͍ • ࡞ऀతʹ͸YARDʹد͍͖͍ͤͯͨΒ͍͠

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

૊Έ߹Θͤരൃʹ֦ுػೳج൫ͰରԠ͢Δ • ݸผͷϓϥάΠϯʢྫ͑͹RBI -> YARDʣ͸ଘࡏ͢Δ͕ɺͦΕΒ͕ݸ ผʹϝϯςφϯε͞ΕΔͷ͸େมͰޮ཰͕ѱ͍ • ܕγεςϜͱੜ੒͞ΕΔHTMLυΩϡϝϯτͷதؒʹRDocཱ͕ͭ͜ͱ Ͱ૊Έ߹Θͤͷ਺ΛݮΒ͢ʢLSPతͳൃ૝ʣ • ܕγεςϜ֦ுػೳ͕ܕ৘ใΛυΩϡϝϯτ޲͚ʹม׵ͯ͠ɺHTML ੜ੒෦෼͸RDocʹ೚ͤΔ

Slide 55

Slide 55 text

2. ༗༻Խ

Slide 56

Slide 56 text

͔ͤͬ͘ υΩϡϝϯτΛ ࡞ͬͯ΋ ݟͯ΋Β͑ͳ͍…

Slide 57

Slide 57 text

υΩϡϝϯτΛ Ͳ͏࢖ͬͯ΄͍͠ ͔

Slide 58

Slide 58 text

ΞϓϦέʔγϣϯ or ϥΠϒϥϦ

Slide 59

Slide 59 text

ΞϓϦέʔγϣϯʹ͓͚ΔυΩϡϝϯτ׆༻ • LSPʢLanguage Server ProtocolʣͰυΩϡϝϯτΛදࣔ͢Δ • https://microsoft.github.io/language-server-protocol/ speci fi cations/lsp/3.17/speci fi cation/ #textDocument_signatureHelp • Railsίϯιʔϧ͔ΒυΩϡϝϯτͷஅยΛදࣔͯ͠ɺΫϦοΫ͢Δͱ ؔ࿈͢ΔΦϯϥΠϯυΩϡϝϯτʹҠಈ͢Δʁ • υΩϡϝϯτΛMarkdownͰग़ྗͯ͠esa΍KibelaͳͲͱ࿈ܞ͢Δʁ

Slide 60

Slide 60 text

ϥΠϒϥϦʹ͓͚ΔυΩϡϝϯτ׆༻ • ੜ੒͞ΕͨHTMLυΩϡϝϯτ͔ΒREPLʢIRBʣΛىಈͰ͖Δ • ϥΠϒϥϦͷؾʹͳΔػೳΛ͙͢ࢼͤΔ • υΩϡϝϯτʹରԠ͢Δϝιου΍Ϋϥεʹؔ࿈͢Δςετίʔυ͕ ಡΊΔʢࡉ͔͍࢓༷Λ೺ѲͰ͖Δʣ

Slide 61

Slide 61 text

υΩϡϝϯτ͸ ·ͩਐԽͰ͖Δʂ

Slide 62

Slide 62 text

·ͱΊ

Slide 63

Slide 63 text

ָ͍͠υΩϡϝϯςʔγϣϯΛ໨ࢦͯ͠ • ֦ுػೳج൫ʹΑΔπʔϧͷRDoc΁ͷ౷߹ • υΩϡϝϯςʔγϣϯΛָʹ͢ΔΞΠσΞ • υΩϡϝϯτΛॻ͘͜ͱ͕ใΘΕΔΑ͏ʹͳΔͨΊͷπʔϧͷվળ

Slide 64

Slide 64 text

େࣄͳ͜ͱ

Slide 65

Slide 65 text

ະ࣮૷

Slide 66

Slide 66 text

Ұ෦͸ ۙ೔࣮૷

Slide 67

Slide 67 text

https://www.ruby.or.jp/ja/news/20240821

Slide 68

Slide 68 text

https://www.ruby.or.jp/ja/news/20241030

Slide 69

Slide 69 text

࠷ऴใࠂظݶ 2025೥3݄

Slide 70

Slide 70 text

͕Μ͹Γ·͢ʂ