Slide 1

Slide 1 text

Attributes API ࣮ફ @alpaca_tc 1

Slide 2

Slide 2 text

プロフィール @alpaca_tc ΞϧύΧ͍ͨͪΐ͏ Moneyforward, inc Engineer 2

Slide 3

Slide 3 text

Έͳ͞Μ 3

Slide 4

Slide 4 text

Attributes API 4

Slide 5

Slide 5 text

஌ͬͯ·͔͢ʁ 5

Slide 6

Slide 6 text

6

Slide 7

Slide 7 text

͜Ε 7

Slide 8

Slide 8 text

!ʮଘࡏ͸஌ͬͯΔʯ 8

Slide 9

Slide 9 text

࢖ͬͯ·͔͢ʁ 9

Slide 10

Slide 10 text

"ʮ࢖ͬͨ͜ͱͳ͍ʯ 10

Slide 11

Slide 11 text

kamipo͞Μᐌ͘ 11

Slide 12

Slide 12 text

” “ ΧελϚΠζ ͍ͯ͠Δਓ͸ 2 % 12

Slide 13

Slide 13 text

120ਓ * 2% HERE 13

Slide 14

Slide 14 text

120 * 2% = 2.4 ਓ ձ৔ 14

Slide 15

Slide 15 text

ࠓ೔͸ͦΜͳ APIΛ࢖͍͜ͳ͢࿩ 15

Slide 16

Slide 16 text

࿩͢͜ͱ • Attributes APIͱ͸ • Attributes APIྺ࢙ • ࣮ફฤ 16

Slide 17

Slide 17 text

• Attributes APIͱ͸ • Attributes APIྺ࢙ • ࣮ફฤ ࿩͢͜ͱ 17

Slide 18

Slide 18 text

ARͷܕม׵ Attributes API͸ܕม׵ʹ·ͭΘΔAPI 18

Slide 19

Slide 19 text

ARͷܕม׵ ܕͷఆٛ͸Ͳ͜ʁ 19

Slide 20

Slide 20 text

ARͷܕม׵ AR/AM::Type (DBʹΑͬͯएׯҟͳΔ) 20

Slide 21

Slide 21 text

Ϣʔβʔೖྗͷม׵ #cast DBͷ஋ʹม׵ #serialize DBͷ஋͔ΒRubyΦϒδΣΫτʹม׵ #deserialize Typeͷऔಘ 21

Slide 22

Slide 22 text

ARͷܕม׵ ΧϥϜຖʹType 22 ͜ΕʹΑΓɺܕม׵͕ߦΘΕΔ

Slide 23

Slide 23 text

Attributes APIͱ͸ ARͷܕม׵ʹϑοΫ͢ΔAPI User Record DB 23

Slide 24

Slide 24 text

Attributes APIͱ͸ ARͷܕม׵ʹϑοΫ͢ΔAPI User Record DB age: integer owner: boolean; false schema 24

Slide 25

Slide 25 text

Attributes APIͱ͸ ARͷܕม׵ʹϑοΫ͢ΔAPI User Record DB age: integer owner: boolean; false schema Attributes API 25

Slide 26

Slide 26 text

Attributes APIͱ͸ ARͷܕม׵ʹϑοΫ͢ΔAPI User Record DB age: string owner: boolean; true schema Attributes API 26

Slide 27

Slide 27 text

Attributes APIͱ͸ ίʔυʹ͢Δͱ͜͏ͳΔ ܕม׵ΛมߋͰ͖Δ 27

Slide 28

Slide 28 text

׆༻ํ๏͸ ޙ൒ͷ࣮ફฤʹͯ 28

Slide 29

Slide 29 text

• Attributes APIͱ͸ • Attributes APIྺ࢙ • ࣮ફྫ ࿩͢͜ͱ 29

Slide 30

Slide 30 text

Attributes APIྺ࢙ Rails 4.2.0 ARʹAttributes APIొ৔ private API ܕม׵·ΘΓͷϦϑΝΫλϦϯά 30

Slide 31

Slide 31 text

Attributes APIྺ࢙ Rails 5.0.0 public APIԽ 31

Slide 32

Slide 32 text

Attributes APIྺ࢙ Rails 5.2.0 ɾActiveModelʹAttributes API ɾ·ͩprivate API ɾdirty/ivarͱͷޓ׵ੑ" ɾpublic APIʹͳΔͷ͸Rails7(?) 32

Slide 33

Slide 33 text

Attributes APIྺ࢙ ActiveModel::Attributes AMͰܕΛࢦఆͰ͖ΔΑ͏ʹͳͬͨ 33

Slide 34

Slide 34 text

Attributes APIྺ࢙ alpaca-tc/active_model_attributes_backport ~5.1Ͱ΋ɺ΄΅࢖͑·͢ 34

Slide 35

Slide 35 text

Attributes APIྺ࢙ 35

Slide 36

Slide 36 text

Attributes APIྺ࢙ Private APIͳͷͰࣗݾ੹೚Ͱ 36

Slide 37

Slide 37 text

• Attributes APIͱ͸ • Attributes APIྺ࢙ • ࣮ફฤ ࿩͢͜ͱ 37

Slide 38

Slide 38 text

࣮ફฤ Attributes API ࢖͍ํ ศརͳ׆༻ํ๏Λ঺հ 38

Slide 39

Slide 39 text

ᶃܕͷࢦఆ ࣮ફฤ 39

Slide 40

Slide 40 text

೚ҙͷܕΛࢦఆ ActiveModelͩͱಛʹخ͍͠ ☺ ࣮ફฤ 40 ᶃܕͷࢦఆ

Slide 41

Slide 41 text

ᶄσϑΥϧτ஋ͷઃఆ ࣮ફฤ 41

Slide 42

Slide 42 text

ᶄσϑΥϧτ஋ͷઃఆ ࣮ફฤ DBҎ֎ͷॳظ஋ΛઃఆͰ͖Δ Ruby WorldͰಈతͳ஋Λઃఆ after_initializeͰͷॳظԽ͕ෆཁʹͳΔ 42

Slide 43

Slide 43 text

ᶅԾ૝ଐੑ ࣮ફฤ 43

Slide 44

Slide 44 text

ᶅԾ૝ଐੑ ࣮ફฤ DBʹΧϥϜͷଘࡏ͠ͳ͍ΞΫηα attr_accessor+ܕͷΑ͏ͳ࢖͍ํ ঝ୚νΣοΫϘοΫεͳͲ AttributeMethods΋࢖͑Δ 44

Slide 45

Slide 45 text

ᶆಠࣗΩϟετ Attributes APIͰಠࣗͷܕΛࢦఆͰ͖Δ ࣮ફฤ 45 AM::Type::ValueΛܧঝͨ͠ΫϥεΛఆٛ

Slide 46

Slide 46 text

࣮ફฤ ࢖͏ଆ 46 Symbol ͔ ΠϯελϯεΛ౉͢ ॳظԽͷҾ਺΋౉ͤΔ

Slide 47

Slide 47 text

ྫ: ి࿩൪߸ ࣮ફฤ ਺஋Ҏ֎ͷ஋Λ࡟আ͍ͨ͠ 47

Slide 48

Slide 48 text

࣮ફฤ ਺஋Ҏ֎Λফ͢จࣈܕΛొ࿥ 48

Slide 49

Slide 49 text

࣮ફฤ Attribute APIͰܕΛ্ॻ͖͢Δ 49

Slide 50

Slide 50 text

ᶆಠࣗΩϟετ ܕɾܗࣜΛએݴతʹॻ͚Δ ࣮ફฤ before_validationͷ੔ܗॲཧ͕ཁΒͳ͍ 50

Slide 51

Slide 51 text

ᶇ҉߸Խ DB<=>ARͰՄٯ҉߸Λ͍ͨ͠ ࣮ફฤ 51

Slide 52

Slide 52 text

ݸਓ৘ใɾձࣾͷൿಗ৘ใ ηΩϡϦςΟ͕େࣄ ࣮ફฤ 52

Slide 53

Slide 53 text

Attributes APIͳΒ… ࣮ફฤ 53

Slide 54

Slide 54 text

࣮ફฤ ҉߸Խɾෳ߹Խ 54

Slide 55

Slide 55 text

alpaca-tc/active_record_encryption ࣮ફฤ 55 Attribute APIʹΑͬͯ ҉߸Խ/෮߸ԽΛӅṭ 55

Slide 56

Slide 56 text

৽نࣄۀʹಋೖத ࣮ફฤ 56

Slide 57

Slide 57 text

Attributes API͸݁ߏศར ActiveModelʹ΋ೖΓɺར༻γʔϯ͕૿͑ͨ ·ͱΊ ͥͻ͝ར༻͍ͩ͘͞ 57 ׆༻ํ๏͸ݟ͖͑ͯ·͔ͨ͠ ʁ