Slide 1

Slide 1 text

גࣜձࣾλΠϛʔɹShintani Teppei ॳΊͯrails/railsʹ όάϨϙʔτΛग़ͯ͠Έͨ @euglena1215 Reject on Rails2023 @Gotanda

Slide 2

Slide 2 text

ࣗݾ঺հ ৽୩ ఩ฏʢ@euglena1215ʣ ● גࣜձࣾλΠϛʔ ● όοΫΤϯυΤϯδχΞ ● ϦδΣΫτ͞Εͨϓϩϙʔβϧ ○ ࠶ݱੑ͋Δ Rails ΞοϓάϨʔυ΁ͷಓ ● εΠΧήʔϜ ϋΠείΞɿ3099 εΠΧΛ2ݸ࡞Δํ๏஌ͬͯΔํ͍ͨΒ
 #rejectonrailsΛ͚ͭͯڭ͍͑ͯͩ͘͞

Slide 3

Slide 3 text

3

Slide 4

Slide 4 text

એ఻ λΠϛʔ͸ Kaigi on Rails ΛԠԉ͍ͯ͠·͢ 🥈🥈🥈

Slide 5

Slide 5 text

גࣜձࣾλΠϛʔɹShintani Teppei ॳΊͯrails/railsʹ όάϨϙʔτΛग़ͯ͠Έͨ @euglena1215 Reject on Rails2023 @Gotanda

Slide 6

Slide 6 text

ൃදͷഎܠ ● Rails͕ݪҼͬΆ͍όάʹૺ۰ͯ͠ॳΊͯrails/railsʹόάϨϙʔτΛग़ͨ͠ɻ ● ͲΜͳྲྀΕͰૺ۰͠ɺௐࠪͯ͠όάϨϙʔτΛग़ͨ͠ͷ͔Λ
 ڞ༗͢Δ͜ͱͰrails/railsʹόάϨϙʔτΛग़͢͜ͱ΁ͷ
 ৺ཧతϋʔυϧΛԼ͍͛ͨɻ ● rails/rails΁όάϨϙʔτΛग़ͨ͜͠ͱ͕ͳ͍ਓ޲͚ͷൃදͰ͢ɻ

Slide 7

Slide 7 text

ൃදΛฉ͘લ rails/rails΁ͷόάϨϙʔτ͸ ؤுͬͯ΋ग़͢ͷ೉ͦ͠͏...

Slide 8

Slide 8 text

ൃදΛฉ͍ͨޙ rails/rails΁ͷόάϨϙʔτ͸ ؤுͬͨΒग़ͤͦ͏ʂ

Slide 9

Slide 9 text

໨࣍ 1. όάͱͷૺ۰ 2. ࠷খͷ࠶ݱํ๏ͷཱ֬ 3. όάϨϙʔτΛग़͢

Slide 10

Slide 10 text

1 όάͱͷૺ۰

Slide 11

Slide 11 text

όάͱͷૺ۰ ʲલఏʳλΠϛʔͰ͸Railsͷmain branch Λ࢖ͬͨςετΛCIͰ࣮ߦ ͍ͯ͠·͢ɻ ઃఆํ๏͸ʮrails edgeʯͰݕࡧ 🔍

Slide 12

Slide 12 text

όάͱͷૺ۰ Rails 7.1.0.rc1 ͕ϦϦʔε͞ΕΔલ͸CI͕௨͍ͬͯͨ΋ͷͷɺϦϦʔε͞Ε͔ͯ Β͸શͯͷςετ͕ࣦഊ͢ΔΑ͏ʹɻ
 ͓΍ʁͱࢥ͍ௐࠪΛ։࢝ɻ

Slide 13

Slide 13 text

όάͷௐࠪ ελοΫτϨʔεΛோΊ͍ͯΔͱActiveAdminͷϖʔδΛ؅ཧ͢ΔσΟϨΫτϦͷ app/admin/* ͰΤϥʔʹͳ͍ͬͯΔ͜ͱ͕෼͔ͬͨɻ 
 ActiveAdmin ͸ϧʔςΟϯάΛࣗಈੜ੒͢ΔͨΊʹ app/admin/* ΛಡΈࠐΈ࣌ʹධՁ ͍ͯ͠ΔɻධՁ࣌ʹಛఆϞσϧΛಡΈࠐΜͩλΠϛϯάͰΤϥʔʹͳ͍ͬͯΔ͜ͱ͕ ൑໌ɻ

Slide 14

Slide 14 text

όάͷௐࠪ ελοΫτϨʔεΛோΊ͍ͯΔͱ app/admin/* (ActiveAdminͷϖʔδ Λ؅ཧ͢ΔσΟϨΫτϦ) ͰΤϥʔʹͳ͍ͬͯΔ͜ͱ͕෼͔ͬͨɻ
 ActiveAdmin ͸ϧʔςΟϯάΛࣗಈੜ੒͢ΔͨΊʹ app/admin/* Λಡ ΈࠐΈ࣌ʹධՁ͍ͯ͠ΔɻධՁ࣌ʹಛఆΛϞσϧΛಡΈࠐΜͩλΠϛ ϯάͰΤϥʔʹͳ͍ͬͯΔ͜ͱ͕൑໌ɻ ActiveRecordͷvalidateϝιουʹpresenceΦϓγϣϯΛ౉ͯ͠Δͱ ղऍ͞Εͯͦ͏🤔 ͦΜͳ࣮૷͸Ͳ͜ʹ΋ͳ͍͸ͣ...ʁ

Slide 15

Slide 15 text

2 ࠷খͷ࠶ݱํ๏ͷཱ֬

Slide 16

Slide 16 text

1. ActiveAdminͱ੾Γ཭͢ ݱঢ়͸ಡΈࠐΈ࣌ʹࣦഊ͢ΔͷͰ rails c ΋ىಈ͠ͳ͍ঢ়ଶɻ ActiveAdmin ͕ѱ͍ͷ͔ɺActiveAdmin ͸ಡΈࠐΜͰΔ͚ͩͰͦͷଞ͕ ѱ͍ͷ͔۠ผͰ͖ͳ͔ͬͨͷͰ੾Γ཭͢ํ๏Λߟ͑ͨɻ

Slide 17

Slide 17 text

1. ActiveAdminͱ੾Γ཭͢ ݱঢ়͸ಡΈࠐΈ࣌ʹࣦഊ͢ΔͷͰ rails c ΋ىಈ͠ͳ͍ঢ়ଶɻ ActiveAdmin ͕ѱ͍ͷ͔ɺActiveAdmin ͸ಡΈࠐΜͰΔ͚ͩͰͦͷଞ͕ ѱ͍ͷ͔۠ผͰ͖ͳ͔ͬͨͷͰ੾Γ཭͢ํ๏Λߟ͑ͨɻ ରॲɿapp/admin/* Λશ෦࡟আ͢Δ ✂

Slide 18

Slide 18 text

1. ActiveAdminͱ੾Γ཭͢ ݱঢ়͸ಡΈࠐΈ࣌ʹࣦഊ͢ΔͷͰ rails c ΋ىಈ͠ͳ͍ঢ়ଶɻ ActiveAdmin ͕ѱ͍ͷ͔ɺActiveAdmin ͸ಡΈࠐΜͰΔ͚ͩͰͦͷଞ͕ ѱ͍ͷ͔۠ผͰ͖ͳ͔ͬͨͷͰ੾Γ཭͢ํ๏Λߟ͑ͨɻ ରॲɿapp/admin/* Λશ෦࡟আ͢Δ ✂ ݁Ռɿ
 ಡΈࠐΈ࣌ʹࣦഊ͢Δ͜ͱ͸ͳ͘ͳͬͯ rails c ͸ىಈ͢ΔΑ͏ʹ 🎉

Slide 19

Slide 19 text

1. ActiveAdminͱ੾Γ཭͢ rails c Ͱ֘౰ϞσϧΛධՁ͢Δ͜ͱͰΤϥʔΛىͤ͜ΔΑ͏ʹɻ
 ActiveAdmin͸ແ࣮ͩͬͨ͜ͱ͕෼͔ͬͨɻ

Slide 20

Slide 20 text

2. ໰୊͕ى͖͍ͯΔΫϥεΛখ͘͢͞Δ ໰୊͕ى͖͍ͯΔϞσϧͱ֘౰ߦ͸ಛఆͰ͖ͨ΋ͷͷɺ໰୊͕ى͖ͯ ͍ͨΫϥε͸࣮૷͕ଟ͘Կ͕ݪҼͳͷ͔൑அͰ͖ͣɻ

Slide 21

Slide 21 text

2. ໰୊͕ى͖͍ͯΔΫϥεΛখ͘͢͞Δ ໰୊͕ى͖͍ͯΔϞσϧͱ֘౰ߦ͸ಛఆͰ͖ͨ΋ͷͷɺ໰୊͕ى͖ͯ ͍ͨΫϥε͸࣮૷͕ଟ͘Կ͕ݪҼͳͷ͔൑அͰ͖ͣɻ ରॲɿ֘౰Ϟσϧͷ࣮૷Λยͬ୺͔Β࡟আ͢Δ ✂

Slide 22

Slide 22 text

2. ໰୊͕ى͖͍ͯΔΫϥεΛখ͘͢͞Δ ໰୊͕ى͖͍ͯΔϞσϧͱ֘౰ߦ͸ಛఆͰ͖ͨ΋ͷͷɺ໰୊͕ى͖ͯ ͍ͨΫϥε͸࣮૷͕ଟ͘Կ͕ݪҼͳͷ͔൑அͰ͖ͣɻ ରॲɿ֘౰Ϟσϧͷ࣮૷Λยͬ୺͔Β࡟আ͢Δ ✂ ݁Ռɿ
 ໰୊͕ى͖͍ͯͨߦΛғΉ with_options ϒϩοΫҎ֎શͯͷ࣮૷Λ
 ফͯ͠΋໰୊͸࠶ݱͨ͠ͷͰ with_options ͕ո͍͜͠ͱ͕෼͔ͬͨ 🎉

Slide 23

Slide 23 text

2. ໰୊͕ى͖͍ͯΔΫϥεΛখ͘͢͞Δ ໰୊͕ى͖͍ͯΔϞσϧͱ֘౰ߦ͸ಛఆͰ͖ͨ΋ͷͷɺ໰୊͕ى͖ͯ ͍ͨΫϥε͸࣮૷͕ଟ͘Կ͕ݪҼͳͷ͔൑அͰ͖ͣɻ ରॲɿ֘౰Ϟσϧͷ࣮૷Λยͬ୺͔Β࡟আ͢Δ ✂ ݁Ռɿ
 ໰୊͕ى͖͍ͯͨߦΛғΉ with_options Ҏ֎શͯͷ࣮૷Λফͯ͠΋໰୊͸࠶ݱͨ͠ ͷͰ with_options ͕ո͍͜͠ͱ͕෼͔ͬͨ 🎉

Slide 24

Slide 24 text

2. ໰୊͕ى͖͍ͯΔΫϥεΛখ͘͢͞Δ ໰୊͕ى͖͍ͯΔϞσϧͱ֘౰ߦ͸ಛఆͰ͖ͨ΋ͷͷɺ໰୊͕ى͖ͯ ͍ͨΫϥε͸࣮૷͕ଟ͘Կ͕ݪҼͳͷ͔൑அͰ͖ͣɻ ରॲɿ֘౰Ϟσϧͷ࣮૷Λยͬ୺͔Β࡟আ͢Δ ✂ ݁Ռɿ
 ໰୊͕ى͖͍ͯͨߦΛғΉ with_options Ҏ֎શͯͷ࣮૷Λফͯ͠΋໰୊͸࠶ݱͨ͠ ͷͰ with_options ͕ո͍͜͠ͱ͕෼͔ͬͨ 🎉 ͖ͪΜͱ validates ϝιουʹ presence ΦϓγϣϯΛ౉͍ͯ͠Δͷʹ validate ϝιουʹ౉ͨ͜͠ͱʹͳ͍ͬͯΔɻԿ͕ى͖͍ͯΔΜͩ...

Slide 25

Slide 25 text

3. 1ϑΝΠϧͷ࠶ݱεΫϦϓτͰ࠶ݱ͢Δ͔Λ֬ೝ with_options ͷϒϩοΫҎ֎ͷϞσϧͷ࣮૷Λશͯ࡟আͯ͠΋
 Τϥʔ͸ܧଓͯ͠ൃੜ͍ͯ͠Δɻ ͜Εͩͱશͯͷ Rails ΞϓϦέʔγϣϯͰൃੜ͢ΔՄೳੑ͋ΔͷͰ ͸ʁͱࢥ͍ɺ࠷΋γϯϓϧͳܗͰ໰୊͕࠶ݱ͢Δ͔֬ೝ͢Δ͜ͱʹɻ

Slide 26

Slide 26 text

3. 1ϑΝΠϧͷ࠶ݱεΫϦϓτͰ࠶ݱ͢Δ͔Λ֬ೝ rails/railsʹ͸ActiveRecordͷόάΛใࠂ͢ΔͨΊʹ1ϑΝΠϧͰ ActiveRecordͷςετΛ࣮ߦ͢ΔςϯϓϨʔτ͕͋Δɻ https://github.com/rails/rails/blob/main/guides/bug_report_templates/ active_record_main.rb

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

1. Gemfile

Slide 29

Slide 29 text

2. DBεΩʔϚ

Slide 30

Slide 30 text

3. Ϟσϧ

Slide 31

Slide 31 text

4. ςετ

Slide 32

Slide 32 text

3. 1ϑΝΠϧͷ࠶ݱεΫϦϓτͰ࠶ݱ͢Δ͔Λ֬ೝ ରॲɿςϯϓϨʔτͷϞσϧͷఆٛʹ with_options Λ௥Ճ͠ɺRails όʔδϣϯΛ 7.1.0.rc1 ʹࢦఆͯ͠Τϥʔ͕ൃੜ͢Δ͔Λ֬ೝɻ

Slide 33

Slide 33 text

with_options Λ௥Ճ͢Δɿมߋલ

Slide 34

Slide 34 text

with_options Λ௥Ճ͢Δɿมߋޙ

Slide 35

Slide 35 text

3. 1ϑΝΠϧͷ࠶ݱεΫϦϓτͰ࠶ݱ͢Δ͔Λ֬ೝ ରॲɿςϯϓϨʔτͷϞσϧͷఆٛʹ with_options Λ௥Ճ͠ɺRails όʔδϣϯΛ 7.1.0.rc1 ʹࢦఆͯ͠Τϥʔ͕ൃੜ͢Δ͔Λ֬ೝɻ ݁ՌɿಡΈࠐΈ࣌ʹΤϥʔ͸ൃੜͤͣ 😢

Slide 36

Slide 36 text

3. 1ϑΝΠϧͷ࠶ݱεΫϦϓτͰ࠶ݱ͢Δ͔Λ֬ೝ ରॲɿςϯϓϨʔτͷϞσϧͷఆٛʹ with_options Λ௥Ճ͠ɺRails όʔδϣϯΛ 7.1.0.rc1 ʹࢦఆͯ͠Τϥʔ͕ൃੜ͢Δ͔Λ֬ೝɻ ݁ՌɿಡΈࠐΈ࣌ʹΤϥʔ͸ൃੜͤͣ 😢 ଞʹԿ͔ݟམͱͯ͠ΔཁҼ͕͋Γͦ͏ 🤔

Slide 37

Slide 37 text

4. ݟམͱ͍ͯ͠ΔཁҼΛߟ͑Δ

Slide 38

Slide 38 text

4. ݟམͱ͍ͯ͠ΔཁҼΛߟ͑Δ Ұݟ͢ΔͱӨڹΛ༩͑ͯͳͦ͞͏͚ͩͲɺڍಈʹӨڹΛ༩͑ͦ͏ͳ
 ΋ͷͬͯͳΜͩΖ͏ʁ

Slide 39

Slide 39 text

4. ݟམͱ͍ͯ͠ΔཁҼΛߟ͑Δ Ұݟ͢ΔͱӨڹΛ༩͑ͯͳͦ͞͏͚ͩͲɺڍಈʹӨڹΛ༩͑ͦ͏ͳ
 ΋ͷͬͯͳΜͩΖ͏ʁ ܦݧ্ͦ͏͍ͬͨ͜ͱΛ͢Δͷ͸͍͍ͩͨGemɻ

Slide 40

Slide 40 text

4. ݟམͱ͍ͯ͠ΔཁҼΛߟ͑Δ Ұݟ͢ΔͱӨڹΛ༩͑ͯͳͦ͞͏͚ͩͲɺڍಈʹӨڹΛ༩͑ͦ͏ͳ
 ΋ͷͬͯͳΜͩΖ͏ʁ ܦݧ্ͦ͏͍ͬͨ͜ͱΛ͢Δͷ͸͍͍ͩͨGemɻ ରॲɿGemfileʹએݴ͞Ε͍ͯΔGemΛยͬ୺͔Βফ͍ͯ͘͠ ✂

Slide 41

Slide 41 text

4. ݟམͱ͍ͯ͠ΔཁҼΛߟ͑Δ Ұݟ͢ΔͱӨڹΛ༩͑ͯͳͦ͞͏͚ͩͲɺڍಈʹӨڹΛ༩͑ͦ͏ͳ
 ΋ͷͬͯͳΜͩΖ͏ʁ ܦݧ্ͦ͏͍ͬͨ͜ͱΛ͢Δͷ͸͍͍ͩͨGemɻ ରॲɿGemfileʹએݴ͞Ε͍ͯΔGemΛยͬ୺͔Βফ͍ͯ͘͠ ✂ ݁Ռɿ
 ੎͍Α͘ফ͍ͯ͠Δͱ໰୊͕࠶ݱ͠ͳ͘ͳΔλΠϛϯάʹૺ۰ 🎉🎉

Slide 42

Slide 42 text

4. ݟམͱ͍ͯ͠ΔཁҼΛߟ͑Δ Ұݟ͢ΔͱӨڹΛ༩͑ͯͳͦ͞͏͚ͩͲɺڍಈʹӨڹΛ༩͑ͦ͏ͳ
 ΋ͷͬͯͳΜͩΖ͏ʁ ܦݧ্ͦ͏͍ͬͨ͜ͱΛ͢Δͷ͸͍͍ͩͨGemɻ ରॲɿGemfileʹએݴ͞Ε͍ͯΔGemΛยͬ୺͔Βফ͍ͯ͘͠ ✂ ݁Ռɿ
 ੎͍Α͘ফ͍ͯ͠Δͱ໰୊͕࠶ݱ͠ͳ͘ͳΔλΠϛϯάʹૺ۰ 🎉🎉 → config gemΛফ͢ͱ໰୊͕࠶ݱ͠ͳ͘ͳΔ͜ͱ͕෼͔ͬͨ 💯

Slide 43

Slide 43 text

5. ࠶ݱεΫϦϓτͰ࠶ݱ͢Δ͔νΣοΫ͢Δ config gemͷ༗ແͰ໰୊͕ى͖Δ͜ͱ͕෼͔ͬͨͷͰ3.Ͱ༻ҙͨ͠࠶ ݱεΫϦϓτΛ࢖ͬͯ໰୊͕࠶ݱ͢Δ͔ͷνΣοΫ͢Δɻ

Slide 44

Slide 44 text

config gemΛ௥Ճ͢Δɿมߋલ

Slide 45

Slide 45 text

config gemΛ௥Ճ͢Δɿมߋޙ

Slide 46

Slide 46 text

config gemΛ௥Ճ͢Δɿมߋޙ ແࣄΤϥʔ͕ൃੜ 💥 ࠷খͷ࠶ݱํ๏ͷཱ֬ʹ੒ޭʂ

Slide 47

Slide 47 text

3 όάϨϙʔτΛग़͢

Slide 48

Slide 48 text

όάϨϙʔτΛग़͢ config gemͷґଘʹΑΔ໰୊Ͱ͋Δ͜ͱ͸෼͔ͬͨ΋ͷͷɺRailsͷ໰ ୊ͳͷ͔config gemͷ໰୊ͳͷ͔ͷ੾Γ෼͚͕Ͱ͖ͳ͔ͬͨɻ
 ͳͷͰRailsʹৄ͍͠ਓʹฉ͚͹൑அͰ͖ΔͩΖ͏ͱࢥ͍ɺrails/rails ʹόάϨϙʔτΛग़͢͜ͱʹɻ

Slide 49

Slide 49 text

όάϨϙʔτΛग़͢ rails/railsͷόάϨϙʔτʹඞཁͳ߲໨ ● ࠶ݱεΫϦϓτ ● ظ଴͢Δڍಈ ● ࣮ࡍͷڍಈ ● Ruby/Railsͷόʔδϣϯ

Slide 50

Slide 50 text

όάϨϙʔτΛग़͢ rails/railsͷόάϨϙʔτʹඞཁͳ߲໨ ● ࠶ݱεΫϦϓτ ● ظ଴͢Δڍಈ ● ࣮ࡍͷڍಈ ● Ruby/Railsͷόʔδϣϯ ࠶ݱεΫϦϓτ͑͋͞Ε͹͋ͱ͸͙͢ʹຒΊΒΕΔɻ
 ӳޠͰڍಈΛ఻͑ͳ͍͍ͯ͘ͷ͕خ͍͠ϙΠϯτ 🤝

Slide 51

Slide 51 text

όάϨϙʔτΛग़͢ ग़ͯ͠Έͨ https://github.com/rails/rails/issues/49457

Slide 52

Slide 52 text

όάϨϙʔτ΁ͷ൓Ԡ issueΛ࡞੒ޙ30෼΄ͲͰݪҼΛಛఆͨ͠ࢫͷίϝϯτΛ΋Β͍ config gemଆͷमਖ਼͕ඞཁͳ͜ͱ͕൑໌ɻ 4࣌ؒ΄ͲͰconfig gemʹमਖ਼Pull RequestΛ࡞੒ͯ͠΋Βͬͨ 🎉

Slide 53

Slide 53 text

όάϨϙʔτ΁ͷ൓Ԡ ॾࣄ৘ʹΑΓमਖ਼Pull Request͸·ͩmerge͞Ε͍ͯͳ͍ͷͰɺ
 config gemΛRails 7.1Ͱಈ͔͍ͨ͠ํ͸࠙਌ձͰํ਑Λ૬ஊͤͯ͘͞ ͍ͩ͞ 🙏

Slide 54

Slide 54 text

·ͱΊ 1. Rails EdgeͰͷςετΛCIͰ࣮ߦ͍ͯͨ͜͠ͱʹΑΓɺյΕ͍ͯ Δ͜ͱʹؾ෇͘ɻ 2. ৭ΜͳϑΝΠϧΛফ͠ͳ͕Β࠷খͰͷ࠶ݱํ๏Λཱ֬͠ɺݪҼͱ ͳΔGemΛಛఆɻ 3. όάϨϙʔτΛग़ͯ͠30෼ޙʹ͸ݪҼ͕ಛఆ͞Ε4࣌ؒޙʹ͸मਖ਼ PR͕࡞ΒΕεϐʔυղܾ 🚀ʢະϚʔδʣ

Slide 55

Slide 55 text

͓ΘΓ rails/rails΁ͷόάϨϙʔτ͸ ؤுͬͨΒग़ͤͦ͏ʂ