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
Finding Ruby Again
Search
Akira Matsuda
November 25, 2017
Programming
22
8.5k
Finding Ruby Again
福岡Ruby会議02のキーノート「Finding Ruby Again」の発表資料
http://regional.rubykaigi.org/fukuoka02/
Akira Matsuda
November 25, 2017
Tweet
Share
More Decks by Akira Matsuda
See All by Akira Matsuda
初心者のためのRubyKaigi入門/RubyKaigi Introduction
a_matsuda
15
6.4k
Hanamiを支える技術 2023 / Asakusa.rb Hanami 2023
a_matsuda
2
680
Rails 7.1をn倍速くした話
a_matsuda
11
13k
RubyKaigi 2022 After Talk
a_matsuda
0
470
Coming Soon…💎 / coming soon
a_matsuda
12
8.1k
Rails Performance Issues and Solutions
a_matsuda
9
36k
Extending Rails for Real World App Development
a_matsuda
9
7.6k
A RubyKaigi Talk
a_matsuda
8
2.6k
Ginza Rails 1
a_matsuda
6
1.3k
Other Decks in Programming
See All in Programming
テスト分析入門/Test Analysis Tutorial
goyoki
11
2.7k
Building an Application with TDD, DDD and Hexagonal Architecture - Isn't it a bit too much?
mufrid
0
370
少数精鋭エンジニアがフルスタック力を磨く理由 -そしてAI時代へ-
rebase_engineering
0
120
tsconfigのオプションで変わる型世界
keisukeikeda
1
120
Doma で目指す ORM 最適解
nakamura_to
1
160
ワンバイナリWebサービスのススメ
mackee
10
7.4k
推論された型の移植性エラーTS2742に挑む
teamlab
PRO
0
150
Use Perl as Better Shell Script
karupanerura
0
640
Babylon.js 8.0のアプデ情報を 軽率にキャッチアップ / catch-up-babylonjs-8
drumath2237
0
110
複雑なフォームを継続的に開発していくための技術選定・設計・実装 #tskaigi / #tskaigi2025
izumin5210
12
6.3k
〜可視化からアクセス制御まで〜 BigQuery×Looker Studioで コスト管理とデータソース認証制御する方法
cuebic9bic
1
240
クラシルリワードにおける iOSアプリ開発の取り組み
funzin
1
800
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
53
11k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
123
52k
Git: the NoSQL Database
bkeepers
PRO
430
65k
The World Runs on Bad Software
bkeepers
PRO
68
11k
Typedesign – Prime Four
hannesfritz
41
2.6k
Embracing the Ebb and Flow
colly
85
4.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
137
34k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.7k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Automating Front-end Workflow
addyosmani
1370
200k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Transcript
Finding Ruby Again @a_matsuda
ʮ͏Ұɺ Rubyͱग़ձ͏ʯ
Ruby͍͍ΑͶ
ݱʹʮRubyϓϩάϥϚʔʯ ͍ͬͯ͏ࣄ͕͋ͬͯຊʹ Α͔ͬͨ ਖ਼ɺ͜ΕҎ֎ͷੜ͖ํͰ ·ͱʹࣾձʹద߹Ͱ͖ͯ ͔ͨͲ͏͔͢͜ͿΔո͍͠
RubyͷΑ͞
Rubyͬͯɺ ͳΜ͔͍͍
Կ͕ʁ
ߟ͑ͯΈΑ͏͔
Ruby͍͍ΑͶ͍ͬͯ͏ݸਓత ͳؾ࣋ͪΛ۷ΓԼ͛ͯΈ͍ͨ ͋͘·Ͱࣗͷମݧ͔Β དྷΔݸਓతͳΛ͠·͢
ࣗͳΓʹɺRubyͷ͍ΖΜͳ Α͞Λ͍ΖΜͳ͔֯Βݟͯ ͖ͨͭΓ RubyͷίΞ։ൃʹབྷΜͰΈͨΓRailsͱ ͔ͬͯΈͨΓGem࡞ͬͯΈͨΓί ϛϡχςΟ׆ಈͱ͔ΧϯϑΝϨϯεͱ ͔ͬͯɺͱൺֱతखͬͯ͘ΔͷͰ
RWCͰͷ֯୩͞Μ ͔Βͷ॓ νʔϜϝΠτͱʮniceʯΛ ڞ༗͠Α͏
͍͍͡ΌΜ => ͳͥʁΛਂ۷Γ ͯ͠ΈΔͱ͍͏ΦʔιυοΫε ͳΞϓϩʔνͰ
RubyͷΑ͞ จ๏ શ͕ͯΦϒδΣΫτ ϒϩοΫ μοΫλΠϐϯά ϝλϓϩάϥϛϯά CͬΆ͞ LISPͬΆ͞ perlͬΆ͞ ͘ॻ͚Δ
TIMTOWTDI UnixͬΆ͞ ӳޠͬΆ͞ DSL Ruby on Rails Active Support TDD RSpec Capybara Continuous Integration devops Webݴޠ͖ͯͳ RubyGems Bundler GitHub ιʔγϟϧίʔσΟϯά Made in Japan ੜ࢈ੑͷߴ͞ มԽɾΞδϟΠϧ ͨͷ͍͠ ΩϝΔͱؾ͍͍࣋ͪ ίϛϡχςΟ Rubyist ຊRubyͷձ Δͼ· Ruby Hero Award Rails Girls rubyfriends Ruby Karaoke ΧϯϑΝϨϯε RubyKaigi Ҭ.rb Asakusa.rb Matz
RubyͷΑ͞ͷཁૉ͕ଟ͗ͯ͢ɺ ࣗʹͲ͕͜ώοτͯ͠Δͷ͔ Α͘Θ͔Βͳ͍ ͍ΖΜͳϨΠϠʔͷΑ͕͞ᕒ વҰମͱͳͬͯͯɺτʔλϧ ͷΤΫεϖϦΤϯεͱͯ͠ɺ ͳΜ͔͍͍
ͨͩ͠ɺࠓMatz is Nice ͚ͩݴΘͳ͍Α͏ʹ͢Δ ͜ΕΛݴͬͪΌ͏ͱ ࢥߟఀࢭʹؕΔؾ͕͢Δ
ͱ͍͏Θ͚Ͱɺ ͷ͘͢͝ݸਓతͳ͔Β ݪମݧʹͬͯΈΔ RubyͱͷೃΕॳΊ
WEB+DB Press Vol. 100 http:/ /gihyo.jp/ magazine/wdpress/ archive/2017/vol100
RubyΛ֮͑Δ͘ॳΊͯ ॻ͍ͨͷಠιϧόʔ ͛͢ʔָ͔ͬͨ͠ Զͬͯεήʔײ ͦΕͰRubyͷྂʹͳͬͯɺͦΕҎ߱ͣͬͱRuby ͬͯΔ ࣌ͷίʔυฆࣦ
͏Ұ ͬͯΈͨ
Ϟνϕʔγϣϯ ࢠڙ͕ͨͪύζϧΛͬͯΈ Δͱ͖ʹɺ࣍ͷҰखͷߟ͑ํ ΛαδΣετͯ͘͠ΕΔΨΠ υ͕࡞Εͳ͍͔
ͳͷͰɺ ਓؒΒ͘͠ ߟ͑ΔͭΛ mame͞ΜͷSATιϧόʔΈ͍ͨͳ಄ͷ͍͍ ͭ͡Όͳͯ͘ ྗٕͰ૯ͨΓͰ୳ࡧͱ͔Ͱͳͯ͘ ී௨ʹਓ͕ؒߟ͑ͳ͕Βղ͘ͷͱಉ͡ײ͡Ͱ
ղ๏ωοτ্ͰΊͬͪΌ ڞ༗Խ͞ΕͯΔͷͰ ͪΐͬͱζϧ͕Ͱ͖Δ ʮߟ͑ํʯʹ໊લΛ͚ͭΔͱ͖ʹ ·ͳͯ͘ྑ͍ naked_pairs, intersection_removal, x_wing, etc.
͜Μͳײ͡
Ͳ͏ͤͳΒɺ͍ͭͰʹࣗ Ͱ༡Δͭʹ͠Α͏
ίϯιʔϧ൛ ແʹΔͳΒCursesɺ͚ͩ Ͳɺͪΐͬͱoverkill͔ͳ͊ io-consoleͬͯͭΛͬͯΈͨ
io-console nobu͕࠷ۙ࡞ͬͨstdlib ͦ͏͍͑ͬͯΈͨ͜ͱͳ͔ͬͨ IO.console ͰɺͳΜ͔ίϯιʔϧΛද͢FileͬΆ͍ΦϒδΣΫτ͕ฦͬͯ ͘Δ ͍ͦͭʹจࣈྻΛ৯ΘͤΔͱίϯιʔϧ্ʹग़ྗ͞ΕΔ ΤεέʔϓγʔέϯεͱΈ߹ΘͤΔͱ͔ͳΓ͍ΖΜͳ͜ͱ͕Ͱ͖Δ ίϯιʔϧͰಈ͔ͪ͢ΐͬͱͨ͠ͷΛ࡞ΔͷʹຯʹศརͰ͋Δ͜ͱ ͕ࠓճΘ͔ͬͨ
Web൛ Action CableͰରઓͰ͖Δ ಠͱ͔Ͳ͏͔(ະ)
ॳ৺ʹฦͬͯRuby ϓϩάϥϛϯάΛͬͯΈͨ ײ ͱΓָ͍͋͑ͣ͠ʂ ָͯ͘͠ΩϚΔ େม͓͢͢Ί ॳΊͯRubyΛ৮ͬͨ࣌ͷϫΫϫΫײ͕ؼͬͯ ͖ͨ
ॳΊͯRubyΛ৮ͬͨ ࣌ͷѹతϫΫϫΫײ ͋ͷ࣌ɺ͜ͷָ͕͠͞શͯ Rubyͷ͓͔͛ͩͱࢥ͍ࠐΜ ͰɺRuby͛͢ʔʂͬͯͳͬͨ ͷΛࢥ͍ग़ͨ͠
͔֬ʹָ͍͠…… ͚Ͳ ࠓͪΐͬͱେਓʹͳͬͯྫྷ੩ʹͳͬͨ ͜ͷָ͕͠͞શ෦Rubyͷ͓͔͛ͬͯΘ͚Ͱͳ͍͔ Ruby͔ͩΒͨͷ͍͠ɺଞݴޠͩͬͨΒָ͘͠ͳ͍ɺͬͯΘ͚Ͱͳ ͦ͞͏ ϓϩάϥϜͰύζϧΛղ͘͜ͱͦΕࣗମָ͕͍͠ʹܾ·ͬͯΔͷͰ ࣌ͷࣗὃ͞ΕͯͨՄೳੑ͕͋Δ
ࠓճͷ߹ͷRuby ͷΑ͞ ϓϩάϥϛϯάຊདྷͷʮָ͍͠ʯΛअຐ͠ͳ͍ ͍ίʔυͰॻ͚Δ ࣗવͳOOPػೳ ߟ͑ͨͱ͓Γʹॻ͍ͨΒಈ͍ͯ͘ΕΔ
಄ͷதͰߟ͑ͨͱ͓Γʹ ίʔυͰදݱͰ͖Δײ֮ ͨͷ͍͠ʂ ͬͺEnumerableศར ͋Δ͖ͱ͜Ζʹ͋Δϝιουͨͪ ࠷ۙ૿͑ͨϝιου͚ͨͪͬ͜͏खʹೃછΜ Ͱͯࣗવʹग़ͯ͘Δ
͜ͷ͋ͨΓ͕Ruby ͳΒͰ ͱࢥ͍·ͨ͠ɻ
͜ͷɺ಄ͷதͰߟ͑ͨͱ͓Γ ʹίʔυͰදݱͰ͖Δɺͬͯ ͍͏ͷ͕͚ͬ͜͏େࣄ ਓ͕ؒػցͷΓํʹ߹ΘͤΔΜ͡Όͳ ͯ͘ɺίϯϐϡʔλʔ͕ਓؒʹาΈدͬ ͯ͘ΕΔͷΛײ͡Δ Ruby͕Developer HappinessʹϑΥʔΧ ε͍ͯ͠Δɺͱ͍͏ͷ͕Α͘Θ͔Δ
RubyਓؒΒ͠͞ Λଚॏͯ͘͠ΕΔ ͔ͩΒ͍͍ؾͰίʔυ͕ ॻ͚Δͷ͔
ͦ͏͍͑Bugsʹ ͜ΜͳIssue͕͋Γ·͕͢
"Follow style conventions for Ruby code" RubyʹελΠϧΨΠυ͕͋Δ ͖Ͱʁ͍ͬͯ͏issue https:/ /bugs.ruby-lang.org/
issues/14112
ੈͷதʹΘ͟Θ͟ෆࣗ༝Λ ΉRubyϓϩάϥϚʔډΔ ΜͰ͢Ͷ ͔ͤͬࣗ͘༝Λ༩͑ΒΕ͍ͯΔͷʹͳͥ ͔ࣗΒਐΜͰෆࣗ༝ʹͳΓ͕ͨΔͷ͔ʁ ਓ͕ؒػցΑΓҒ͘࡞ΒΕ͍ͯΔͷʹ ͳͥࣗΒਐΜͰػցͷԼʹͳΓ͕͞Ζ͏ ͱ͍͏ͷ͔ʁ
Martinઌੜͷ࠷ߴʹ Χοί͍͍͓ฦࣄΑΓ "In many cases, there is not a single
way of writing Ruby, and that's part of Ruby's culture." https:/ /bugs.ruby-lang.org/ issues/14112#note-1
ଟ༷ੑળͬͯ ͍ͭݴͬͯΔͰ͠ΐʁ
ͱ͜ΖͰɺݱ࣮ੈքͰ RubyϓϩάϥϚʔ == RailsϓϩάϥϚʔ ʹҧ͍ͳ͍ͷͰ ࣍RailsͷΛ͠·͢
ͳͥΈΜͳRailsΛ ͍ͬͯΔͷ͔ʁ Rails૬ָ͍͠ ࣗ10Ҏ্ͣͬͱࣄͰRails ΛͬͯΔ͚Ͳ͍·ͩʹָ͍͠
ͳͥRails ָ͍͠ͷ͔ʁ RailsRubyͷΑ͞ΛWebϓϩάϥϛ ϯάͷੈքʹ࣋ͪࠐΉͨΊͷΈ Ruby vs Rails Ͱͳ͘ɺ Rails <
Ruby
Ruby͔ΒҾ͖ܧ͍ͩ RailsͷΑ͞ গͳ͍ίʔυྔ ॻ͔ͳͯ͘ྑ͍ίʔυΛॻ͔ͳ͍͜ͱͰɺ ͷຊ࣭ʹूதͰ͖Δ ߟ͑ͨͱ͓Γʹ͔͚Δࣗવ͞ ߴ͍ੜ࢈ੑ
Railsͷதͷਓͨͪ ΄Μͱ͏ʹRuby͕େ͖
DHH "Why Ruby?" @ RubyConf 2010
Jeremy "Rails3:Convergent evolution" @ RubyWorld Conference 2009
ͦΜͳײ͡ͰɺRailsνʔϜ ৺ͷఈ͔ΒRubyΛϦεϖΫτ ͍ͯ͠Δ͜ͱ͕Θ͔Δ
͏ͻͱͭͷRails ͷΑ͞ Ruby͕ࣄʹͳͬͯΔ ͜Ε͍͢͝େࣄ
ࣄͰ ϓϩάϥϛϯά ސ٬ͱϓϩάϥϚʔ͕ͭͳ͕Δ ݱ࣮ੈքʹ͋Δݱ࣮ͷΛϓϩάϥϛϯάͰղܾ͢ Δ ݱ࣮ੈքʹՁΛੜΈग़͢ ࣗͷύιίϯͷதͰύζϧΛղ͘ͷͱ·ͨεςʔ δͷҧ͏تͼ
ͪΖΜRails͡Όͳ͖Ό Ͱ͖ͳ͍Θ͚͡Όͳ͍͚Ͳ ੜ࢈ੑɾอकੑͷߴ͞ => ίεύͷྑ͞ => ސ٬ͷتͼʹ݁
Rails͞ΜɺRubyΛ͓ۚʹ ม͑ͯ͘Εͯ͋Γ͕ͱ͏
ͦΕͰɺRailsΛࣄʹ ͢ΔΑ͏ʹͳͬͯɺ Rails͕େ͖ʹͳͬͨ ϚχΞͳͷͰɺڵຯͷର͕Rails ͦͷͷʹ͔ͬͨ ࣌ಉͷ͕࢜ͨ͘͞Μ͍ͯɺ ʮRailsษڧձ@౦ژʯʹຖ݄ूͬͨ
͜ͷ͜ΖΘ͔ͬͨ RailsͷΑ͞ Railsίʔυ͕ಡΊΔ ͔͠ΞϓϦέʔγϣϯͰॻ͍ͯΔݴ ޠ͔Βͦͷ··ίϯςΩετεΠονͳ ͠ͰϑϨʔϜϫʔΫͷίʔυ͕ಡΊΔ
ͳͥRailsίʔυ ͕ಡΊΔͷ͔ʁ ιʔείʔυ͕ެ։͞Ε͍ͯΔ͔Β Railsࣗମͷίʔυ͕pure RubyͰॻ͔Ε͍ͯΔ͔ Β Ruby͕ΠϯλʔϓϦλݴޠ͔ͩΒ ͪͳΈʹgem-srcΜΓͰ͢
ʹͱͬͯͷRails ຊ֨తʹOSS׆ಈ࢝͠Ίͨ ͖͔͚ͬ
ͳͥRailsͰOSSʁ RailsͷόάΛΑ͘౿Ή͔Β RailsϏδωεͷجװʹͳΔιϑτΣΞͳͷ ͰɺόάͬͯΔͱͱͯࠔΔ͔Β ͭ·Γ͔͢͠ͳ͍͔Β ͙͢ʹύον͕ॻ͖͍͢ڥ͕ͬͯΔ͔Β
ͳͥRailsͷόά Α͘౿ΜͰ͠·͏ͷ͔ʁ ࣄͰຖͬͯΔ͔Β Rails͕Α͘όάͬͯΔ͔ Β
ͳͥRailsΑ͘ όάͬͯΔͷ͔ʁ Webͷੈքਐ݄าͳͷͰɺ৽ػೳΛͲΜͲΜೖΕ͍͔ͯͳ ͖Ό͍͚ͳ͍ɻ҆ఆ͍ͤͯ͞Δ༨༟͕ͳ͍ όάʹؾ͍ͨ୭͔͕ύονΛ͛ͯ͘ΕΔγεςϜ͕ͬͯ ͍ΔͷͰɺඞͣ͠ίϛολʔ͕શͯͷόάΛ௵͠Βͳͯ͘ ͳΜͱ͔ͳΔ ʮίϯτϦϏϡʔλʔʯͷڵຯΛऒ͖ଓ͚ΔͨΊʹDHH͕Θ͟ ͱࢃ͍͍ͯΔ㕒…ͩͬͨΓͯ͠
OSSͱͯ͠ͷRails ͷΑ͍ͱ͜Ζ ͱʹ͔͘ύονΛॻ͘伱͕ଟ͍ GitHub + Travis CIͰɺ୭ͰαΫοͱύον͕ૹΕΔΈ͕උ͞ Ε͍ͯΔ ίϛολʔਞͷϨϏϡʔͷ໘ݟͷྑ͞ contributor
(= কདྷͷίϛολʔ͔͠Εͳ͍)Λͱͯେࣄʹ͢Δจ Խ http:/ /contributors.rubyonrails.org/
Railsͷίϛολʔʹ ͳͬͯΈͯΘ͔ͬͨ͜ͱ نͷׂʹ͍͢͝গਓ(Θ͔ͣ18ਓ) ͙͢ʹશһͱձͬͯإͱ໊લ͕֮͑ ΒΕΔαΠζͷνʔϜ ΈΜͳ͍͍Ϡπ
RailsͷॊೈͳϓϥάΠϯػߏ ͱɺ ͦͷ্Ͱҭ·ΕͨϥΠϒϥϦ܈ Ϣʔβʔ͔ΒݟΔͱ ΞϓϦͰඞཁͳػೳΛશͯࣗͰ࡞Βͳͯ͘ɺ୭͔͕ ࡞ͬͯ͘ΕͯΔͷΛಋೖ͢Δ͚ͩͰࡁΜͩΓͯ͠ศར Railsଆͱͯ͠ શͯͷϢʔεέʔεΛRailsຊମ๊͕͑ͳͯ͘ྑ͘ͳͬ ͍ͯΔ
RailsΞϓϦΛͬͯ͘Δͱɺ Ͳ͏ͯ͠ϥΠϒϥϦʹ खΛग़͢͜ͱʹͳΔ Ͳ͔ͬͷ୭͔͕దʹ࡞ͬͨϥΠϒϥϦ͕ࣗͷ࣮ Ҋ݅ͷχʔζΛ͍ͭᘳʹຬͨͯ͘͠ΕΔͱݶ Βͳ͍ ͔͍͍ͩͨ͠όάͬͯΔ ͷͰɺPRͨ͠ΓࣗͰ࡞Γͨ͠Γ͢ΔӋʹͳΔ
ͳͥଞਓͷόά ΛΑ͘౿Ήͷ͔ʁ όάΛ౿Ήʹίπ͕͋Δ ଞਓͷॻ͍ͨίʔυΛ৴༻͗͢͠ ͳ͍ ઌͬͪΐΛ͏
ଞਓͷॻ͍ͨίʔυ Λ৴༻͗͢͠ͳ͍ ಛʹɺձͬͨ͜ͱͳ͍ͷଞਓ͕ॻ͍ͨίʔ υͷ࣭Λతʹ৴པ͢ΔͷόΫνͰ͔͠ ͳ͍͠ɺ࣮ࡍෛ͚Δ͕͔֬ͳΓߴ͍ ͷͰɺରʹͳΔ͘όάΛ౿Έͨ͘ͳ͍߹ ɺͰ͖Δ͚ͩ৴པͷ͓͚Δ༑ਓ͕ॻ͍ͨϥΠ ϒϥϦ͚ͩΛ͏Α͏ʹ͢Δ
ઌͬͪΐΛ͏ ৽͍͚͠Ε৽͍͠΄ͲଟػೳͰચ࿅͞Ε͍ͯΔͣ ͳͷͰɺͳΔ͘৽͍͠ͷΛ͏͖ ʮރΕͨͷʯΛ͏ΑΓͦͷ΄͏ָ͕͍͠ Ruby: rbenv install 2.5.0-dev Rails: rails
new --dev Gem: gem 'hogehoge', git: 'https:/ /github.com/...'
To PR, or to Create Your Own? طଘͷϥΠϒϥϦେےͳͯ͘ɺͪΐͬͱखΛՃ͑ͨΒ ͍ʹͳΓͦ͏ =>
ΔΓ طଘͷϥΠϒϥϦͷίʔυΛಡΜͰΈͨΒશવμϝμϝͰɺ͔ ͳΓେ෯ʹॻ͖͕͑ඞཁ => ·͍͠ɻ૬खʹΑΔ͔ طଘͷϥΠϒϥϦͷΠέͯͳ͍ίʔυΛಡΜͰΔ͏ͪʹɺࣗ ͳΒͬͱΤϨΨϯτͳઃܭɾ࣮͕Ͱ͖Δ͜ͱʹؾ͍ͮͯ͠ ·ͬͨ => ࡞Δ͔͠
ͳͥOSSʹίϯτϦ Ϗϡʔτ͢Δͷ͔ʁ ίϯτϦϏϡʔτͬͯݴ͏ͳʂ ʮOSSʹίϯτϦϏϡʔτ͍ͨ͠ʯͱ͔ඍਖࢥ͍ͬͯͳ͍ ଞਓͷͨΊʹίʔυΛॻ͖͍ͨΘ͚Ͱͳ͘ɺ͕ࣗࣗͷ ΛࣗͰղܾ͍͔ͨ͠ΒΔ ࣗͷ෦ʹΰϛ͕མͪͯͨΒरͬͯΰϛശʹೖΕͨ͘ͳΔͷͱ Ұॹ
ڊਓͷݞʹͬͯ ίʔυΛॻ͘ͱ͍͏͜ͱ ݱͷRailsΞϓϦ։ൃɺແͷҒ େͳઌਓͨͪͷ͓ੈʹͳ͍ͬͯΔ ઌਓͨͪͷܙͱҨ࢈ΛआΓͯΔΠ ϝʔδ
ίʔυͷआΓ ίʔυͰฦ͢ ʮߩݙʯͱ͔͓͕͜·͍͠
ͦΜͳ͜ΜͳͰ͕ ࡞ͬͨϥΠϒϥϦ kaminari active_decorator action_args database_rewinder stateful_enum jb i18n_generators hocus_pocus
gem_src ͳͲͳͲ
ͳͥϥΠϒϥϦΛ ࡞Δͷ͔ʁ ͭʹʮϥΠϒϥϦΛ࡞Ζ͏ʂʯͱ͍͏త͋Γ͖Ͱͳ͍ ࡞ΒͣʹࡁΉͳΒ࡞Βͳ͍ʹӽͨ͜͠ͱͳ͍ɻϝϯςͱ͔μ ϧ͍͠ ͍͍ͨͷͷΠϝʔδ͕ઌʹ͋ͬͯɺԿ͔ͷͣΈʹ࣮ͷ Πϝʔδ͕͖߱ͬͯͯɺͦΕΛܗʹ͢Δײ͔͡ ͰͲ͏ͤ࡞Δ͔ΒʹΈΜͳʹͬͯΒ͑ͨΒ͍͍ͳɺͱ ࢥͬͯ࡞Δ
࡞Δͱ͖ͷίπ ͷҰൠԽɾہॴԽɺιϦϡʔγϣϯͷ൚༻ԽɺͷΑ͏ͳ நԽೳྗඞཁ ख͟ΘΓॏཁ RubyΒ͠͞ɺRailsΒ͠͞ͷԆઢ্͔Βҳ͠ͳ͍ ؾ࣋ͪΑ͞ == ΊΜͲ͘͘͞ͳ͞ υΩϡϝϯτΛΖ͘ʹಡ·ͳ͍͍ͯͩͨ͑͘Δͷ͕ཧ
ίʔυΛॻ͘ܦݧΛੵΉͱɺ ෆ۩߹Λෆ۩߹ͱݟൈ͘ྗ͕ ͭ͘ RubyͷϥΠϒϥϦʹͱͬͯɺख͟ΘΓͷѱ ͞༻ײͷؾ࣋ͪྑ͘ͳ͞ෆ۩߹ ͜͏ͯ͠ײੑ͕ຏ͔Ε͍ͯ͘ ٯʹɺؾ࣋ͪͷྑ͍ίʔυίϛοτΛͨ͘ ͞ΜಡΉ͜ͱॏཁ
Rubyͷ ΤίγεςϜͷΑ͞ ཉ͍͠ͱࢥͬͨͷ͕͙͢࡞ΕΔ ࡞ͬͨΒଈ࠲ʹΠϯλʔωοτʹެ։Ͱ͖ Δ ެ։ͨ͠Β͙͢ʹ୭͔͕ݟͯ͘ΕΔɺͬ ͯ͘ΕΔɺϑΟʔυόοΫΛ͘ΕΔ
ͳͥRubyͷΤίγεςϜ ͜Μͳʹ͏·͘ճ͍ͬͯΔͷ ͔ʁ ͬͺRuby͔ͩΒʁ RubyGemsͱ͍͏γϯϓϧͰख़ͨ͠ύοέʔδϯάγεςϜͷ͓͔͛ ͦͷRubyGemsͷػೳͷΓͳ͍ͱ͜ΖΛ͏·͘ิ͏Bundlerͷઈົͷ ͞͡Ճݮ GitHubͱ͍͏ GitHubͷΦϯϥΠϯίϛϡχςΟΛิ͢ΔϦΞϧͳRubyίϛϡχ ςΟͷଘࡏ
ͬͺRuby ݴޠ༷ͷӳޠͬΆ͞ ͍ίʔυͰॻ͚Δදݱྗ ͷߴ͞
ࣗવݴޠʹ͍ۙ ࣗવʹಡΊΔ ࣗવʹॻ͚Δ
ίϛϡχέʔγϣϯͷ ಓ۩ͱͯ͠༏Ε͍ͯΔ
νʔϜ։ൃʹ ͍͍ͯΔ ͓ࣄͰ͏ͷʹ͓͢͢Ί
OSSΓ্͕Γ ͍͢ ύονͷҙਤ͕ಡΈऔΓ ͍͢
GH্ͷιʔγϟϧίʔσΟϯά ͱϦΞϧͳRubyίϛϡχςΟͷ όϥϯε GH͚ͩͰੈք݁͠ͳ͍ ίʔυਓ͕ؒॻ͘ͷ͔ͩΒ ਓΛΔͱͦͷਓͷίʔυ͕ݟ͑ͯ͘Δ͜ͱ͋Δ ͱ͍͏͔ɺ͘͢͝Α͋͘Δ ͷͰɺ͓ؾʹೖΓͷίʔυ͕͋ͬͨΒͦͷ࡞ऀʹձ͍ʹߦ ͜͏ʂ
RubyίϛϡχςΟ ʹग़ձ͏ʹ ੈքதͰ։࠵͞Ε͍ͯΔΧϯϑΝϨϯε ʹࢀՃ͢Δͷ͕Ұ൪ͯͬͱΓૣ͍ ͍ΖΜͳҬͷΧϯϑΝϨϯεʹߦͬͯ ΈΔͱͦͷҬݶఆΩϟϥʹձ͑ͨΓ͢ ΔͷͰ͓͢͢Ί
RubyϓϩάϥϚʔΛͬͯΔ ͱੈքͷ͍ΖΜͳࠃʹߦ͚Δ ͦΕͧΕͷࠃʹݱͷ༑ୡ͕͍ ͯ؍ޫҊͯ͠Β͑ͨΓ͢ Δ ͍ΘΏΔrubyfriendsͬͯͭ
࣮ࡍʹձͬͨ͜ͱͷ͋Δ৴པͷ Ͱ͖Δ༑ਓͷॻ͍ͨϥΠϒϥϦ Λ͏ͱ͖ͬ͞ݴ͚ͬͨͲ ͭ·ΓɺΧϯϑΝϨϯεʹࢀՃ͢ Δ͜ͱͰަ༑ؔͷྠ͕͕ͬ ͯɺ݁Ռͱͯ͠ɺΦϯϥΠϯͰͷ ϓϨθϯεͷ্ʹܨ͕Δ
ࠓ·ͰʹࢀՃͨ͠ੈք ͷRubyΧϯϑΝϨϯε RubyConf RailsConf EuRuKo Ruby on Ales RubyConf Taiwan
RedDot RubyConf Lone Star RubyConf Ruby Shift RubyConf India Rails Pacific Rails Israel Moutain West RubyConf Modern Web RubyConf Philippines RubyConf Brasil Rails Club RubyConf Malaysia ͳͲͳͲ
ຊ͕ੈքʹތΔRuby ͷࠃࡍΧϯϑΝϨϯε
RubyKaigi
ͨͪͳͥKaigi ʹߦ͘ͷ͔ʁ
ͷ߹ ಌΕͷRubyistͨͪΛݟ ͠ʹߦ͘ ͕࠷ॳͷ͖͔͚͔ͬͳ͊ʁ
ͳͥಌΕͷRubyistͨͪ rubyfriendsͨͪʹ ձ͍ʹߦ͖͍ͨͷ͔ʁ "Rubyistist"͔ͩΒ
Rubyist-ist RubyΛॻ͍ͯΔਓ͕ͨͪ ؾʹͳͬͯ͠ΐ͏͕ͳ͍ͱ ͍͏පؾ
Rubyististʹ ͳ͖͔͚ͬͨͬ Rubyist Hotlinks ॳظͷRubyKaigi Railsษڧձ@౦ژ Asakusa.rb
Rubyist Hotlinks Δͼ·ͷਓؾίʔφʔ ͜ΕΛಡΜͰɾɾɾʰRubyistʱʹ͋ ͕͜ΕΔΑ͏ʹͳͬͨͷͩʂ ͩ͞͞͞Μɺ͋Γ͕ͱ͏͍͟͝·͢ʂ
RubyistRubyist ʹͻ͔Ε߹͏ ࠷ॳɺRuby࡞ͬͯΔਓͱ͔Δͼ·ʹࡌͬͯͨਓͷ࣮ ͕ݟΕΔɺͱ͍͏ϛʔϋʔͳత Rubyist͕େू·ΔͱɺԿ͔ͱΜͰͳ͍͜ͱ͕ى ͜Δ ωοτͷதͷੈքͱϦΞϧͷੈք͕ަΘͬͯԽֶԠ ͕ى͖Δʹډ߹ΘͤΔͷָ͕͍͠
༨ஊͳ͕Βɺ
RubyistRubyistʹ ͻ͔Ε߹͏ɺͱ͍͑ ͜Εͦ͜Ҭ.rb ͷݪಈྗ
AsakusaҬ ͷ߹
ҎԼͷ໘ʑ͕ΈΜͳͷՈ ͔Βెาݍͱ͍͏ҟৗࣄଶ @_ko1 @nalsh @_zzak @shyouhei @hsbt @k0kubun
ͦΜͳAsakusaͰmeetup ͩͯ͠͠ɺ͏10 ࠓͰຖि1ճू·ͬͯμϕΓ ଓ͚ͯͯ·͖ͩͳ͍ͷ ͰɺRubyistͬͺ໘ന͍ͳʔ
ؓٳ
ͳͥRubyKaigi Λ࢝Ίͨͷ͔ʁ ͦΜͳେ͖ͳRubyKaigiͷલऀ͕ͨͪ೩͑ ਚ͖͔ͨԿ͔Ͱɺ͏ΊΑ͏ͥͱ͔ݴ͍ग़͠ ͨ RubyKaigi͕ͳ͘ͳͬͯ͠·ͬͨΒͱͯ ൵͍͠ͷͰɺ͡Ό͕͋Γ·͢ɺͬͯݴͬͨ
ͳͥͨͪKaigi Λ͢Δͷ͔ʁ ੈքதͲ͜ͷΧϯϑΝϨϯεʹߦͬͯ ɺ͕ࣗ࠷ߴʹຬͰ͖ΔཧͷΧϯ ϑΝϨϯε͕ແ͍͔Β ແ͍ͷͰɺࣗͰ࠷ߴͷΧϯϑΝϨϯε Λ࡞Δ͔͠ͳ͍
࠷ߴͷ ΧϯϑΝϨϯε ୭͕Ͳ͏ݟͯRubyKaigi ͍͍ͩͨຖ࠷ߴ(ࣗը ࣗࢍ)
ͳͥRubyKaigi ࠷ߴͳͷ͔ʁ ࢀߟจݙ: Gaijin Guide to RubyKaigi https:/ /schneems.com/ 2017/09/27/gaijin-guide-to-
rubykaigi/
Gaijin Guide to RubyKaigi "If you’re looking to get a
talk accepted there, know that the conference HEAVILY favors technical talks" — schneems
RubyKaigi ςΫ͍ͷ͕͓͖ ·͊ͦ͏ͳΜ͚ͩͲɻ ʮΊͬͪΌςΫ͍ͭఏҊ͠ͳ ͍ͱ࠾͞Εͳ͍Αʯͩͱ30 ͙Β͍͔͠Θ͔ͬͯͳ͍
ԶΒ͕ԿͷͨΊʹRubyKaigi ͬͯΔͷ͔͕ͥΜͥΜ Θ͔ͬͯͳ͍
RubyKaigiɺ Rubyͷɺ ΦʔϓϯιʔεɾιϑτΣΞͷɺ ςΫϊϩδʔɾΧϯϑΝϨϯεͰ ͢ɻ
RubyKaigiɺීஈ͔Β ίʔυΛॻ͍ͯΔਓͷΛ ฉͨ͘ΊͷΧϯϑΝϨϯε
RubyKaigiBlind Reviewͱ͔͠ͳ͍ ීஈ͔Βpublicͳͱ͜ΖͰίʔυΛ ॻ͍ͯΔਓ͔͠࠾༻ͨ͘͠ͳ͍͔Β ϓϩϙʔβϧͷ࡞จςΫχοΫͱ͔ Ͳ͏Ͱ͍͍
ͳͷͰɺRubyKaigiͰ ొஃ͢Δͷ࣮؆୯ ྑ͍ίʔυΛॻ͘ ͦΕΛࡽ͢ ͦΕʹ͍ͭͯ͢ ͦΕ͚ͩ
ͳͥRubyKaigiίʔυΛ ॻ͍ͯΔਓ͔͠ొஃͰ͖ͳ͍ ͷ͔ʁ ͦ͏͍͏ਓʹݶཱͬͯͭεΩϧ͕ෆͯ͠ ͍ͯΒΕ͍ͯͳ͍߹͕ଟ͍͔Β ͦ͏͍͏ਓͷ͜ͱΛ͕ͬͱΓ͍͔ͨΒ ͦ͏͍͏ਓͷ͜ͱΛΈΜͳʹͬͱͬͯ ΄͍͔͠Β
ͱ͜ΖͰࠓͷ RubyKaigiͷτϐοΫ ݦஶͳภΓͬΓ
ࠓͷRubyKaigiͰ ཱͬͨτϐοΫ3બ type concurrency (Fiber) performance
ͳͥRubyKaigi্ه3ͭ ͷʹภ͍ͬͯͨͷ͔ʁ
Ruby 3͕ࢦ͢ 3ͭͷΰʔϧ type concurrency performance
RubyKaigiͷ͏ ͻͱͭͷϛογϣϯ
Rubyͷ։ൃΛۦಈ ͢Δ
Rubyͷ։ൃ ͕ࣗͨͪຖͬͯΔݴޠ͕ʑ࡞ΒΕ͍ͯ Δ ͦΕຊͰ ࣗʹ͍ۙͱ͜ΖͰ ࣗͦͷӦΈʹࢀՃ͢Δ͜ͱ͕Ͱ͖Δ
͜Εͬͯੌ͘ͳ͍ Ͱ͔͢ʁ ͦΜͳதɺಉ࣌ʹຊͰRuby ϓϩάϥϚʔΛͬͯΔͬͯɺ ح͡Όͳ͍Ͱ͔͢ʁ ࠷ߴʹӡ͡Όͳ͍Ͱ͔͢ʁ
͜Μͳ಄ͷ͓͔͍͠ޫܠ͕ ݟΕΔͷRubyKaigi͚ͩ Ͱ͢Αʂ
RubyKaigiɺͦΜͳRuby ͷ։ൃͷखॿ͚Λ͍ͨ͠ Rubyͷ࣍ظόʔδϣϯͷΰʔϧʹ͔࣮ͬͯࡍʹίʔυΛ ॻ͍͍ͯΔਓ͕ͨͪίʔυΛ࣋ͪدͬͯ ࣗͷॻ͍ͨίʔυʹ͍ͭͯࣗຫେձΛ܁Γ͛ͯ ͔ͦ͜Β͕ٞੜ·Εͯ Rubyࣗମͷ։ൃ͕ਐΉ ͦΜͳ͖͔͚ͬ
Rubyͷΰʔϧ RubyKaigiͷΰʔϧ
͜Ε͕Βͷࢦ͢ RubyKaigiͩʂ
ͱ͍͑ɺࠓͷKaigiͷ τϐοΫͪΐͬͱ ภΓ͔͗ͨ͢ RubyKaigiͰଟ༷ੑେࣄʹ͍ͨ͠ ଟ༷ੑળ ΈΜͳͱҧ͏͜ͱΛͬͯΔਓͷ Λฉ͖͍ͨ
ͨͱ͑ɺ Railsͷ͓͔͛ͰRubyWebͷੈքΛશʹ ͠ਚͯ͘͠͠·ͬͨͷͰ ͡Ό͋Rubyͷ࣍ͷ૬ख୭ͩʁ ͦ͜Ͱ࣮ࡍʹखΛಈ͔ͯ͠ઓ͍ͬͯΔਓͷ Λͬͱฉ͖͍ͨʂ
ੈք·ͩ·ͩະղܾ ͷͰຬ͍ͪͯΔ RubyͰɺ·ͩ୭ͬͯͳ͍͜ͱΛ Ζ͏ʂ ϓϩϙʔβϧ͓ͪͯ͠·͢ʂ (͢Έ·ͤΜɺ͕ΜΓ·͢)
·ͱΊ
RubyͷΑ͞ ͻͱͭ͡Όͳ͍ ΈΜͳ͕ͪͬͯΈΜͳ͍͍ օ͞ΜͦΕͧΕࣗͳΓͷRuby ͷΑ͞Λݟ͚ͭͯΈ͍ͯͩ͘͞
ຊ ͓ͨ͜͠͠ͱ
RubyਓؒΒ͠͞ Λଚॏͯ͘͠ΕΔ
͔ͩΒɺͨͪ RubyϓϩάϥϚʔ ਓؒΛଚॏ͍ͨ͠
RubyͷૉΒ͠͞ ਓؒͷૉΒ͠͞ʂ
end