Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TOKIWANOMORI-20180901
Search
MzRyuKa
September 01, 2018
Programming
0
430
TOKIWANOMORI-20180901
トキワの森LT大会(2018/09/01)でLT発表した資料です。
MzRyuKa
September 01, 2018
Tweet
Share
More Decks by MzRyuKa
See All by MzRyuKa
EDI_LT_Elixir_books_story
mzryuka
0
500
インフラ勉強会LT資料:自分の本を宣伝するLT
mzryuka
1
98
Internet-Oldman-2_LT-today-no2
mzryuka
0
250
Ginza.js #1 LT_Draw_LineChart
mzryuka
1
390
「ドラクエに学ぶチームマネジメント」読書会第5章
mzryuka
1
210
WebEngineerMeetup10_cui_quiz
mzryuka
1
1.7k
pplog_5thbd_lt
mzryuka
0
170
aniben-20180823
mzryuka
1
1.2k
Other Decks in Programming
See All in Programming
Ruby GitHub Packages
bkuhlmann
0
630
Ruby Pattern Matching
bkuhlmann
0
930
#phpcon_odawara オープン・クローズドなテストフィクスチャを求めて / open closed test fixtures
77web
3
230
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
170
スクラムガイドのスプリントレトロスペクティブを改めて読みかえしてみた / Re-reading the Sprint Retrospective Section in the Scrum Guide
mackey0225
3
420
冗長なエラーログを削減し、スタックトレースを手に入れる / Reducing Verbose Error Logs and Obtaining Stack Traces
upamune
0
550
Site Reliability Engineering for GMO
pyama86
8
1k
HUIT新歓2024「競技プログラミング、やってみませんか?」
slephy2784
1
270
エンターテイメント業界で利用されるAWS
demuyan
0
210
Ruby Function Composition
bkuhlmann
1
330
2 週間で Twitter Bot を作ってみた
contour_gara
0
370
GraphQLサーバの構成要素を整理する #ハッカー鮨 #tsukijigraphql / graphql server technology selection
izumin5210
4
830
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
322
20k
Building Effective Engineering Teams - LeadDev
addyosmani
28
1.8k
Into the Great Unknown - MozCon
thekraken
10
990
Testing 201, or: Great Expectations
jmmastey
28
6.4k
What the flash - Photography Introduction
edds
64
11k
Statistics for Hackers
jakevdp
789
220k
How STYLIGHT went responsive
nonsquared
92
4.8k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
How to train your dragon (web standard)
notwaldorf
73
5.2k
Design by the Numbers
sachag
274
18k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
20
1.9k
Visualization
eitanlees
136
14k
Transcript
RubyεΫϦϓτΛ Goݴޠʹஔ͖͑ͨΒ ॲཧ͕࣌ؒ̎̌ͷ̍ʹͳͬͨ 2018.09.01 τΩϫͷLTେձ @MzRyuKa
ຊ͍͑ͨ͜ͱ ͪΐͬͱͨ͠ॲཧͰGoͰॻ͘ͷ͓͢͢Ί
ࣗݾհ ΈͣΓΎ @MzRyuKa https://mzryuka.hatenablog.jp/ தখاۀͷSIer ࠷ۙɺࣗࣾͷࣾษ ڧձͰएखࣾһʹࠞͬ͡ ͯ৭ʑָ͠ΜͰ͍·͢ɻ
͖͔͚ͬ ผձ͕ࣾఏڙ͢Δ6000ݸͷcsvϑΝΠϧ͕Πϯϓοτɻ ͔͠͠ɺ͜Μͳ͕ଟൃͨ͠ɻ ϑΝΠϧ໊ͷ໋໊ϧʔϧʹ͋ͬͯͳ͍ɻ ϑΝΠϧͷσʔλܗ͕ࣜʮόΠφϦܗࣜʯʹͳ͍ͬͯͨɻ ϑΝΠϧதͷॻ͕ࣜؒҧ͍ͬͯͨɻ σʔλ߲ͷΧϯϚͷ͕ؒҧ͍ͬͯͨɻ ಛఆͷσʔλ߲ͷઃఆ͕ޡ͍ͬͯͨɻ
ରࡦͱͯ͠ɺ؆қతͳνΣοΫεΫϦϓτΛ bashͱrubyͰύύοͱ࡞ͨ͠ɻ ༁ɿ bash: ʮfileʯίϚϯυͰϑΝΠϧܗࣜΛνΣοΫɻ 1ͰνΣοΫྃ ruby: ϑΝΠϧܗࣜҎ֎ͷνΣοΫΛ࣮ࢪɻ ̏̌ͰνΣοΫྃ ݁Ռɺ1ճͷνΣοΫʹ̏̎ͷॲཧ࣌ؒɻ
ʢ݄̍ͷσʔλͷͨΊɺ̍͋ͨΓ1ͷॲཧʣ
ఔ͜ΕͰରԠ͍ͯͨ͠ɻ ͔͠͠ɺʹճ֬ೝ͢Δέʔε͕ग़͖ͯͨͷ Ͱɺͪΐͬͱ͕࣌ؒମແ͘ͳ͖ͬͯͨɻ ʮࣄʹ༨༟͕͋Δঢ়گͳͷͰɺͪΐͬ͘Β GoݴޠͰॻ͖ͯ͠ΈΔ͔ɻʯͱࢥཱ͍ͭɻ
GoݴޠͰͷॻ͖͑ ผݴޠͰͷ࣮ͩ̇ͱු͔Εͯͨ໘ɺrubyͷॻ͖ํʹ׳ Ε͍ͯͨͷͰɺׂͱΠϥͬͱ͠ͳ͕Βॻ͍͍ͯͨɻ ΠϥΠϥϙΠϯτɿ ར༻͍ͯ͠ͳ͍มύοέʔδͷએݴͰౖΒΕΔ ifจ͕̍ߦͰॻ͚ͳ͍ͨΊߦ͕૿͑Δ ໌ࣔతͳܕࢦఆΛ͢ΔͷͰɺؔͷฦ͢ܕͷௐ͕ࠪ໘
ϑΝΠϧͷܗࣜνΣοΫɺ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
ϑΝΠϧͷ໋໊νΣοΫɺਖ਼نදݱΛར༻ɻ ಉ༷ʹɺͷॻࣜνΣοΫਖ਼نදݱɻ Goͷਖ਼نදݱ͍ͱฉ͍͍͕ͯͨɺ ଞʹྑ͍Ҋࢥ͍͔ͭͣɺ͜ΕͰ࣮ɻ var re := regex.MustCompile(`^2[0-1][0-9][0-9]ʢ~ུ~ʣ.csv$`) func checkFileName(filename
string) bool { return re.MatchString(filename) }
࣮ߦલ ͜Μͳײ͡Ͱॻ͍ͯɺͻͱ·ͣɻಛʹ ͤͣʹॻ͍ͨͷͰੑೳෆ͔҆͠ͳ͍ɻ ·͊ɺ͕࣌ؒʹͳΕɺ͏͚ͷɻ ͘ͳͬͯͨΒGoroutineͰฒྻ࣮ߦͰ͢ΔΑ͏ ʹมߋ͠Α͏͔ͳʙɺͱࢥ͍ͳ͕Β࣮ߦɻ
݁Ռ શνΣοΫͷ࣮ߦ࣌ؒʮ̍ʯͱͳͬͨɻ ʢtimeίϚϯυͰճܭଌʣ ɾɾ͋ΕɺbashͷνΣοΫ࣮ߦ࣌ؒͱ΄΅ಉ͡ʁ
݁Ռʢͦͷ̎ʣ ؾʹͳͬͯɺ ʮfileʯίϚϯυͷ࣮ߦ෦͚ͩͰ࣮ߦͨ͠Βɺ ࣮ߦ࣌ؒʮ1ʯͩͬͨɻ
݁Ռʢͦͷ̏ʣ ͞Βʹؾʹͳͬͯɺ ʮfileʯίϚϯυ෦Λআ͍࣮ͯߦ͢Δͱɺ ࣮ߦ࣌ؒʮ̍̍ඵʯͩͬͨɻ
“ॲཧ࣌ؒͷ୯Ґ͕มΘͬͨʂ” ϏόʂGolang!!
ॻ͖͑ͨՌ ୯७ʹGoݴޠͰॻ͖͚͑ͨͩͰɺॲཧ࣌ؒ ʮ̎̌ͷ1ʯ(32ˠ1)ͱͳͬͨɻ ʮfileʯίϚϯυͷݺͼग़͠෦࣮࣭తʹมΘͬ ͍ͯͳ͍ͷͰɺruby→golangʹมߋͨ͜͠ͱʹΑ ΔޮՌɺʮ̍̒̌ͷ̍ʯ(30ˠ11ඵ)ͱ ͳͬͨɻ
·ͱΊ Rubyͷಈతݴޠɺͬ͞ͱ࡞ΕΔ͓ख͕ܰ͋͞ Δ͕ॲཧ͕ؾʹͳͬͯ͘Δɻ GoͰॻ͍ͯΔͱଟগΠϥΠϥ͢Δ͜ͱ͋ͬͨɻ ͕ɺॲཧΛΈͯաڈͷ͜ͱਫʹྲྀͨ͠ɻ Ұ୴ಈతݴޠͰॻ͍ͯΈͯɺΠϝʔδΛ௫ΜͰ ͔ΒGoͰஔ͖͑Δͷ͋Γͩͱࢥ͍·͢ɻ