Slide 1

Slide 1 text

J04"VUP1SPWJTJPOͰ ূ໌ॻߋ৽ͷۤ೰͔Βͷղ์ Ϋϥ΢υϞόΠϧϏϧυςετ.FFUVQ 1

Slide 2

Slide 2 text

1SPpMF struct Profile { let name = "Kazuya Ueoka" let twitter = "@fromkk" let github = "fromkk" let qiita = "fromkk" let company = "Timers Inc." } • 2

Slide 3

Slide 3 text

3

Slide 4

Slide 4 text

4

Slide 5

Slide 5 text

w (6*Ͱϙνϙν͢Δ͚ͩͰ؆୯ʹ$*؀ڥ͕ߏஙՄೳ w ෳ਺ͷ8PSLqPXΛͦͷ࣌ʑʹ࢖͍෼͚Δ͜ͱ͕Ͱ͖Δ w 4UFQʢެࣜ΍ඇެࣜʣ͕๛෋ʹ͋Γࣗ༝ʹྲྀΕΛΧελϚΠ ζͰ͖Δ w 9DPEF4UBDLͷΞοϓσʔτ͕ૣ͍ ϦϦʔε͞Εͯʙ೔Ҏ ಺ʹར༻Մೳ 5

Slide 6

Slide 6 text

8PSLqPX w ෳ਺ͷ4UFQΛ૊Έ߹Θͤͯ࡞ΔॲཧͷྲྀΕ w ͲͷτϦΨʔͰ࣮ߦ͞ΕΔ࣌ʹͲͷ8PSLqPXΛ࣮ߦ͢Δͷ͔બ୒Ͱ͖Δ w (JU)VCʹ1VTI͞Εͨ࣌ w 1VMM3FRVFTUΛ࡞ͬͨ࣌ w UBH͕࡞ΒΕͨ࣌ w ఆظతʹ࣮ߦ w 8FCIPPL΍"1*͔ΒىಈͳͲ 6

Slide 7

Slide 7 text

4UFQ w ػೳ୯Ґͷࡉ͔͍ίϯϙʔωϯτ w ެ͕ࣜग़͍ͯ͠Δ΋ͷ΍༗ࢤʹΑͬͯ࡞ΒΕ͍ͯΔඇެࣜͷ΋ ͷ͕͋Δ w ࣗ࡞΋Մೳͩ͠؆୯ͳ΋ͷͳΒ4DSJQU4UFQͰTIFMMTDSJQU 7

Slide 8

Slide 8 text

4UBDL 8 w #JUSJTF͕༻ҙͯ͘͠Ε͍ͯΔ؀ڥͷςϯϓ ϨʔτͷΑ͏ͳ΋ͷ w ˣͷΑ͏ʹࣗ෼Ͱ؀ڥΛࢦఆ͢Δ͜ͱ΋Մೳ

Slide 9

Slide 9 text

<13>"OESPJE%PDLFS4UBDLΛར༻ͨ͠ྫ 9

Slide 10

Slide 10 text

<13>ʲిࢠॻ੶ʳNBD04$BUBMZTU%FFQ%JWF 10 IUUQTGSPNLLCPPUIQNJUFNT

Slide 11

Slide 11 text

'BNNʹ͓͚Δ#JUSJTFͷར༻ঢ়گ 11

Slide 12

Slide 12 text

'BNNͷར༻มભ w ʙ1SP .POUIMZ w ʙ&MJUF .POUIMZ w ʙ&MJUF .POUIMZ 12

Slide 13

Slide 13 text

'BNNʹ͓͚Δ#JUSJTFͷར༻ঢ়گ w 1VTIτϦΨʔ w ϥΠϒϥϦ४උ $BSUIBHF$PDPB1PETͷΠϯετʔϧ w ΞϓϦόʔδϣϯͷߋ৽ w ϏϧυΞʔΧΠϒ w όΠφϦʔͷΞοϓϩʔυ #JUSJTF %FQMPZ(BUF 'JSFCBTF "QQ%JTUSJCVUJPO w 4MBDL௨஌ 13

Slide 14

Slide 14 text

'BNNʹ͓͚Δ#JUSJTFͷར༻ঢ়گ w 1VMM3FRVFTUτϦΨʔ w ϥΠϒϥϦ४උ $BSUIBHF$PDPB1PET w Ϣχοτςετͷ࣮ߦ w %BOHFSͷ࣮ߦ 14

Slide 15

Slide 15 text

15 w $*্Ͱ1VMM3FRVFTUͷ಺༰΍ίʔυʹରͯ͠νΣοΫΛ࣮ߦͯ͠(JU)VCͷ ίϝϯτͳͲʹ௨஌ͯ͘͠ΕΔπʔϧ w ฐࣾͰ͸ w ίʔυྔνΣοΫ w λΠϙνΣοΫ w 9DPEF4VNNBSZ΍4XJGU-JOUͷ݁Ռ w ͳͲ IUUQTHJTUHJUIVCDPNUJNFSTJPTFDFBEC

Slide 16

Slide 16 text

16 # λΠϙνΣοΫ # cspell # npm install -g cspell added_and_modified_files = git.added_files + git.modified_files added_and_modified_files.each do |file_path| next unless file_path =~ /.swift$/ stdout, status = Open3.capture2("npx", "cspell", file_path, "-c", "cspell.json") next if status.success? stdout.split("\n").each do |line| next unless matches = /\w.swift:(\d+).*-\sUnknown\sword\s\((\w+)\)/.match(line) line_number = matches[1].to_i word = matches[2] warning = "typo? #{word}" warn(warning, file: file_path, line: line_number) end end ࢀߟIUUQTTQFBLFSEFDLDPNZILBQMBOBVUPNBUFBMMUIFUIJOHT TMJEF

Slide 17

Slide 17 text

17

Slide 18

Slide 18 text

'BNNʹ͓͚Δ#JUSJTFͷར༻ঢ়گ w ߋʹৄ͍͠৘ใ͸ฐࣾϒϩάʹͯެ։த w 'BNNJ04ʹ͓͚Δ#JUSJTFͷϫʔΫϑϩʔΛେެ։CJUSJTF IUUQTUFDICMPHUJNFSTJODDPNFOUSZGBNN@MPWFT@CJUSJTF 18

Slide 19

Slide 19 text

J04ΞϓϦͷূ໌ॻ؅ཧͰ ർฐͯ͠Δਓʁ 19

Slide 20

Slide 20 text

J04ΞϓϦͷূ໌ॻͷ؅ཧ໰୊ w جຊతʹ։ൃ༻ɺϦϦʔε༻ͳͲෳ਺ͷূ໌ॻ͕ඞཁ w ߋʹ&YUFOTJPO ֦ுػೳ ຖʹ΋ূ໌ॻ͕ඞཁ w ඞཁͳূ໌ॻͷ਺ ΞϓϦຊମ&YUFOTJPOͷ਺ º؀ڥͷछྨͷ਺ w ొ࿥୺຤Λมߋ͢Δ౓ʹ%FWFMPQNFOU"EIPDͷূ໌ॻΛߋ৽ ͢Δඞཁ͕͋Δ 20

Slide 21

Slide 21 text

େมա͗Ͱ͸ʁ 21

Slide 22

Slide 22 text

ରԠҊ w GBTUMBOFNBUDIͷར༻ w ৽ͨʹϦϙδτϦΛ࡞੒͢Δඞཁ͕͋Δ w ࡞ۀऀͷݖݶʹΑͬͯ͸೉͍͠΋৔߹΋͋ΔͷͰଟগ໘౗͔΋ 22

Slide 23

Slide 23 text

ରԠҊ w GBTUMBOFNBUDIͷར༻ w ৽ͨʹϦϙδτϦΛ࡞੒͢Δඞཁ͕͋Δ w ࡞ۀऀͷݖݶʹΑͬͯ͸೉͍͠΋৔߹΋͋ΔͷͰଟগ໘౗͔΋ 23 w #JUSJTFJ04"VUP1SPWJTJPO4UFQ w #JUSJTF্Ͱ"QQMF%FWFMPQFS"DDPVOUʹϩάΠϯ͓͚ͯ͠͹Α͍

Slide 24

Slide 24 text

ରԠҊ w GBTUMBOFNBUDIͷར༻ w ৽ͨʹϦϙδτϦΛ࡞੒͢Δඞཁ͕͋Δ w ࡞ۀऀͷݖݶʹΑͬͯ͸೉͍͠΋৔߹΋͋ΔͷͰଟগ໘౗͔΋ 24 w #JUSJTFJ04"VUP1SPWJTJPO4UFQ w #JUSJTF্Ͱ"QQMF%FWFMPQFS"DDPVOUʹϩάΠϯ͓͚ͯ͠͹Α͍

Slide 25

Slide 25 text

લఏ४උ "DDPVOUTFUUJOHT͔Β"QQMF%FWFMPQFS"DDPVUʹϩάΠϯ 25

Slide 26

Slide 26 text

લఏ४උ "DDPVOUTFUUJOHT͔Β"QQMF%FWFMPQFS"DDPVUʹϩάΠϯ 26

Slide 27

Slide 27 text

લఏ४උ "DDPVOUTFUUJOHT͔Β"QQMF%FWFMPQFS"DDPVUʹϩάΠϯ 27

Slide 28

Slide 28 text

લఏ४උ $POOFDUFE"QQMF%FWFMPQFS 1PSUBM"DDPVOUͰઌ΄Ͳ ϩάΠϯͨ͠ΞΧ΢ϯτΛબ୒ 28

Slide 29

Slide 29 text

લఏ४උ 1SPWJTJPOJOH1SPpMF͸શͯ࡟আ 29

Slide 30

Slide 30 text

4UFQͷ௥Ճ 30

Slide 31

Slide 31 text

4UFQͷฤू w %JTUSJCVUJPOUZQFEFWFMPQNFOU BQQTUPSFBEIPDFOUFSQSJDF w 5IF%FWFMPQFS1PSUBMUFBN*% w 9DPEF1SPKFDU PS8PSLTQBDF QBUI w 4DIFNFOBNF w $POpHVSBUJPOOBNF 31

Slide 32

Slide 32 text

࣮ߦͯ͠ΈΔ 32

Slide 33

Slide 33 text

33

Slide 34

Slide 34 text

࢓૊Έ w "QQMF%FWFMPQFS"DDPVUʹ#JUSJTF͕ϓϩϏδϣχϯάϑΝΠ ϧΛੜ੒ w #JUSJTF͸໊લ͕Ұகͨ͠ূ໌ॻ͕͋Ε͹μ΢ϯϩʔυͯ͠ར༻ ͢Δ 34

Slide 35

Slide 35 text

஫ҙ఺ w YDPEFCVJMEίϚϯυͰ&YQPSU0QUJPOTQMJTUΛखಈͰઃఆͯ͠ ͍Δͱ1SPWJTJPOJOH'JMF͕Ϛονࣦͤͣഊ͢ΔՄೳੑ͕ߴ͍ͷ Ͱ஫ҙ⚠ 35

Slide 36

Slide 36 text

·ͱΊ w $*্ͷূ໌ॻͷ؅ཧ͔Βղ์͞Εɺ༨ͬͨ࣌ؒΛΞϓϦͷվળ ʹׂ͕͚࣌ؒΔ w ଐਓੑ΋ഉআͰ͖ΔͷͰਓ͕ೖΕସΘͬͯ΋ࠞཚগͳ͍ w Մೳͳॴ͸ͳΔ΂ࣗ͘ಈԽͯ͠ຊ౰ʹඞཁͳ։ൃ࡞ۀʹ஫ྗ 36

Slide 37

Slide 37 text

:PV5VCF https://youtu.be/yXmetYXSmTI 37

Slide 38

Slide 38 text

13 38

Slide 39

Slide 39 text

• αʔόʔαΠυΤϯδχΞ (PHP, Golang, AWS) • AndroidΤϯδχΞ (Kotlin) • iOSΤϯδχΞ (Swift) TimersͰ͸ݱࡏΤϯδχΞશ৬छ࠾༻தʂ ৄ͘͠͸”Timers”Ͱݕࡧ 39

Slide 40

Slide 40 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 40