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

TOKIWANOMORI-20180901

C4048749e891d1958e842bccd7b533f1?s=47 MzRyuKa
September 01, 2018

 TOKIWANOMORI-20180901

トキワの森LT大会(2018/09/01)でLT発表した資料です。

C4048749e891d1958e842bccd7b533f1?s=128

MzRyuKa

September 01, 2018
Tweet

Transcript

  1. RubyεΫϦϓτΛ
 Goݴޠʹஔ͖׵͑ͨΒ
 ॲཧ͕࣌ؒ̎̌෼ͷ̍ʹͳͬͨ 2018.09.01 τΩϫͷ৿LTେձ @MzRyuKa

  2. ຊ೔఻͍͑ͨ͜ͱ ͪΐͬͱͨ͠ॲཧͰ΋GoͰॻ͘ͷ͓͢͢Ί

  3. ࣗݾ঺հ ΈͣΓΎ @MzRyuKa
 https://mzryuka.hatenablog.jp/ தখاۀͷSIer ࠷ۙ͸ɺࣗࣾͷࣾ಺ษ ڧձͰएखࣾһʹࠞͬ͡ ͯ৭ʑָ͠ΜͰ͍·͢ɻ

  4. ͖͔͚ͬ ผձ͕ࣾఏڙ͢Δ໿6000ݸͷcsvϑΝΠϧ͕Πϯϓοτɻ
 ͔͠͠ɺ͜Μͳ໰୊͕ଟൃͨ͠ɻ ϑΝΠϧ໊ͷ໋໊ϧʔϧʹ͋ͬͯͳ͍ɻ ϑΝΠϧͷσʔλܗ͕ࣜʮόΠφϦܗࣜʯʹͳ͍ͬͯͨɻ ϑΝΠϧதͷ೔෇ॻ͕ࣜؒҧ͍ͬͯͨɻ σʔλ߲໨ͷΧϯϚͷ਺͕ؒҧ͍ͬͯͨɻ ಛఆͷσʔλ߲໨ͷઃఆ஋͕ޡ͍ͬͯͨɻ

  5. ରࡦͱͯ͠ɺ؆қతͳνΣοΫεΫϦϓτΛ
 bashͱrubyͰύύοͱ࡞੒ͨ͠ɻ ಺༁ɿ bash: ʮfileʯίϚϯυͰϑΝΠϧܗࣜΛνΣοΫɻ
 ໿1෼൒ͰνΣοΫ׬ྃ ruby: ϑΝΠϧܗࣜҎ֎ͷνΣοΫΛ࣮ࢪɻ
 ໿̏̌෼ͰνΣοΫ׬ྃ ݁Ռɺ1ճͷνΣοΫʹ໿̏̎෼ͷॲཧ࣌ؒɻ


    ʢ݄̍෼ͷσʔλͷͨΊɺ̍೔෼͋ͨΓ͸໿1෼ͷॲཧʣ
  6. ൒೥ఔ౓͸͜ΕͰରԠ͍ͯͨ͠ɻ ͔͠͠ɺ೔ʹ਺ճ΋֬ೝ͢Δέʔε͕ग़͖ͯͨͷ Ͱɺͪΐͬͱ͕࣌ؒ໪ମແ͘ͳ͖ͬͯͨɻ ʮ࢓ࣄʹ༨༟͕͋Δঢ়گͳͷͰɺͪΐͬ͘Β
 GoݴޠͰॻ͖௚ͯ͠ΈΔ͔ɻʯͱࢥཱ͍ͭɻ

  7. GoݴޠͰͷॻ͖׵͑ ผݴޠͰͷ࣮૷ͩ̇ͱු͔Εͯͨ൓໘ɺrubyͷॻ͖ํʹ׳ Ε͍ͯͨͷͰɺׂͱΠϥͬͱ͠ͳ͕Βॻ͍͍ͯͨɻ ΠϥΠϥϙΠϯτɿ ར༻͍ͯ͠ͳ͍ม਺΍ύοέʔδͷએݴͰౖΒΕΔ ifจ͕̍ߦͰॻ͚ͳ͍ͨΊߦ਺͕૿͑Δ ໌ࣔతͳܕࢦఆΛ͢ΔͷͰɺؔ਺ͷฦ͢ܕͷௐ͕ࠪ໘౗

  8. ϑΝΠϧͷܗࣜνΣοΫ͸ɺGoͰͲ͏͢Ε͹ྑ͍ ͔Θ͔Βͳ͔ͬͨͷͰɺ֎෦ίϚϯυͰʮfileʯΛ ࣮ߦ͢ΔΑ͏ʹͨ͠ɻ out, err := exec.Command(“file”,fullpath).Output() if err !=

    nil { return false } outstr := fmt.Sprintf(“out: %s”, out) if strings.Index(outstr, “ASCII text”) == -1 { return false } return true
  9. ϑΝΠϧͷ໋໊νΣοΫ͸ɺਖ਼نදݱΛར༻ɻ
 ಉ༷ʹɺ೔෇ͷॻࣜνΣοΫ΋ਖ਼نදݱɻ
 Goͷਖ਼نදݱ͸஗͍ͱฉ͍͍͕ͯͨɺ
 ଞʹྑ͍Ҋ΋ࢥ͍͔ͭͣɺ͜ΕͰ࣮૷ɻ var re := regex.MustCompile(`^2[0-1][0-9][0-9]ʢ~ུ~ʣ.csv$`) func checkFileName(filename

    string) bool { return re.MatchString(filename) }
  10. ࣮ߦ௚લ ͜Μͳײ͡Ͱॻ͍ͯɺͻͱ·ͣ׬੒ɻಛʹ޻෉΋ ͤͣʹॻ͍ͨͷͰੑೳ͸ෆ͔҆͠ͳ͍ɻ ·͊ɺ͕࣌ؒ൒෼ʹͳΕ͹ɺ΋͏͚΋ͷɻ ஗͘ͳͬͯͨΒGoroutineͰฒྻ࣮ߦͰ΋͢ΔΑ͏ ʹมߋ͠Α͏͔ͳʙɺͱࢥ͍ͳ͕Β࣮ߦɻ

  11. ݁Ռ શνΣοΫͷ࣮ߦ࣌ؒ͸ʮ໿̍෼൒ʯͱͳͬͨɻ
 ʢtimeίϚϯυͰ਺ճܭଌʣ ɾɾ͋ΕɺbashͷνΣοΫ࣮ߦ࣌ؒͱ΄΅ಉ͡ʁ

  12. ݁Ռʢͦͷ̎ʣ ؾʹͳͬͯɺ
 ʮfileʯίϚϯυͷ࣮ߦ෦෼͚ͩͰ࣮ߦͨ͠Βɺ
 ࣮ߦ࣌ؒ͸ʮ໿1෼൒ʯͩͬͨɻ
 


  13. ݁Ռʢͦͷ̏ʣ ͞Βʹؾʹͳͬͯɺ
 ʮfileʯίϚϯυ෦෼Λআ͍࣮ͯߦ͢Δͱɺ
 ࣮ߦ࣌ؒ͸ʮ໿̍̍ඵʯͩͬͨɻ
 


  14. “ॲཧ࣌ؒͷ୯Ґ͕มΘͬͨʂ” ϏόʂGolang!!

  15. ॻ͖׵͑ͨ੒Ռ ୯७ʹGoݴޠͰॻ͖׵͚͑ͨͩͰ΋ɺॲཧ࣌ؒ͸ ʮ໿̎̌෼ͷ1ʯ(32෼ˠ1෼൒)ͱͳͬͨɻ ʮfileʯίϚϯυͷݺͼग़͠෦෼͸࣮࣭తʹมΘͬ ͍ͯͳ͍ͷͰɺruby→golangʹมߋͨ͜͠ͱʹΑ ΔޮՌ͸ɺʮ໿̍̒̌෼ͷ̍ʯ(30෼ˠ11ඵ)ͱ ͳͬͨɻ

  16. ·ͱΊ Ruby౳ͷಈతݴޠ͸ɺͬ͞ͱ࡞ΕΔ͓ख͕ܰ͋͞ Δ͕ॲཧ଎౓͕ؾʹͳͬͯ͘Δɻ GoͰॻ͍ͯΔͱଟগΠϥΠϥ͢Δ͜ͱ΋͋ͬͨɻ ͕ɺॲཧ଎౓ΛΈͯաڈͷ͜ͱ͸ਫʹྲྀͨ͠ɻ Ұ୴͸ಈతݴޠͰॻ͍ͯΈͯɺΠϝʔδΛ௫ΜͰ ͔ΒGoͰஔ͖׵͑Δͷ΋͋Γͩͱࢥ͍·͢ɻ