Slide 1

Slide 1 text

10.years of Rails Development @a_matsuda ۜ࠲Rails #1

Slide 2

Slide 2 text

self Twitter: @a_matsuda GitHub: amatsuda

Slide 3

Slide 3 text

࢓ࣄ ྲྀ͠ͷٕज़ސ໰ۀΈ͍ͨͳ

Slide 4

Slide 4 text

झຯ

Slide 5

Slide 5 text

झຯ͸৯΂า͖

Slide 6

Slide 6 text

RubyϓϩάϥϚʔ / Railsϓϩά ϥϚʔ

Slide 7

Slide 7 text

ࠓ೔ͷ͓͸ͳ͠

Slide 8

Slide 8 text

΍ͬͺGinza SIX͔ͩΒ
 Rails 6ͷ࿩

Slide 9

Slide 9 text

΍ͬͺGinza SIX͔ͩΒ
 Rails 6ͷ࿩ ͱࢥ͚ͬͨͲɺ ͋Μ·Γ࿩͍ͨ͜͠ͱ͕ͳ͍ͷͰɺ

Slide 10

Slide 10 text

ʮRailsʹ͍ͭͯͷ஌ࣝΛަ׵͠ɺ ೔ʑͷ։ൃʹ໾ཱ͍ͯͯ͜͏ʯ

Slide 11

Slide 11 text

Rails։ൃऀͷํʁ

Slide 12

Slide 12 text

10೥Ҏ্Rails։ൃऀ
 ΍ͬͯΔํʁ

Slide 13

Slide 13 text

ͪΐͬͱੲ࿩

Slide 14

Slide 14 text

10.years.ago

Slide 15

Slide 15 text

github.com͕Ͱ͖ͨ೥

Slide 16

Slide 16 text

Rails͸͡Ί·ͨ͠

Slide 17

Slide 17 text

Asakusa.rbୈ1ճmeetupͷ
 ੒Ռ෺

Slide 18

Slide 18 text

ϦϙδτϦ͸4݄͔ΒGitHubʹஔ͔Ε͚ͯͨͲɺ ύον͸΀ΔΓ͡Όͳͯ͘BTSʹషΔํࣜͩͬͨ https:/ / rails.lighthouseapp.com/ projects/8994/tickets/623

Slide 19

Slide 19 text

͋Ε͔Β10೥

Slide 20

Slide 20 text

739 Commits ฏۉ5೔Ͱ1ίϛοτ͙Β͍ͱ͍͏ ͜ͱ͕Θ͔Δ

Slide 21

Slide 21 text

ࢥ͍ग़ਂ͍ίϛοτͨͪ

Slide 22

Slide 22 text

always enable pp on the Rails console https:/ /github.com/rails/rails/ commit/d54c7781

Slide 23

Slide 23 text

always enable pp on the Rails console 2011೥ͷ࣌఺Ͱmame͞Μͷ Ruby 2.5ͷ৽ػೳΛઌऔΓ͍ͯ͠ ͨ͜ͱ͕Θ͔Δ

Slide 24

Slide 24 text

for ... in => .each https:/ /github.com/rails/rails/ commit/22ed6cb7

Slide 25

Slide 25 text

for ... in => .each Railsਓͨͪ͸ each Λ࢖͏΋ͷͩ ͱࢥΘΕ͕͚ͪͩͲɺ࣮͸DHH ͸ for ... in Ͱॻ͍ͯͨʂ

Slide 26

Slide 26 text

treat fullwidth whitespace as a blank character https:/ /github.com/rails/rails/ commit/9c608603

Slide 27

Slide 27 text

treat fullwidth whitespace as a blank character String#blank? ͕શ֯εϖʔεͱ ͔ͦͷଞݟ͑ͳ͍จࣈΛશ෦ۭന ѻ͍͢ΔΑ͏ʹ ͭ·ΓɺString#blank? ஗ͨ͘͠ ͷΦϨΦϨ

Slide 28

Slide 28 text

Relation.where with no args can be chained with not, like, and not_like https:/ /github.com/rails/rails/ commit/de75af7a

Slide 29

Slide 29 text

Relation.where with no args can be chained with not, like, and not_like 4छྨͷsyntaxΛ࣮૷ͯ͠ఏҊ ࠓͷ where.not() ͷsyntax͸JeremyҊ where.like ͱ͔ where.not_like ΋
 ࣮૷͚ͨ͠ͲɺޙʹDHHʹϦόʔτ
 ͞Εͨ

Slide 30

Slide 30 text

tyop https:/ /github.com/rails/rails/ commit/c7f1bcd2

Slide 31

Slide 31 text

tabenai (typo) https:/ /github.com/rails/rails/ commit/407baa2b

Slide 32

Slide 32 text

tabenai (typo) ͍·ͩʹkamipo͞Μʹݴٴ͞Ε Δίϛοτ……

Slide 33

Slide 33 text

Space Oddity https:/ /github.com/rails/rails/ commit/d9bdb611

Slide 34

Slide 34 text

Space Oddity David Bowie͕๢͘ͳͬͨͷͰ͓ ͔͠ͳεϖʔεΛ୳ͯ͠ίϛοτ

Slide 35

Slide 35 text

Ruby and Rails ࣗ෼ͷओͳकඋൣғ͸Rubyͱ Railsͷؒͷ͋ͨΓ͔ͳɺͱࢥͬ ͯΔͷͰɺͪΐͬͱͦ͜΁Μͷ࿩ Λ͠·͢ɻ

Slide 36

Slide 36 text

kwargs & binding.local_variable_get Rails Ͱ࢖ͬͯΈΔ͜ͱͰ :if ͱ͔
 :unless ͱ͍͏ϢʔεέʔεΛൃݟ Ruby 2.2͋ͨΓͰ binding.local_variable_get Λ
 ಋೖ

Slide 37

Slide 37 text

frozen_string_literal https:/ /bugs.ruby-lang.org/ issues/8976#change-53900

Slide 38

Slide 38 text

frozen_string_literal Railsͷ .freeze ஍ࠈΛղফ͢Δ
 ͨΊʹRubyଆʹಋೖΛఏҊ

Slide 39

Slide 39 text

Refinements https:/ /github.com/rails/rails/ commit/571f0f32

Slide 40

Slide 40 text

Refinements Railsʹಋೖ͠(ͯRubiniusͰಈ͔ ͳ͘͠)ͨͷΦϨΦϨ

Slide 41

Slide 41 text

require_relative ͩ͞͞͞Μʹͦͦͷ͔͞Εͯ RailsͰ࢖ͬͯΈͨΒόάͬͯͨ Ruby 2.4͙Β͍Ͱमਖ਼

Slide 42

Slide 42 text

protected Railsք۾Ͱ΍ͨΒͱޡ༻͞Εଓ ͚͖ͯͨػೳ ΄΅શͯ private ͷؒҧ͍

Slide 43

Slide 43 text

When you say `protected` in Ruby, you might 99% be meaning `private` https:/ /github.com/ amatsuda/rails/commit/ 6832343c

Slide 44

Slide 44 text

࣮ࡍͷίϛοτ͸ϥΠϒϥϦ͝ͱʹ
 rdocͷग़ྗ݁ՌΛ֬ೝ͠ͳ͕Β

Slide 45

Slide 45 text

Privatize unneededly protected methods in Active Record https:/ /github.com/rails/rails/ commit/5b14129d ͳͲͳͲ

Slide 46

Slide 46 text

ηΩϡϦςΟؔ࿈ύον΋
 ͍͔ͭ͘ https:/ /github.com/rails/rails/ commit/87eab595 https:/ /github.com/rails/rails/ commit/dfa33fa3 ͱͦͷपล ͳͲͳͲ

Slide 47

Slide 47 text

௨Βͳ͔ͬͨఏҊͨͪ

Slide 48

Slide 48 text

Sexier migrations https:/ /github.com/rails/rails/ pull/1163

Slide 49

Slide 49 text

Sexier migrations migrationͷ t. Λ࡟Δ΍ͭ t. ཁΒͳ͍ͱࢥ͏Μ͚ͩͲͳ͊

Slide 50

Slide 50 text

automatic client side validation with HTML 5 "required" attribute https:/ /github.com/rails/rails/ pull/3590

Slide 51

Slide 51 text

automatic client side validation with HTML 5 "required" attribute Ϟσϧʹॻ͍ͨvalidationΛΫϥ ΠΞϯταΠυʹ΋൓ө 2011೥ʹఏҊ ࣌୅ΛઌऔΓ͗ͯͯ͢͠ݟૹΒΕ ͨ

Slide 52

Slide 52 text

Action Args ΞΫγϣϯϝιουʹҾ਺Λ ΀ΔΓ͸ग़ͯ͠ͳͯ͘ɺνϟοτͰ ఏҊͨ͠ؾ͕͢Δ DHHʹେےͰ͸ؾʹೖͬͯ΋Β͑ͨ ΋ͷͷɺࡉ͔͍෦෼ͷ࢓༷͕ંΓ߹ Θͣ٫Լ

Slide 53

Slide 53 text

օ͞Μ͔Βͷ :+1:׻ܴ͠·͢

Slide 54

Slide 54 text

͜Μͳײ͡ͰɺRailsຊମʹಥͬࠐΉҎ֎ʹ΋ɺ
 ϓϥάΠϯͱ࣮ͯ͠૷͢Δ͜ͱ΋͋Γ·͢

Slide 55

Slide 55 text

ϓϥΪϯ։ൃ

Slide 56

Slide 56 text

i18n_generators

Slide 57

Slide 57 text

i18n_generators I18nͷϦιʔεΛਓ͕ؒॻ͔ͳ͘ ͯΑ͘ͳΔ࠷ߴʹ΂ΜΓͳ΍ͭ 10೥લʹ࡞ͬͨ΍͚ͭͩͲɺ Rails 5.2Ͱະͩʹ࢖͑Δ

Slide 58

Slide 58 text

kaminari

Slide 59

Slide 59 text

kaminari ϖʔδωʔγϣϯ͢Δ΍ͭ Rails 3Ͱಈ͍ͯΔ΋ͷ͕ͳ͔ͬͨ ͷͰ࡞ͬͨ M, V, Cͷ3ͭͷϨΠϠʔʹ
 ·͕ͨΔػೳ

Slide 60

Slide 60 text

Rails 3ͷ৽ػೳɺRails Engine
 ͬͯ΍ͭͰ࡞ͬͯΈͨͯ͘࡞ͬͨ

Slide 61

Slide 61 text

ͨͿΜੈքͰ2൪໨͙Β͍ʹݹ͍
 ࣮༻ϨϕϧͷEngine

Slide 62

Slide 62 text

action_args

Slide 63

Slide 63 text

action_args DHHʹఏҊ͕௨Βͳ͔͚ͬͨͲɺgemͰ ͝ར༻͍͚ͨͩ·͢ Asakusa.rb໊ٛͰϝϯς શRailsϓϥάΠϯͷதͰҰ൪޷͖ ͱ͍͏͔ɺ͜Ε͕ೖͬͯͳ͍ͱRailsΞϓ Ϧॻ͚ͳ͍

Slide 64

Slide 64 text

active_decorator

Slide 65

Slide 65 text

active_decorator ϔϧύʔॻ͖ͨ͘ͳ͍(ϔϧύʔࢮΜͰ ΄͍͠) ઌߦϓϩμΫτ͕ͼͬ͘Γ͢Δ͙Β͍ ϔϘ͔ͬͨͷͰ࢓༷΋࣮૷΋1000ഒ͙ Β͍Ϛγͳ΍ͭΛࣗ࡞ OpinionatedͳσβΠϯ

Slide 66

Slide 66 text

OpinionatedͳσβΠϯ ࠷ۙͷόʔδϣϯͰ݁ہંΕͨͷ Ͱɺ෦෼తʹഊ๺ͨ͠ͱݴ͑Δ

Slide 67

Slide 67 text

html5_validations ຊମ΁ͷఏҊ͸௨Βͳ͔͚ͬͨͲ gemͰ͝ར༻͍͚ͨͩ·͢ ϓϥάΠϯ࡞Γͷڭࡐʹͪΐ͏Ͳ ͍͍͔΋

Slide 68

Slide 68 text

stateful_enum

Slide 69

Slide 69 text

stateful_enum AR֦ுܥ ΊͪΌΊͪΌ࣮༻త σβΠϯ΋࣮૷΋γϯϓϧͰ៉ྷ (ͩͬͨ)

Slide 70

Slide 70 text

erd

Slide 71

Slide 71 text

erd ERਤΛϒϥ΢β্Ͱΰχϣΰ χϣ͢ΔEngine ඍົʹະ׬

Slide 72

Slide 72 text

Rails Engine͍͍ΑͶ

Slide 73

Slide 73 text

hocus_pocus

Slide 74

Slide 74 text

hocus_pocus Rails Engineͷݶքʹ௅ઓͨ͠
 ҙཉ࡞ υΩϡϝϯτ͕օແͳͷͰͨͿΜ
 ࢖͑ͳ͍ web_consoleΛΠϯεύΠΞͨ͠ͱ ͍͏ྺ࢙తҙٛ

Slide 75

Slide 75 text

ͦΖͦΖ·ͱΊ

Slide 76

Slide 76 text

ʮRailsʹ͍ͭͯͷ஌ࣝΛަ׵͠ɺ ೔ʑͷ։ൃʹ໾ཱ͍ͯͯ͜͏ʯ

Slide 77

Slide 77 text

ͱ͍͏͜ͱͰɺ೔ʑͷ։ൃͷ࿩ Λ͠·ͨ͠

Slide 78

Slide 78 text

Railsϓϩάϥϛϯά͸ͨͷ͍͠

Slide 79

Slide 79 text

RailsϓϩάϥϛϯάͰ૲Λ
 ੜ΍ͦ͏ʂ

Slide 80

Slide 80 text

ଓ͖͸࠙਌ձͰʂ