Slide 1

Slide 1 text

˓˓͔ΒRuby΁ ҏ౻ ३Ұ ʢגࣜձࣾιχοΫΨʔσϯʣ 2019/11/03 ෋ࢁRubyձٞ01

Slide 2

Slide 2 text

• ҏ౻ ३Ұ / @jnchito • RubyϓϩάϥϚʢ2012೥ʙ@ɹɹɹɹɹɹɹɹɹɹɹɹʣ • ฌݿݝ੢࿬ࢢࡏॅʢϦϞʔτϫʔΧʔʣ • ϒϩά = give IT a try (https://blog.jnito.com) • Qiita ૯߹1Ґ (2019೥11݄ݱࡏ) • ஶॻɾ༁ॻ - ϓϩΛ໨ࢦ͢ਓͷͨΊͷRubyೖ໳ʢٕज़ධ࿦ࣾʣ - Everyday Rails - RSpecʹΑΔRailsςετೖ໳ ʢLeanpubʣ 2 ͔ΜͨΜʹࣗݾ঺հ χγϫΩγʁʁ

Slide 3

Slide 3 text

3 ੢࿬ࢢͬͯ͜Μͳͱ͜ΖͰ͢ ࣗশʮ೔ຊͷ΁ͦʯ

Slide 4

Slide 4 text

4 ຊ೔ͷςʔϚ • ͔Ε͜Ε7ʙ8೥RubyΛ࢖͖ͬͯͨࢲ • Ҏલ͸SIer΍ࣾ಺ΤϯδχΞͱͯ͠Java΍C#ͰϝΠϯͰ࢖͍ͬͯ·ͨ͠ • ੲͱࠓΛൺ΂ΔͱʮͳΜ͔͍Ζ͍ΖมΘͬͨͳ͋ʯͱࢥ͏ͱ͜Ζ͕ଟʑ͋Γ·͢ • ࢖͏ݴޠ͕มΘΔͱԿ͕Ͳ͏มΘΔͷ͔ʁ • Rubyະܦݧऀ͕ʮ΁ʙɺRubyͬͯͳΜ͔໘നͦ͏ʂʯͱࢥ͑ΔΑ͏ͳ৘ใΛఏڙ͠·͢ - ϓϩάϥϛϯάܦݧ͸͋ͬͨํ͕͍͍Ͱ͕͢ɺRubyͷ஌ࣝ͸ෆཁͰ͢ʂ

Slide 5

Slide 5 text

5 ͜Μͳ͜ͱΛ࿩͠·͢ • Rubyࣄ࢝Ί • ଞݴޠܦݧऀ͕ؾʹͳΓͦ͏ͳ͜ͱ - ܕ͕ͳ͍ͱෆ҆ʁ - Rubyͬͯ஗͍ΜͰ͠ΐʁ • Rubyͷ޷͖ͳͱ͜Ζ • ͦͯ͠ɺίϛϡχςΟ

Slide 6

Slide 6 text

Rubyࣄ࢝Ί

Slide 7

Slide 7 text

7 Rubyͱ͸ • ೔ຊਓϓϩάϥϚͰ͋Δɺ·ͭ΋ͱΏ͖ͻΖࢯʢMatzʣ͕։ൃͨ͠ϓϩάϥϛϯάݴޠ • όʔδϣϯ1.0ͷϦϦʔε͸1996೥ɺ2019೥11݄࣌఺ͷ࠷৽όʔδϣϯ͸2.6 - ࢀߟʣຖ೥12݄25೔ʹ৽όʔδϣϯ͕ϦϦʔε͞ΕΔɻ࣍͸Ruby 2.7 • ΦϒδΣΫτࢦ޲εΫϦϓτݴޠɺಈతܕ෇͚ • Ruby on Railsͷొ৔Ҏ߱ʢ2004೥ʣɺRuby͸ੈքதͷϓϩάϥϚʹ࢖ΘΕ͍ͯΔ

Slide 8

Slide 8 text

8 Rubyجૅ (1 / 256) # จࣈྻ '1'.to_s #=> "1" # ਺஋ 1.to_s #=> "1" # nil nil.to_s #=> ""͋ # true true.to_s #=> "true"͋ # false false.to_s #=> "false"͋ # ਖ਼نදݱ /\d+/.to_s #=> "(?-mix:\\d+)" Ruby͸͢΂͕ͯΦϒδΣΫτ

Slide 9

Slide 9 text

ɾɾɾΈ͍ͨͳ͜ͱ͸ɺ΍ͬͯΒΕͳ͍ͷͰ

Slide 10

Slide 10 text

ಈըͰͳΜͱͳ͘งғؾΛ͔ͭΜͰ͍ͩ͘͞ ʢ໿12෼ʣ

Slide 11

Slide 11 text

ಈը͸YouTube ʹΞοϓͯ͠·͢↓ https://youtu.be/UZE3T5TYAvU ʢ"UPZBNBSL"΁Ͱݕࡧʣ

Slide 12

Slide 12 text

ͳΜͱͳ͘งғؾ͸͔ͭΊ·͔ͨ͠ʁ

Slide 13

Slide 13 text

13 ͖ͬ͞ॻ͍ͨϙέϕϧϓϩάϥϜʢࢀߟʣ TABLE = [ %w(͋ ͍ ͑ ͏ ͓), %w(͔ ͖ ͘ ͚ ͜), # লུ ] def to_chars(input) row_cols = input.scan(/../) str = '' row_cols.each do |row_col| row, col = row_col.chars.map(&:to_i) str << TABLE[row - 1][col - 1] end str.katakana.zen_to_han end LENGTH = 20 def decorate(text) puts '-' * LENGTH puts "|#{text.ljust(LENGTH - 2)}|" puts '-' * LENGTH end to_chars('1112324493')

Slide 14

Slide 14 text

ଞݴޠܦݧऀ͕ؾʹͳΓͦ͏ͳ͜ͱ

Slide 15

Slide 15 text

15 • ܕ͕ͳ͍ͱ͍͏ΑΓɺܕΛॻ͔ͳͯ͘΋ྑ͍ • ʮܕ͕ͳ͍ͷͬͯͲ͏ʁෆศ͡Όͳ͍ʁෆ҆͡Όͳ͍ʁʯ • 7ʙ8೥RubyΛॻ͍ͯΈͯΘ͔ͬͨ͜ͱ͸ɺʮҙ֎ͱେৎ෉ʯ ܕ͕ͳ͍ͱෆ҆ʁ

Slide 16

Slide 16 text

16 • ;ͭ͏ɺಈ࡞֬ೝ͢Δ΍Μʁʢܕ͕͋ͬͯ΋ͳͯ͘΋ʣ • typoͰ΋ɺܕͷෆҰகͰ΋ɺΤϥʔ͕ग़ͨΒͦ͜Ͱ௚ͤ͹͍͍΍Μʁ • ;ͭ͏ɺςετॻ͘΍Μʁʢܕ͕͋ͬͯ΋ͳͯ͘΋ʣ • ϓϩάϥϜ͕͓͔͘͠ͳͬͨΒɺςετ͕མͪΔ͔Βͦ͜Ͱؾͮ͘΍Μʁ • ;ͭ͏ɺίʔυϨϏϡʔ͢Δ΍Μʁʢܕ͕͋ͬͯ΋ͳͯ͘΋ʣ • ໌Β͔ʹόάΔϩδοΫͱ͔ɺՄಡੑ͕࠷ѱͷίʔυͩͬͨΒࢦఠ͕ೖΔ΍Μʁ • ͋Εͬɺ࣮͸ίϯύΠϥ͕ͳͯ͘΋ͦ͜·ͰࠔΒͳ͍ͷͰ͸ɾɾɾʁ ͳͥେৎ෉ͳͷ͔ʁ

Slide 17

Slide 17 text

17 • ιχοΫΨʔσϯ ʹ Ruby࢖ͬͯ·͢ɻͰ΋ɺίʔυ͸શવಡΈॻ͖͠΍͍͢Ͱ͢ʂ • લ৬ɺલʑ৬ ʹ Java΍C#࢖ͬͯ·ͨ͠ɻͰ΋ɺΫ˓ίʔυʹࢄʑۤ͠ΊΒΕ·ͨ͠ʂ • ͋Εͬɺܕͷ͋Δɾͳͬͯ͠ɺෆศ͞΍ෆ҆ɺίʔυͷ඼࣭ʹແؔ܎ͳͷͰ͸ʁʁ • ܕΑΓେࣄͳͷ͸ɺͪΌΜͱͨ͠ϓϩάϥϚ͕ͪΌΜͱͨ͠ίʔυΛॻ͘͜ͱͰͨ͠ • ͔ͩΒɺʮRuby͸ܕ͕ͳ͍͔Βෆ҆ʯ͸੒Γཱͨͳ͍ʂʢҰ൪৺഑͢΂͖͸ϓϩάϥϚͷεΩϧʣ • ܕΛॻ͔ͳͯ͘΋ɺͪΌΜͱͨ͠ίʔυͳΒܕ͕ಁ͚ͯݟ͑Δ͸ͣ ˓˓͕Ұ൪େࣄ

Slide 18

Slide 18 text

18 ͨͱ͑͹͜Μͳײ͡ users = create_users(user_names) ϝιουͷ໾ׂ = ෳ਺ͷUserΦϒδΣΫτΛ࡞੒͢Δ Ҿ਺ = Ϣʔβʔ໊ͷ഑ྻʢ֤ཁૉ͸ͨͿΜจࣈྻʣ UserΦϒδΣΫτͷ഑ྻ͕ೖͬͯΔ͸ͣ ʢuser + ෳ਺ܗͳͷͰʣ

Slide 19

Slide 19 text

19 • Ruby΍Ruby on Rails͸ɺͱͯ΋ςετίʔυ͕ॻ͖΍͍͢ - ςετίʔυͷॻ͖΍͕͢͞ɺϓϩάϥϜʹର͢Δ҆৺ײΛิڧͯ͘͠ΕΔ • RubyMineΛ࢖͏ͱʢ੩తݴޠ΄ͲͰ͸ͳ͍͕ʣίʔυิ׬΍ϦϑΝΫλϦϯάΛࢧԉͯ͘͠ΕΔ ͪΐͬͱ͚ͩิ଍

Slide 20

Slide 20 text

20 E2Eςετ͕؆୯ʹॻ͚·͢ ʢE2Eςετ = ΤϯυπʔΤϯυςετʣ RSpec.describe 'Sessions', type: :system do before do # ࣄલʹϢʔβʔΛ࡞੒͓ͯ͘͠ User.create(email: '[email protected]', password: 'pass') end scenario 'ϢʔβʔʹΑΔϩάΠϯ' do end end visit new_user_session_path fill_in 'Eϝʔϧ', with: '[email protected]' fill_in 'ύεϫʔυ', with: 'pass' click_button 'ϩάΠϯ' expect(page).to have_content 'ϩάΠϯ͠·ͨ͠' ᶃ ϖʔδΛ։͘ ᶄ ϑΥʔϜೖྗ ᶅ ϩάΠϯϘλϯΫϦοΫ ᶆ ϩάΠϯ੒ޭΛݕূ

Slide 21

Slide 21 text

21 RubyMineʹΑΔίʔυิ׬ͷྫ • ྫʣTwitter gemΛ࢖ͬͯϓϩϑΟʔϧࣸਅURLΛऔಘ͢Δίʔυ ※ൃද౰೔͸ಈըͰઆ໌͠·ͨ͠

Slide 22

Slide 22 text

͏ʔΜɺͰ΋ɾɾɾ

Slide 23

Slide 23 text

23 • ˓˓ͱ͍͏ݴޠʹൺ΂Δͱɺ͔ͨ͠ʹϕϯνϚʔΫ্ͷ࣮ߦ଎౓͸஗͍͔΋ • ͕ɺRubyͷ஗͕͞໰୊ʹͳΔϢʔεέʔε͸ɺܾͯ͠ʮ͢΂ͯͷϢʔεέʔεʯͰ͸ͳ͍ • ࣮ࡍʹRubyͰ։ൃΛ͍ͯͯ͠ɺʮRubyɺ͓ͤʔͳʯͱࢥ͏͜ͱ͸΄ͱΜͲͳ͍ • ͕ɺօແͱ͍͏͜ͱ΋ͳ͍ɻϔϏʔͳόονॲཧͰ஗͞Λײͨ͜͡ͱ͸͋Δ - ͨͩ͠ɺ͜Ε͸RubyຊମͰ͸ͳ͘ɺݫີʹ͸RailsͷActiveRecordͷ໰୊͔΋ - ଞͷݴޠʹॻ͖׵͑ͨΘ͚Ͱ΋ͳ͍ͷͰɺਖ਼֬ͳൺֱ͸Ͱ͖ͳ͍ Rubyͬͯ஗͍ΜͰ͠ΐʁ

Slide 24

Slide 24 text

24 https://jp.quora.com/naze-ruby-ha-hokano-gengo-to-kurabe-te-osoi-node-shou-ka ࢀߟɿͪ͜ΒͷQuoraͷهࣄ΋ͥͻಡΜͰΈͯʂ Rubyίϛολͷ ࡫ా͞Μ

Slide 25

Slide 25 text

25 • Ruby 3.0͕໨ඪͱ͍ͯ͠ΔςʔϚ - ੩తܕղੳ - ύϑΥʔϚϯε - ฒߦੑ • Ruby 3.0͕ϦϦʔε͞ΕͨΒɺࠓͷঢ়گ΋ͪΐͬͱมΘͬͯ͘Δ͔΋ʁ • ຊ೔ͷদຊफଠ࿠͞Μͷট଴ߨԋʮܗͳ͠ݴޠͷͨΊͷܕʯʹ΋ཁ஫໨ʂʂ ࿕ใɿRuby 3.0ʹظ଴ʂ https://logmi.jp/tech/articles/320752

Slide 26

Slide 26 text

͋ͱ͸ओ؍ͰޠΓਚ͘͠·͢

Slide 27

Slide 27 text

27 • ඪ४Ͱ༻ҙ͞Ε͍ͯΔAPI͕ΊͬͪΌ๛෋ - ಛʹ഑ྻؔ࿈ͷϝιου͸ͼͬ͘Γ͢Δ͙Β͍ɺ͔Ώ͍ͱ͜Ζʹख͕ಧ͘ʂ - ʮ͑ɺ͋ͷϝιουͳ͍ͷʁϥΠϒϥϦ͕ඞཁʂʁʯ→ ଞͷݴޠΛ࢖͏ؾʹͳΕͳ͍ • σόοά࣌ʹϥΠϒϥϦͷίʔυ΋ɺ΄΅100%ͦͷ৔ͰಡΊΔɺͱ͍͏҆৺ײ - όΠφϦ͔͠ఏڙ͞Ε͍ͯͳͯ͘ιʔείʔυ͸ҋͷதɺͱ͍͏͜ͱ͕ى͖ͳ͍ - ͨͩ͠ɺͨ·ʹCݴޠͰ֦ு͞Ε͍ͯΔ৔߹΋͋ΔʢͳͷͰɺ΄΅100%ʣ Rubyͷ޷͖ͳͱ͜Ζ

Slide 28

Slide 28 text

28 ศརͳ഑ྻͷϝιουͷྫ input = '1112324493' # ઌʹ͢΂ͯͷจࣈΛ੔਺ʹͯ͠͠·͏ numbers = input.chars.map(&:to_i) #=> [1, 1, 1, 2, 3, 2, 4, 4, 9, 3] # ഑ྻͷཁૉΛ2ͭͣͭηοτʹ͢Δʢωετͨ͠഑ྻʹͳΔʣ row_cols = numbers.each_slice(2) #=> [[1, 1], [1, 2], [3, 2], [4, 4], [9, 3]] str = '' row_cols.each do |row, col| str << TABLE[row - 1][col - 1] end ϙέϕϧϓϩάϥϜͷผղʢ഑ྻͷeach_sliceϝιουΛ࢖͏ྫʣ each_slice ϝιουʹ஫໨!!

Slide 29

Slide 29 text

29 ϥΠϒϥϦͷίʔυ͕ɺ΄΅100%ͦͷ৔ͰಡΊΔ ʢҙຯ͕ཧղͰ͖Δ͔Ͳ͏͔͸ผʹͯ͠ʣඞͣखݩʹίʔυ͕͋Δʂʂ ※RailsͷίʔυͷҰ෦Ͱ͢

Slide 30

Slide 30 text

·ͩ·ͩ͋Γ·͢

Slide 31

Slide 31 text

31 • ॻ͖৺஍͕Α͍ɻॻ͘ͷָ͕͍͠ɻؾ͍͍࣋ͪ • ͨͩ͠ɺ͜ͷڥ஍ʹࢸΔ·Ͱ͸਺೥͔͔ͬͨʢ࠷ॳ͸೉͔ͬͨ͠Αʂʣ • Ͱ΋ɺ͜Ε·Ͱ࢖͖ͬͯͨݴޠͷதͰҰ൪޷͖ • ଞͷݴޠʹ͋·Γڵຯ͕෸͔ͳ͘ͳͬͯ͠·ͬͨͷ͕ɺRubyͷ໰୊఺͔΋ ͨͷ͍͠ʂؾ͍͍࣋ͪʂ

Slide 32

Slide 32 text

32 ͨͱ͑͹ɺ͜Μͳײ͡ʁ def to_chars(input) to_c = ->((row, col)) { TABLE[row][col] } input .each_char .map(&:to_i) .map(&:pred) .each_slice(2) .map(&to_c) .join .katakana .zen_to_han end ϙέϕϧϓϩάϥϜΛؔ਺ܕݴޠνοΫʹॻ͘͜ͱ΋Ͱ͖Δʂʢͱ͍͏ࣗݾຬ଍wʣ ϥϜμʢؔ਺ΦϒδΣΫτʣ ϩʔΧϧม਺Λ࢖Θͣɺͻͨ͢ΒϝιουνΣʔϯͰॻ͘

Slide 33

Slide 33 text

ͦͯ͠ɺίϛϡχςΟ

Slide 34

Slide 34 text

34 • Ruby͸ίϛϡχςΟ׆ಈ͕͔͞Μ - ʮ஍ҬRubyͷձʯͰݕࡧ͢ΔͱɺશࠃͷRubyίϛϡχςΟ͕ͨ͘͞Μग़ͯ͘Δ • ๻ࣗ਎΋஍ݩͰ੢࿬.rbˍਆށ.rbͱ͍͏ίϛϡχςΟΛ΍͍ͬͯ·͢ • ঁੑΤϯδχΞͷͨΊͷίϛϡχςΟ׆ಈ΋੝ΜʢRailsGirls΍TokyoGirls.rb౳ʣ • ๻͕஌ΔݶΓɺͲ͜ͷίϛϡχςΟ΋ΈΜͳ༏͍͠ - ৽ࢀऀ΍ϓϩάϥϛϯάॳ৺ऀ͕ͳ͍͕͠Ζʹ͞ΕΔ͜ͱ͸ͳ͍͸ͣ ίϛϡχςΟʹࢀՃͯ͠ΈΑ͏ʂ

Slide 35

Slide 35 text

35 ॳΊͯͷํ΋ා͕Βͣʹͥͻʂ ʢ஍ҬRubyͷձϖʔδΑΓൈਮʣ

Slide 36

Slide 36 text

ͱ͜ΖͰɺ

Slide 37

Slide 37 text

37 • ࠓΛ͔͞ͷ΅Δ͜ͱ4೥લɾɾɾ • ੢࿬.rbˍਆށ.rbͰRubyϓϩάϥϛϯάΩϟϯϓͱ͍͏߹॓ΠϕϯτΛ։͖·ͨ͠ • ࢀՃऀืूϖʔδΛެ։ͨ͠ͱ͜Ζɺ͜Μͳ໰͍߹Θ͕ͤɾɾɾ ͦ΋ͦ΋ͳͥ๻͕෋ࢁʹʁ

Slide 38

Slide 38 text

38 from: ෋ࢁͷഴౡ͞ΜʢRubyॳ৺ऀʣ ͱͬɺͱͬɺ෋ࢁΝʔʔοʂʁ

Slide 39

Slide 39 text

39 ͦͯ͠൴͸΍͖ͬͯͨ ൴ ʢഴౡ͞Μʣ

Slide 40

Slide 40 text

40 ͦͯ͠൴͸ָ͠Μͩ ൴ ʢͳΜ͔৯΂ͯΔʣ

Slide 41

Slide 41 text

41 ͦͯ͠൴͸ؼ͍ͬͯͬͨ ൴ ʢͱ๻ʣ

Slide 42

Slide 42 text

42 ͦΕ͔Β4೥ޙʢͭ·Γࠓ೥ʣ ൴ʢഴౡ͞Μʣ ͸͍ɺΑΖ͜ΜͰʔʂʂ

Slide 43

Slide 43 text

43 ͦͯ͠๻͕΍͖ͬͯͨʢ෋ࢁʹʣ ͢͹Β͖͔͠ͳɺίϛϡχςΟ׆ಈ

Slide 44

Slide 44 text

·ͱΊ

Slide 45

Slide 45 text

45 ຊ೔͓࿩ͨ͜͠͠ͱ • Rubyࣄ࢝ΊʢϙέϕϧϓϩάϥϜͷ࡞੒ʣ • ଞݴޠܦݧऀ͕ؾʹͳΓͦ͏ͳ͜ͱ - ܕ͕ͳ͍ͱෆ҆ʁ - Rubyͬͯ஗͍ΜͰ͠ΐʁ • Rubyͷ޷͖ͳͱ͜Ζ • ͦͯ͠ɺίϛϡχςΟ

Slide 46

Slide 46 text

46 ຊ೔ͷςʔϚʢ͓͞Β͍ʣ • ͔Ε͜Ε7ʙ8೥RubyΛ࢖͖ͬͯͨࢲ • Ҏલ͸SIer΍ࣾ಺ΤϯδχΞͱͯ͠Java΍C#ͰϝΠϯͰ࢖͍ͬͯ·ͨ͠ • ੲͱࠓΛൺ΂ΔͱʮͳΜ͔͍Ζ͍ΖมΘͬͨͳ͋ʯͱࢥ͏ͱ͜Ζ͕ଟʑ͋Γ·͢ • ࢖͏ݴޠ͕มΘΔͱԿ͕Ͳ͏มΘΔͷ͔ʁ • Rubyະܦݧऀ͕ʮ΁ʙɺRubyͬͯͳΜ͔໘നͦ͏ʂʯͱࢥ͑ΔΑ͏ͳ৘ใΛఏڙ͠·͢ - ϓϩάϥϛϯάܦݧ͸͋ͬͨํ͕͍͍Ͱ͕͢ɺRubyͷ஌ࣝ͸ෆཁͰ͢ʂ

Slide 47

Slide 47 text

͍͞͝ʹɺ͝൧ͷ࿩ ʢεϥΠυͳ͠ʣ

Slide 48

Slide 48 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ @jnchito blog.jnito.com