Slide 1

Slide 1 text

Let's get started with Ruby && Rails Tips Omotesando.rb #96 2024/04/04 1

Slide 2

Slide 2 text

ࣗݾ঺հ • ໊લ: ਖ਼ಙ ޼(aka: ਆ଎) • GitHub: @sinsoku (ը૾ӈ্) • Twitter: @sinsoku_listy (ը૾ӈԼ) • ޷͖ͳݴޠ: Rust ! , Ruby " • Railsྺ: 8೥͘Β͍ 2

Slide 3

Slide 3 text

એ఻: Asakusa-bashi.rbs 3

Slide 4

Slide 4 text

Shinjuku.rb ͱඃ͍ͬͯͨ ! 4

Slide 5

Slide 5 text

! Let's get started with Ruby 5

Slide 6

Slide 6 text

1݄ʹLTͷ࿩Λͨ͠ 6

Slide 7

Slide 7 text

Rubyཁૉ͕଍Γͳ͔ͬͨ 7

Slide 8

Slide 8 text

! ࠓ೔͸ϧϏʔʹ͍ͭͯ࿩ͦ͏ => ! Let's get started with Ruby 8

Slide 9

Slide 9 text

! ϧϏʔ • ࢈ग़஍͸ϛϟϯϚʔɺεϦϥϯΧɺλΠԦࠃͳͲ • Ϟʔεߗ౓͸ 9.0 ͰμΠϠϞϯυʹ͙࣍ߗ౓ • ίϥϯμϜʢ߯ۄ ʣͷมछ • ੺৭͸ϧϏʔɺ੺৭Ҏ֎͸αϑΝΠΞͱݺ͹ΕΔ 9

Slide 10

Slide 10 text

! ϧϏʔ 10

Slide 11

Slide 11 text

✅ ߪೖ͓ͨ͠ళ • ϞϦεϧϏʔ2 • ۜ࠲ళͱژ౎ࡾ৚ຊళͷ2ళฮ • ϛϟϯϚʔ࢈ఱવແॲཧͷͩ͜ΘΓ • ళ௕͞Μ͕ϧϏʔΦλΫ 2 https://morisruby.com/ 11

Slide 12

Slide 12 text

! ֹۚ΍ೲ඼·Ͱͷ࣌ؒ • ϧϏʔʢ0.48ctʣʹ46ສɺϦϯάʢ22߸ʣͰ28ສ • ϦϯάՃ޻ʹ2ϲ݄ఔ౓3 • Ϧϯάࠁҹ͸17จࣈఔ౓·ͰՄೳͰແྉ • ͨͩɺจࣈ਺͸Ϧϯάͷେ͖͞ʹΑΔ 3 ϧϏʔ͚ͩͷߪೖ΋Մɻ͜ΕͳΒ౰೔ʹߪೖͰ͖Δ͔΋ɻ 12

Slide 13

Slide 13 text

⭐ ࢖͍ಓ • ࢓ࣄதʹ͚͍ͭͯΔ • ! Λݟͯूதͨ͠Γɺؾ࣋ͪΛམͪண͚Δ4 • ʮRubyΤϯδχΞ͕ϧϏʔΛങ͏ʯͱ͍͏ωλ 4 acts_as_professional ͷάϦʔϯόϯυͱಉ͡ 13

Slide 14

Slide 14 text

! ϧϏʔΛ࢝Ί·͠ΐ͏ ʢLet's get started with Rubyʣ 14

Slide 15

Slide 15 text

લ൒ऴΘΓ 15

Slide 16

Slide 16 text

! Rails Tips 16

Slide 17

Slide 17 text

ActiveRecordͷ loaded? ؔ࿈ΛطʹಡΈࠐΜͰ͍Ε͹ true Λฦ͢ɻ user = User.first user.posts.loaded? #=> false user.posts #=> SELECT "posts".* FROM "posts" WHERE "posts"."user_id" = ? user.posts.loaded? #=> true 17

Slide 18

Slide 18 text

۩ମతͳϢʔεέʔε index @users = User.includes(:posts).all # rbs: Hash[User, ActiveSupport::TimeWithZone] @posted_at_per_user = @users.to_h do |user| [user, user.last_posted_at] end show @user = User.find(params[:id]) @posted_at = @user.last_posted_at 18

Slide 19

Slide 19 text

User#last_posted_at ͷ࣮૷ྫ # rbs: () -> ActiveSupport::TimeWithZone? def last_posted_at if posts.loaded? posts.max_by(&:created_at)&.created_at else posts.maximum(:created_at) end end 19

Slide 20

Slide 20 text

pick ΍ pluck ʹ΋஫ҙ class User has_many :tags def tag_names tags.pluck(:name) end end # pluck Λ࢖͍ͬͯΔͨΊɺeager loading ͕ޮ͔ͳ͍ user = User.includes(:tags).first #=> User Load (0.0ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]] #=> Tag Load (0.1ms) SELECT "tags".* FROM "tags" WHERE "tags"."user_id" = ? [["user_id", 1]] user.tag_names #=> Tag Pluck (0.0ms) SELECT "name" FROM "tags" WHERE "tags"."user_id" = ? [["user_id", 1]] 20

Slide 21

Slide 21 text

ActiveRecordͷcount, size, lengthͷҧ͍ • count ৗʹ SELECT COUNT(*) Λൃߦ͢Δ • size ؔ࿈ΛಡΈࠐΜͰ͍ͳ͍৔߹ʹ SELECT COUNT(*) Λൃߦ͢Δ • length ؔ࿈ΛಡΈࠐΜͰ͍ͳ͍৔߹ʹ SELECT(*) Λൃߦ͢Δ 21

Slide 22

Slide 22 text

ActiveRecord ͕ؤுͬͯཉ͍͠ ؔ࿈ͷಡΈࠐΈঢ়ଶʹΑͬͯSQLͷൃߦΛ߇͑ͯཉ͍͠ɻ ͨͩɺࠓ·ͰSQL͕ൃߦ͞Ε͍ͯͨͷͰɺޙํޓ׵ੑΛߟ͑Δͱ ʮSQLΛ߇͑ΔϞʔυʯ͕ඞཁͦ͏ɻ 22

Slide 23

Slide 23 text

·ͱΊ • ! ϧϏʔΛങͬͨ • " loaded? ͷ঺հ • " count, size, lengthͷҧ͍ͷ঺հ 23