Slide 1

Slide 1 text

All About Ruby in 2019 2019೥ɺվΊͯ஫໨͢ΔRuby―RubyKaigi͔ΒݟΔRuby 3.0ͷՄೳੑ Presentation by Uchio Kondo @Developers Summit 2019 Fukuoka

Slide 2

Slide 2 text

Engineer @ GMO Pepabo, Inc. Uchio Kondo / @udzura https://blog.udzura.jp/ * ɹɹɹɹɹɹɹɹ ϩʔΧϧΦʔΨφΠβʔ/ొஃऀ * CloudNative Days Fukuoka 2019 νΣΞΦʔΨφΠβʔ * ίϛϡχςΟ: Fukuoka.rb ɺ #;͘͹Ͷͯ͢ * Duolingo Ruby Leaguer

Slide 3

Slide 3 text

Ruby Language

Slide 4

Slide 4 text

࣭໰Ͱ͢ • ͓࢓ࣄͰRuby࢖͍ͬͯ·͔͢ʁ • ͓࢓ࣄͰRails͡Όͳ͍RubyΛ࢖͍ͬͯ·͔͢ʁ • RubyKaigi 2019 in Fukuokaɺߦ͖·͔ͨ͠ʁ

Slide 5

Slide 5 text

Ruby in 2019

Slide 6

Slide 6 text

Ruby • ޿͘࢖ΘΕ͍ͯΔϓϩάϥϛϯάݴޠͰ།Ұɺ೔ຊਓ͕։ൃͨ͠΋ͷ • εΫϦϓτݴޠɺΦϒδΣΫτࢦ޲ɺಈతܕ෇͚ • ࠷৽൛: 2.6.4 @ 2019-08-28 • ։ൃ൛: 2.7.0-preview1 @ 2019-05-31

Slide 7

Slide 7 text

TryRuby! • https://ruby.github.io/TryRuby/

Slide 8

Slide 8 text

Ruby on Dockerhub • Docker community͕४උͨ͠RubyҎ֎ʹɺRuby core teamͷϏϧυͯ͠ ͍ΔΠϝʔδ͕ଘࡏ͢Δɻ৔߹ʹΑͬͯ͸ͪ͜ΒΛ࢖ͬͨํ͕͍͍͔΋ • Docker community൛: ruby:2.6.3-* • Ruby core team൛: rubylang/ruby:2.6.3-* • trunk(एऀͷ͍͏master) ΋؆୯ʹར༻Ͱ͖Δ

Slide 9

Slide 9 text

diff • ઃఆ͞Ε͍ͯΔ؀ڥม਺͕ҧ͏ɻDocker community ެࣜͷ΋ͷ͸บ͕͋ Δҹ৅... ٯʹ bionic Ҏ֎ͷbase image͸Docker൛ʹ͔͠ͳ͍

Slide 10

Slide 10 text

RubyϦϙδτϦGitԽ • ௕Β͘ Subversion ͕ϝΠϯϦϙδτϦ͕ͩͬͨGitʹҠߦ • GitHub ͳͲͰϛϥʔ͍͕ͨ͠ git-svn ͸ͱͯ΋໘౗ • ύονΛૹͬͯ͘Εͨਓͷ৘ใͳͲΛ͏·͘ࡌ͍ͤͨ • https://k0kubun.hatenablog.com/entry/ruby-core-2019 • https://www.hsbt.org/diary/20190423.html

Slide 11

Slide 11 text

git.ruby-lang.org • ެࣜͷϦϙδτϦ͸cgitͰίϛϡχςΟ͕ϗετ͍ͯ͠Δ • ʮGitHubԽʯ͸͍ͯ͠ͳ͍ • ͱ͸͍͑clone͍ͨ͠ࡍ͸GitHubͷϛϥʔਪ঑ • GitHubʹPRΛग़ͤ͹൓өͯ͘͠ΕΔ͠ɺίϯτϦϏϡʔλʹ΋ܝࡌ͞Ε Δʢʂʂʣ • Git ͷ෼ࢄϦϙδτϦͰ͋Δͱ͜ΖͷϝϦοτ https://git.ruby-lang.org/ruby.git/

Slide 12

Slide 12 text

ͪͳΈʹ • ඪ४ϥΠϒϥϦ͸ gem Խ͕΄΅ऴΘ͍ͬͯΔ • https://stdgems.org/ • GitHub ্Ͱɺ Ruby ίΞͱ͸ผͷϦϙδτϦʹͳ͍ͬͯΔ
 ʢRubyίΞࣗମ͸ɺgitwebʹ͋Δʣ • https://github.com/ruby/

Slide 13

Slide 13 text

ͪͳΈʹ • ඪ४ϥΠϒϥϦͰ͋ͬͯ΋ɺʮ࠷৽൛ʯΛΠϯετʔϧͯ͠ར༻͕Մೳ $ gem install specific_install $ gem specific_install http://github.com/ruby/irb $ gem list -d irb *** LOCAL GEMS *** irb (1.1.0.pre.2, 1.0.0) Author: Keiju ISHITSUKA Homepage: https://github.com/ruby/irb License: BSD-2-Clause Installed at (1.1.0.pre.2): /Users/udzura/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0 (1.0.0, default): /Users/udzura/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0 Interactive Ruby command-line tool for REPL (Read Eval Print Loop).

Slide 14

Slide 14 text

ruby-jp • ೔ຊޠΛ࿩ͤΔRubyistʹΑΔڊେSlack͕Ͱ͖ͨ • https://ruby-jp.github.io/ • > ruby-jp ͸ Ruby ϓϩάϥϚʔಉ࢜ͷަྲྀΛ໨తͱͨ͠ Slack ϫʔΫε ϖʔεͰ͢ɻ
 > ࢀՃऀͷٕज़ϨϕϧʹؔΘΒͣɺ࣭໰ɾ૬ஊɾ৘ใަ׵ΛؾܰʹͰ͖Δ ৔Λ໨ࢦ͍ͯ͠·͢ɻ

Slide 15

Slide 15 text

Where Ruby is used • Web Application Framework: Ruby on Rails • 6.0 released @ 2019-08-15

Slide 16

Slide 16 text

Where Ruby is used • Logging middleware: Fluentd • A member project of Cloud Native Computing Foundation

Slide 17

Slide 17 text

Where Ruby is used • Infrastructure as Software: • Chef/Itamae • Vagrant • Serverspec

Slide 18

Slide 18 text

Where Ruby will be used? • Frontend!!! • Opal • Data Science • Red Data Tools

Slide 19

Slide 19 text

͓·͚: mruby • ʮ૊ΈࠐΈʯ޲͚ mruby • ಛ௃: • CRuby ͱൺ΂όΠφϦ͕খ͔ͬͨ͞ΓলϝϞϦ
 ʮશ෦ೖΓʯmrubyόΠφϦ/static libΛ࡞Γ΍͍͢
 C API͕੔උ͞Ε͍ͯΔ • ͨͩ͠ɺࠓ೔͸CRubyͷ࿩Λத৺ʹ͠·͢...

Slide 20

Slide 20 text

RubyKaigi in 2019 https://rubykaigi.org/2019

Slide 21

Slide 21 text

Venue • ෱Ԭࠃࡍձٞ৔ @ 2019-04-18 ~ 20

Slide 22

Slide 22 text

԰୆ϥϯν

Slide 23

Slide 23 text

࠙਌ձ

Slide 24

Slide 24 text

Talks

Slide 25

Slide 25 text

Topics • Keynotes: • About Ruby 3 and its future by Matz • Branch Maintainer’s Life by nagachika • Extreme optimization tech for Ruby by Jeremy • Talks: • C-level Ruby optimization / specification details • Ecosystems such as bundler, RSpec, Typings, Homebrew... • JRuby / TruffleRuby / mruby... / serverless, containers, cloudnative...

Slide 26

Slide 26 text

Ruby committers vs the world • Photo from: https://tech.drecom.co.jp/rubykaigi-2019-day3-report/

Slide 27

Slide 27 text

Ruby updates in (2.3..2.6)

Slide 28

Slide 28 text

Ruby 2.3.0 • Frozen String Literal ϓϥάϚ • did_you_mean gem ͷόϯυϧ • ʮ&.ʯΦϖϨʔλͷಋೖɻnilͰ΋ͳΔ΂҆͘શʹϝιουݺͼग़͠ • ύϑΥʔϚϯεͷվળʢProc#call ͷ࠷దԽͳͲʣ

Slide 29

Slide 29 text

Ruby 2.4.0 • Fixnum/Bignumͷ౷߹ • binding.irb ͱॻ͚ΔΑ͏ʹͳΔ • ύϑΥʔϚϯεվળʢHashͷ಺෦σʔλߏ଄มߋͳͲʣ

Slide 30

Slide 30 text

Ruby 2.5.0 • rescue/else/ensure Λ do/end ϒϩοΫʹ௚઀ॻ͚ΔΑ͏ʹ • ΧόϨοδͷڧԽʢ෼ذΧόϨοδͱϝιουΧόϨοδͷαϙʔτʣ • ύϑΥʔϚϯεͷվળʢVMͰͷtrace໋ྩͷ੔ཧɺϒϩοΫ౉͠ͷํࣜม ߋɺERBͷվળʣ

Slide 31

Slide 31 text

Ruby 2.6.0 • JITͷಋೖ • RubyVM::AST ͷಋೖ • ऴ୺ͳ͠Rangeͷಋೖ • ύϑΥʔϚϯεͷվળ
 ʢϒϩοΫݺͼग़͠ͷվળɺίϧʔνϯͷωΠςΟϒԽʣ

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

Six Years of Ruby Performance • From RubyKaigi 2019 https://rubykaigi.org/2019/presentations/codefolio.html

Slide 34

Slide 34 text

What’s new in Ruby 2.7.0 !!

Slide 35

Slide 35 text

Caveats • ਖ਼ࣜϦϦʔεલͷόʔδϣϯͷ࢓༷ͳͷͰมߋ͢Δ͜ͱ͕͋Γ·͢ • ࣮ࡍൃදޙʹ2ՕॴมΘ͍ͬͯ·͢ʼʻ • ൃද࣌఺ʢ2019-08-29 17:00ʣͰͷ৘ใͱͳΓ·͢

Slide 36

Slide 36 text

Pattern matching • case ... in ... ͱ͍͏จ๏Λಋೖ • ෳࡶͳߏ଄ͷϚονϯάͷधཁʹԠ࣮͑ͯ૷ɻ
 ΨʔυઅͳͲ΋͋Δ • Duck TypingΛར༻ͯ͠Ϛονϯά͢ΔΫϥεΛ֦ுͰ͖Δ http://blog.akanumahiroaki.com/entry/2019/05/02/200000

Slide 37

Slide 37 text

Pattern matching: demo

Slide 38

Slide 38 text

Numbered parameter in block https://autopp-tech.hatenablog.com/entry/2019/03/19/095500

Slide 39

Slide 39 text

Changed! (edited after presentation) • @1, @2, @3 -> _1, _2, _3 • _1, _2, _3 ͱ͍͏ϩʔΧϧม਺͕͋ͬͨΒܯࠂ͕ग़ΔΑ͏ʹͳΓ·͢

Slide 40

Slide 40 text

Beginless range https://blog.saeloun.com/2019/08/19/ruby-2-7-adds-beginless-range.html

Slide 41

Slide 41 text

Pipeline operator https://dev.to/baweaver/ruby-2-7-the-pipeline-operator-1b2d ※ ͜Ε͸ preview-1 ʹ͸ؚ·Εͣɺdev൛ͷΈͰ͢

Slide 42

Slide 42 text

reverted... (edited after presentation) > Maybe we would revisit the idea in the future (with different operator appearance)

Slide 43

Slide 43 text

.: operator

Slide 44

Slide 44 text

IRB improvement Syntax highlight ϝιουิ׬࣌ʹ υΩϡϝϯτ͕ग़Δ

Slide 45

Slide 45 text

More next generation features in Ruby

Slide 46

Slide 46 text

Typing • Current implementations: • Sorbet • ίʔυ಺ͷܕΞϊςʔγϣϯ • Steep • Gradual TypingɺܕఆٛϑΝΠϧ(.rbi) • ...

Slide 47

Slide 47 text

Sorbet demo:

Slide 48

Slide 48 text

Sorbet demo:

Slide 49

Slide 49 text

Steep demo:

Slide 50

Slide 50 text

Concurrency (Guild) • Many presentations by Koichi Sasada • "Guild Prototype" in RubyKaigi “2018” https://www.slideshare.net/KoichiSasada/guild-prototype

Slide 51

Slide 51 text

Guild Idea • Thread/FiberΛ͞ΒʹแΉ΋ͷͱͯ͠GuildʢԾ໊ʣΛಋೖ • Guildʹॴଐ͍ͯ͠ΔΦϒδΣΫτ͸ɺଞͷGuild͔Β৮Εͳ͍ • Guildಉ࢜ͰΠϛϡʔλϒϧͳΦϒδΣΫτ͚ͩΛɺνϟϯωϧͰڞ༗

Slide 52

Slide 52 text

Concurrency (AutoFiber) • Switch Fibers by I/O operations • ʮ໊લʯ໰୊... https://bugs.ruby-lang.org/issues/13618

Slide 53

Slide 53 text

Is Ruby dead??

Slide 54

Slide 54 text

What is being dead? • ୭΋࢖Θͳ͘ͳͬͨΒʁ • ։ൃ͕ఀࢭͨ͠Βʁ/׆ൃͰ͸ͳ͘ͳͬͨΒʁ • ࿩୊ʹͳΒͳ͘ͳͬͨΒʁ

Slide 55

Slide 55 text

Hype Cycles https://www.gartner.com/jp/research/methodologies/gartner-hype-cycle

Slide 56

Slide 56 text

Conclusion

Slide 57

Slide 57 text

The future • Ruby ͸ࠓ΋ΞΫςΟϒʹ։ൃ͕͞Ε͍ͯΔ • Ϣʔβ͕ଟ͍ݴޠͰ͸͋Δʹ΋͔͔ΘΒͣɺະདྷͷͨΊʹେ͖ͳมߋ͕ ೖ͍ͬͯΔͱ͜Ζ • ܕ҆શੑɺฒߦੑɺύλʔϯϚονͳͲͷ࠷ۙͷݴޠͷ੒ՌΛऔΓೖΕ Α͏ͱ͍ͯ͠Δ • ͏·͍͚͘͹ɺΑΓݱ୅తͳݴޠͱͯ͠࠶౓஫໨͕ू·Δ͔΋

Slide 58

Slide 58 text

มԽΛָ͠΋͏ Enjoy Programming, Enjoy Changes

Slide 59

Slide 59 text

[PR]

Slide 60

Slide 60 text

Fukuoka.rb #150 #149 @ 9/18(Wed) https://fukuokarb.connpass.com/event/144604/