$30 off During Our Annual Pro Sale. View Details »

My Favorite Tools

My Favorite Tools

松江Ruby会議08ゲスト講演「未定(オープンソースとの関わり方と開発環境に関するお話の予定)」改め、「My Favorite Tools」の発表資料 http://matsue.rubyist.net/matrk08/

Akira Matsuda

December 17, 2016
Tweet

More Decks by Akira Matsuda

Other Decks in Programming

Transcript

  1. My Favorite
    Tools
    @a_matsuda

    View Slide

  2. ຊ೔ͷλΠτϧ
    ʮະఆʢΦʔϓϯιʔεͱͷ

    ؔΘΓํͱ։ൃ؀ڥʹؔ͢Δ

    ͓࿩ͷ༧ఆʣʯ

    View Slide

  3. ٢Ԭ͞Μ͔Β͍͍͓ͨͩͨ୊
    ʮ։ൃ؀ڥͷ঺հɾͦͷଞ։ൃʹ
    ར༻͢Δπʔϧʯ

    View Slide

  4. ͱ͍͏Θ͚Ͱɺࠓ೔͸ࣗ෼͕
    ޷͖ͳ࢓ࣄಓ۩ͷ࿩Λ͠·͢

    View Slide

  5. whoami

    View Slide

  6. Creator of
    kaminari
    active_decorator
    action_args
    ͳͲͳͲ͍Ζ͍Ζ

    View Slide

  7. kaminari
    amatsuda/kaminari

    View Slide

  8. kaminari
    ΋͏͖͡6೥
    όʔδϣϯ͸ɺ·ͩ0
    0.17ͱ͔͍͏ͻͲ͍όʔδϣϯ

    ൪߸

    View Slide

  9. kaminari 1.0
    RC൛͕ग़·ͨ͠
    What's new in 1.0
    gem෼཭
    API͕͸͖ͬΓͨ͠
    ৔߹ʹΑͬͯ஍ຯʹΫΤϦͷຊ਺͕ݮΔ
    without_countϞʔυ
    ΋͏ͪΐͬͱΤΫετϦʔϜͳ΍ͭ

    View Slide

  10. ࠓ͙͢ࢼͯ͠Έ͍͚ͯͨͩΔ
    ͱ͋Γ͕͍ͨͰ͢
    gem 'kaminari', '1.0.0.rc1'

    View Slide

  11. ͪͳΈʹɺ͜ͷ࣌ظʹϦϦʔ
    ε͕Ͱ͖Δͱ͍͏͜ͱ͸ɺ
    ੈؒͷ͓લΒ͕ϒϩάͩͷϙΤϜ
    ͩͷΛಡΜͩΓॻ͍ͨΓͯ͠༡Μ
    ͰΔؒʹɺOSS։ൃऀ͸ͪΌΜͱ
    ίʔυΛॻ͍ͨΓίʔυΛॻ͍ͨ
    Γͯ͠·͢Αɺͱ͍͏͜ͱͰ͢Ͷ

    View Slide

  12. Committer of
    ruby
    railsͳͲ
    haml
    carrierwave
    simplcov
    ͳͲͳͲ
    Ұ൪࠷ۙͰ͸md2key

    View Slide

  13. md2key
    k0kubun/md2key

    View Slide

  14. md2key
    ΋͸΍͜Εແ͠Ͱ͸εϥΠυ࡞Ε
    ͳ͍
    Vimͱ͔iPhoneͱ͔ͰεϥΠυ͕
    ॻ͚Δ

    View Slide

  15. md2keyͷྑ͘ͳ͍ͱ͜Ζ
    ͜ΕΛ࢖͏Α͏ʹͳΔͱɺൃද਺͙࣌ؒΒ͍લ
    ·Ͱ Keynote.app Λىಈ͠ͳ͍Α͏ʹͳΔ
    εϥΠυΛॻ͍ͯΔ͸ͣͩͬͨͷʹɺmd2keyͷ
    ڍಈ͕ؾʹͳͬͯ͏͔ͬΓmd2keyͷϋοΫΛ

    ࢝Ίͯ͠·͏
    RabbitΛ࢖ͬͯΔਓͨͪ͸͜͏͍͏ؾ࣋ͪ

    ͳͷ͔ʔ

    View Slide

  16. ઌ೔ͷRubyConf Brazilͷ

    Ωʔϊʔτͷલ೔
    yak shaving͕͸͔Ͳ͍ͬͯΖ͍Ζ
    ύονॻ͍ͯͨΒίϛοτݖ͕
    ͖߱ͬͯͨ

    View Slide

  17. ίϛολʔʹͳͬͯΈͯ

    Θ͔ͬͨ͜ͱ
    πʔϧ͸࢖͏࣌ʹ͔͠έΞ͠ͳ͍
    ϓϨθϯπʔϧͷϋοΫ͸ϓϨθϯ
    ͷલ೔ʹͳΒͳ͍ͱઈରʹ͠ͳ͍
    ͨͩͰ͑͞ςϯύͬͯΔϓϨθϯͷ
    લ೔ʹ΍Δ͜ͱ͕ແବʹ૿͑ͨ

    View Slide

  18. ࢖༻ྫ

    View Slide

  19. ࡢ೔ͷൃදεϥΠυ
    3೔લ͙Β͍͔ΒɺͳΜͱͳ͘஻Γ͍ͨ͜ͱΛiPhoneͷNotesͰϦετΞοϓ࢝͠ΊΔ
    ౡࠜʹ޲͔͏ిंͱඈߦػͷதͰɺετʔϦʔͷΠϝʔδ͕ఱ͔Β߱ͬͯ͘ΔͷͰɺ

    ͦΕΛ೴಺ʹμ΢ϯϩʔυͯ͠iPhoneͰՕ৚ॻ͖ΛҰؾʹ๲Β·ͤΔ
    ۭߓ͔Βদߐʹ޲͔͏όεͷதͰ Keynote.app Λىಈͯ͠ྲྀ͠ࠐΉ(ྡʹ࠲ͬͨਿݪ͞Μ
    ʹโΕΒΕͳ͕Β)
    ձ৔ʹண͍͔ͯΒ࣌ؒΪϦΪϦ·Ͱ(ͱ͍͏͔ؒʹ߹ͬͯͳ͍)ମࡋΛ੔͑ͨΓ͢Δ
    ͷͰσβΠϯͱ͔ϑΥϯτͱ͔͸΄΅ Keynote.app ͷσϑΥϧτͷ·Μ· (͢Έ·ͤΜ)
    શͯࢥ͍ग़͠ϕʔεͳͷͰɺࣄ࣮ؔ܎ͱ͔ۃΊͯ͋΍;΍(ͻͲ͍)
    ૉৼΓͱ͔Ұ੾͠ͳ͍ͷͰ(ӳޠͰ΋ΩʔϊʔτͰ΋΍ͬͨ͜ͱͳ͍)ɺ࣌ؒΛΊͬͪΌ
    Φʔόʔͨ͠Γ͢Δ(΄Μͱ͍͢·ͤΜ)

    View Slide

  20. ࠓ೔ͷൃදεϥΠυ
    ਲͬ෷ͬͯ൒෼৸ͳ͕Β෍ஂͷதͰ
    iPhoneͰϝϞΛॻ͘
    ேձ৔ʹ͍͔ͭͯΒVimΛىಈͯ͠৭ʑ
    ॻ͖଍͢
    ߨԋ1࣌ؒલ͔ΒKeynote.appʹྲྀ͠ࠐΈ
    ͸͡ΊΔ

    View Slide

  21. ͱ΋͋Ε

    View Slide

  22. ͦΜͳࡢ೔ͷτʔΫͷ

    ͋Β͢͡
    ʮίϛολʔ͔ΒݟͨRuby on Railsʯ
    Railsͷίʔυʹ͸ίϛολʔͨͪͷ10೥ؒ
    ͷ͍ΖΜͳࢥ͍΍υϥϚ͕٧·ͬͯΔ͔
    ΒɺίϛοτϩάಡΜͰΈΔͱ໘ന͍Α
    ϚχΞࢹ఺ͰͷRails΍OSSͷָ͠ΈํΛ

    ղઆͨͭ͠΋Γ

    View Slide

  23. ࠓ೔͸ࡢ೔ͷ࿩ͷଓ͖
    ๻͕࣮ࡍʹͲ͏͍͏ಓ۩Λ࢖ͬͯ
    ίʔυΛಡΜͩΓॻ͍ͨΓͯ͠

    ͍Δ͔

    View Slide

  24. gem-src
    OSS΢Υονϟʔۀͱύονॻ͖
    ͕͸͔ͲΔπʔϧ

    View Slide

  25. gem-src
    amatsuda/gem-src

    View Slide

  26. OSS͕޷͖ͳͷͰ
    ͍ΖΜͳਓͷίʔυΛಡΉͷ͕

    ޷͖ͩ͠ɺύονΛ౤͛ͯΈΜͳ
    ͱίϛϡχέʔγϣϯΛऔΓ͍ͨ

    View Slide

  27. ҆৺ͷͨΊ & ଵଦͳͷͰ
    Կ͔໰୊͕ൃੜͨ࣌͠ʹ͙͢ʹύονΛ
    ॻ͍ͯରॲͰ͖ΔΑ͏ʹ
    ࣗ෼͕࢖͍ͬͯΔϓϩμΫτͷιʔε
    ίʔυ͸શͯखݩʹஔ͍͓͖͍ͯͨ
    ίʔυΛಡΈ͍ͨʂͱࢥͬͨ࣌ʹGitHub
    ͰݕࡧΛ͢Δͦͷͻͱख͕ؒ൥Θ͍͠

    View Slide

  28. gem-src
    gem install, bundle installΛϑοΫ
    ͯ͠ɺΠϯετʔϧ͞ΕͨGemͷ
    ϝλσʔλ͔Βιʔείʔυͷ

    ͋Γ͔ΛҾͬு͖ͬͯͯgit clone
    ͠·͘ΔrbenvϓϥάΠϯ

    View Slide

  29. ͠͹Β͘࢖͏ͱ1000ݸҎ্

    ͱ͔खݩʹϦϙδτϦ͕ཷ·Δ

    View Slide

  30. ͍ͭͰ΋ؾܰʹίʔυಡΈ΍
    ύονॻ͖͕Ͱ͖ΔͷͰ͓קΊ

    View Slide

  31. Ruby΍RailsʹؔΘΔਓؒͱ͠
    ͯ͸ɺݕࡧ͕Ͱ͖Δͷ΋໾ཱͭ
    ͜ͷϝιουͬͯ୭͔࢖ͬͯΔਓ͍Δͷ
    ͔ͳʔʁ
    GHͰݕࡧͱ͔akr͞Μͷgemαʔνͩͱ
    ϊΠζ͕ଟ͗͢Δ
    ࣗ෼͕Ͳ͔͜Ͱ࣮ࡍʹ࢖͍ͬͯΔίʔυ
    ͷத͚͔ͩΒ୳ͤΔ

    View Slide

  32. ಛʹɺ೔ࠒ͔ΒGemΛଟ༻͢ΔRails
    ϓϩάϥϚʔʹͱͬͯ͸ඞܞͷπʔϧ

    View Slide

  33. gem-repositorizer
    amatsuda/gem-repositorizer

    View Slide

  34. gem-repositorizer
    ։ൃதʹbundleͯ͠ΔGemΛσόοά

    ͢Δ࣌ʹɺGemଆͷίʔυΛॻ͖׵͑Δ
    Ͳ͜ΛͲ͏ॻ͖׵͔͑ͨΘ͔Βͳ͘ͳΔ
    ύον͕੾Γग़ͮ͠Β͍

    View Slide

  35. gem install͞Εͨ࣌఺Ͱόʔδϣϯ
    ؅ཧΛ࢝Ί͓ͯͨ͘Ίͷgem plugin
    ύον͕ॻ͚ͨΒɺgit format-patch
    => gem-src ͷϦϙδτϦʹ࣋ͬͯߦͬ
    ͯ git-am
    ͱ͔ɺgem-src ͷϦϙδτϦͱ remote-
    add Ͱ௚݁ͯ͠ cherry-pick ͱ͔

    View Slide

  36. ࡶʹ࡞͍͍ͬͯͩͨಈ͍͔ͨΒ

    શવߋ৽ͯ͠ͳ͍ݸਓ༻πʔϧͳͷͰɺ

    ΋͏ͪΐͬͱͪΌΜͱ͍ͨ͠
    gem-srcͱಉ͘͡rbenvϓϥάΠϯʹͳͬͯͨ΄͏͕ྑ͍ͷ

    ͔΋ͳ͊
    gem-srcͰऔ͖ͬͯͨϦϙδτϦ͕͋ͬͨΒremote-addͯ͠
    ܨ͓͛ͯ͘ͱ͜Ζ·Ͱ΍͓͍ͬͯͯ͘ΕΔͱخ͍͔͠΋
    ͋Εʁͬͯ͜ͱ͸୯ʹ gem-src ͷػೳ௥ՃͰ͍͍ͷ͔ʁ <-
    ࠓίί
    (※ޙ೔஫: ͜͜ʹॻ͍ͨͱ͓Γʹ࣮૷͞ΕͨͷͰɺ͜ͷπʔ
    ϧ͸ෆཁʹͳΓ·ͨ͠ɻgem-srcͷ΄͏Λ͝ར༻͍ͩ͘͞)

    View Slide

  37. Gem΍ϑϨʔϜϫʔΫΛ

    ۷Δಓ۩
    σόοά͍ͨ͠૬ख͕໌Β͔ʹΘ͔ͬͯΔͳΒɺϦϙδτϦΛ
    ։͘·Ͱ΋ͳ͘ɺModule#prepend + byebug (ࠓͳΒઌ݄ౡࠜͰ
    ࡞ΒΕͨ binding.irb Ͱ΋Մ) ͙Β͍Ͱ΋ؒʹ߹͏͜ͱ΋
    ͜ͷϝιου͸Ͳ͔͜Βݺ͹ΕͯΔΜͩʁΈ͍ͨͳ࣌͸ͦΜͳ
    ײ͡ͰϝιουΛ։͍ͯ puts caller ͱ͔ຒΊͨΓ͢Δ
    TracePoint APIΛ࢖͏͜ͱ΋كʹ͋Δ͚Ͳɺͪΐͬͱ໘౗͔ͳ͊
    ͜ͷ΁Μ͸๻͸׬શʹզྲྀ͚ͩͲɺਓʹΑ͍ͬͯΖ͍Ζ޻෉͕
    ͋Γͦ͏͔΋

    View Slide

  38. gitͷ࿩ʹ໭Δͱ

    View Slide

  39. git-*

    View Slide

  40. gitͷαϒίϚϯυͦͷ··

    ͩͱ೔ৗతͳ࢖༻ʹ͸ద͞ͳ͍
    ֤ࣗͷ޷Έ΍ϫʔΫϑϩʔʹ

    ߹ͬͨΧελϚΠζ͕ඞཁ

    View Slide

  41. git alias
    addͬͯଧͪʹ͍͘ͷͰ(͋·Γ

    ڞײ͕ಘΒΕͳ͍)ɺadͱ͔aͱ͔
    ʹͯͨ͠Γ
    coͱ͔ci (svn࣌୅ͷखΫηͷ

    ໊࢒Γ)

    View Slide

  42. git log
    ίʔυϦʔσΟϯάͰ࠷΋ଟ͘

    ࢖༻͢Δπʔϧ
    -p --stat --reverse --abbrev-commit --
    decorate --topo-order ͙Β͍ͷ

    ΦϓγϣϯΛ͚ͭͱ͘ͱݟ΍͍͢

    View Slide

  43. git-* ͍ͬͯ͏໊લͷγΣϧεΫ
    ϦϓτΛ ~/bin ͋ͨΓʹ഑ஔ

    View Slide

  44. gitͷαϒίϚϯυ͔Β;ͭ͏ͷ
    ίϚϯυ΍γΣϧؔ਺΁ͷঢ֨
    rebase΍cherry-pick
    Α͘࢖͏git log ΍ git show ͸

    l ͱ͔ s ͱ͔ͷ1จࣈͷεΫϦϓτʹ
    commit (g ci ͷ΄͏͕ࣈ਺͸୹͍)

    View Slide

  45. commit
    generator΍ίϚϯυͰߦͳͬͨૢ࡞͸

    ͳΔ΂ͦ͘Ε͚ͩͰҰ୴ίϛοτ͍ͨ͠
    ಡऀʹରͯͦ͠ΕҎ্ͷઆ໌͕ཁΒͳ
    ͍
    git commit -m ͳΜ͚ͩͲɺ࠷ॳͱ࠷ޙΛ""
    Ͱғ·ͳ͖Ό͍͚ͳ͍ͷ͕ΊΜͲ͍͘͞

    View Slide

  46. commitίϚϯυ
    git commit -m "$*"
    ͷΑ͏ͳ΋ͷΛ΋͏ͪΐͬͱ

    ͝ʹΐ͝ʹΐͯ͠ΔγΣϧεΫ
    Ϧϓτ

    View Slide

  47. bundle gem
    ίϛοτΛ಄͔ΒಡΉͷ͕޷͖ͳΜͩ
    ͚Ͳɺ"initial commit" ͱ͔ݴͬͯ

    υΧοͱίϛοτ͞ΕͯΔͱϊΠζ͕
    ଟͯ͘ಡΉͷ͕େม
    bundle gem͚ͩͰҰ୴ίϛοτͯ͠

    ͍ͩ͘͞ɻ͓ئ͍͠·͢ʂ

    View Slide

  48. rails new
    ৽͍͠RailsΞϓϦΛ࡞ͬͯɺGemͱ͔͋Ε͜ΕೖΕͯɺ͍ͭͰʹ
    ৭ʑઃఆͯ͠ɺϞσϧͱ͔ίϯτϩʔϥʔͱ͔͍͔ͭͬ͘͘͟
    Γ࡞ͬͯɺ͍͍ͩͨͰ͖·ͨ͠ʂ͍ͬͯ͏಺༰ͷ਺ઍߦͷ "initial
    commit"
    ϨϏϡʔෆೳ͔ͩΒઈରʹ΍Ίͯʂ
    ͜ͷஈ֊Ͱόά΍ઃఆϛε͕ฆΕͯͯ΋΄΅ؾ͚ͮͳ͍
    rails newͨ͠Β·ͣίϛοτɺGemΛbundleͨ͠Β·ͨίϛοτ
    ίʔυ͸ಡऀͷؾ࣋ͪΛߟ͑ͯॻ͖·͠ΐ͏

    View Slide

  49. rails g
    generatorΛͳΔ΂͘࢖͏
    ○○͍ͬͯ͏ػೳΛ࣮૷͠·ͨ͠ʂ͍ͬͯ͏MͱVͱCʹ·͕ͨ
    ΔσΧ͍ίϛοτ͸ಡΈํ͕Θ͔Βͳͯ͘ϨϏϡʔͰ͖ͳ͍
    rails g scaffold Ͱ·ͣίϛοτ
    ಠࣗͷ࣮૷͸͔ͦ͜Βͷ଍͠ࢉ΍Ҿ͖ࢉͰ
    ࣮૷ऀͷ૝͍͕఻ΘΔίϛοτʹͳΔ

    View Slide

  50. rails g
    generator͕ు͍ͨίʔυ͔Β͋·Γʹ΋େ͖͘ҳ୤͢
    Δ৔߹͸ɺRESTfulͳઃܭ͕Ͱ͖͍ͯͳ͍Մೳੑ͕ߴ͍
    generator͕ు͘ίʔυ͕ࣗ෼޷Έ͡Όͳ͍৔߹͸ɺ

    ϓϩδΣΫτͷ࠷ॳʹ·ͣgeneratorͷΧελϚΠζ͔
    Β࢝ΊΔ
    Rails 3͔Βgenerator͕৭ʑΧελϚΠζͰ͖ΔΑ͏ʹ
    ͳͬͯΔͷͰɺڵຯͷ͋Δਓ͸ͪΐͬͱ͍ͬͯ͡ΈΔ
    ͱ໘ന͍Μ͡Όͳ͍Ͱ͠ΐ͏͔

    View Slide

  51. ٯʹɺRails 3ͰมΘͬͯ΄͔ͬͨ͠

    ͚ͲมΘΒͳ͔ͬͨ΋ͷ΋͋Δ

    View Slide

  52. action_args
    asakusarb/action_args

    View Slide

  53. Railsͷίϯτϩʔϥʔͷ

    Πέͯͳ͞
    actionͷϝιου͕ී௨ͷRubyͷ

    ϝιου͡Όͳ͗͢͞Δ
    ͦͷΞΫγϣϯͰ࢖ΘΕΔೖྗ஋
    ͕Կ͔ͩશવΘ͔Βͳ͍
    ໭Γ஋Λ࢖Θͣʹivarʹηοτʁʁ

    View Slide

  54. MerbͷGood API
    RubyͷϓϩάϥϜͳΜ͔ͩΒ͜͏͡Ό

    ͳ͍ํ͕͓͔͍͠
    input͕໌֬ʹͳΔ
    params ͱ͔͍͏ݟ͍ۤ͠άϩʔόϧ

    ม਺ͷΑ͏ͳ΋ͷΛ৮Βͳͯ͘ࡁΉ

    Α͏ʹͳΔ

    View Slide

  55. merb-action-argsͷ

    υΩϡϝϯτΑΓ(Ұ෦ฤू)
    class Foo < Merb::Controller
    def bar(baz)
    baz
    end
    end

    View Slide

  56. bundle͢Δ͚ͩͳΒ

    ෭࡞༻΋ͳ͍
    طଘͷRailsࣜͷίʔυ͸ͦͷ··ಈ࡞͢Δ
    ͭ·ΓೖΕͯଛͷͳ͍ϓϥΪϯͳͷͰͱΓ
    ͓͋͑ͣखݩͷ͢΂ͯͷRailsϓϩδΣΫτ
    ʹbundle͓ͯ͘͜͠ͱΛ͓קΊ͍ͨ͠
    ΞΫγϣϯͷҠߦ͸ॱ࣍ؾ͕޲͍ͨ࣌ʹ

    ΍Ε͹ྑ͍͠΍Βͳͯ͘΋ྑ͍

    View Slide

  57. FAQ: Railsʹඪ४Ͱ

    ೖΒͳ͍ͷʁ

    View Slide

  58. action_argsΛRailsຊମʹ

    Ϛʔδ͍ͨ͠
    ࣮͸աڈʹఏҊͨ͜͠ͱ͸͋ΔΜ
    ͚ͩͲɺDHHΛઆಘͰ͖ͣഊ๺
    ๻Ҏ֎ͷ୭͔͕ݴͬͯ͘ΕΔͱ

    ྑ͍ͷ͔ͳ͊

    View Slide

  59. Internals
    Gem໊ͱ͓ࢠ͞Μͷ໋໊ʹఆධͷ͋ΔɺAsakusa.rbͷ
    ͩ͞͞͞Μ࡞methoparaΛ࢖༻
    Method#parameters ͱ͍͏໓ଟʹ࢖ΘΕΔ͜ͱͷ

    ͳ͍χονͳศརػೳ
    ίϯτϩʔϥʔ಺Ͱ΋ʹΐ΋ʹΐ΍ΔΜ͚ͩͲɺ

    ͦͷ΁Μͷ΋ʹΐ΋ʹΐ͸Ϣʔβʔʹ͸ݟͤͨ͘ͳ͍
    Refinements Λ׆༻

    View Slide

  60. Asakusa.rbͷ _ksss͞Μͷॿݴ
    ͕͖͔͚ͬͰ

    View Slide

  61. Refinements
    զΒ͕ shugo͞Μͷҙཉ࡞
    ࢓༷͕༯ͯ͘͠େ޷͖ͳΜͰ

    ΊͬͪΌ࢖ͬͯ·͢
    ΋ͪΖΜॳظͷ࢓༷͕Ұ൪޷͖
    ͚ͩͬͨͲ

    View Slide

  62. Refinementsͷ׆༻ࣄྫ
    action_args, database_rewinder

    View Slide

  63. database_rewinder
    amatsuda/database_rewinder

    View Slide

  64. database_rewinder
    ݩ͸Cookpadࣾ಺Ͱ࢖ΘΕ͍ͯͨ @eudoxa

    ͞Μͷ࣮૷ͷOSSԽ
    ςʔϒϧ͕1000ݸͱ͔͋Δ؀ڥͰ͸ඞਢ
    transactional_testsͩͱCapybara + JSͳςετ
    ͕͏·͘ճΒͳ͍
    database_cleaner͸஗͗ͯ͢࢖͍෺ʹͳΒͳ͍

    View Slide

  65. ࠷ॳͷ࣮૷
    SQLͷ࣮ߦΛϑοΫͯ͠ɺςετ಺Ͱinsert͕
    ૸ͬͨςʔϒϧʹରͯ͠ͷΈdeleteΛ౤͛Δ
    deleteͷຊ਺͸ݮͬͨ΋ͷͷ·ͩ஗͍͠ϩά
    ͕ԚΕΔ
    1ൃ໨ͷdelete_allͱ͔ɺ݁ہશςʔϒϧΛ
    ର৅ʹdelete͢Δ

    View Slide

  66. ͦ͜Ͱ0.7ܥͰͷҟ༷ͳਐԽ
    ݸਓతʹ͸Ҏલ͔Β΍ͬͯΈ͔ͨͬͨςʔϚ
    multiple_queries
    1ճͷDBݺͼग़͠Ͱෳ਺ͷSQLจΛ౤͛ͯ
    Ψόοͱ࡟আ͢Δ
    ͜ͷϓϥάΠϯͷ֎Ͱ͸࢖Θͳ͍ػೳͳͷ
    Ͱɺ࣮૷͸RefinementsͰ

    View Slide

  67. multiple_queries
    ໭Γ஋͸ड͚औΕͳ͍ͷͰɺෳ਺ͷAR::RelationͷloadͷฒྻԽʹ࢖͑ͨΓͳΜ͔͸
    ͠ͳ͍
    SQLite3
    ౤͛ΕΔ਺ͷ্ݶΛҙࣝ͢Δඞཁ͕͋Γͦ͏͚ͩͲɺԿ΋ͯ͠ͳ͍ͷͰଟ෼

    ·ͩόάͬͯΔ
    PostgreSQL
    ී௨ʹಈ͘ɻ͑Β͍ɻ
    MySQL
    ͍ͭ΋ͷ͝ͱ͘໰୊ࣇ
    deleteͷͨΊͷผίωΫγϣϯΛுΔඞཁ͕͋ͬͯɺσουϩοΫ͕ى͖ͨΓ

    ͢Δ

    View Slide

  68. σουϩοΫ໰୊ͷղܾʁ
    READMEʹ৭ʑॻ͍ͨͷͰ౿Μͩਓ͸ಡΜͰ͍ͩ͘͞
    ͦ΋ͦ΋σουϩοΫىͯ͜͠Δͷ͸Կ͔࢖͍ํ
    ͕͓͔͍͠
    transactional_testϞʔυͰAR::Base.connectionͰτϥ
    ϯβΫγϣϯ͕͔͔ͬͯΔͷͰσουϩοΫ͢Δ
    transactional_testͩͬͨΒࣗ෼Ͱdeleteͱ͔͠ͳ͘
    ͯྑ͍͸ͣ

    View Slide

  69. transactional_testͱrewinderΛ
    εΠον͢Δͷ͕࠷ڧͰ͸ʁ
    Ͱ͖ͳ͍Μͩͳɺ͜Ε͕
    ؾʹͳΔਓ͸ࢼͯ͠Έ͍ͯͩ͘͞
    database_cleaner͞Μ͸transactionϞʔυ΋Ͳ͖Λ
    ࣗલͰ๊͑ͯΔͱ͍͏ΠϞے
    CapybaraΛඪ४࠾༻͢Δ༧ఆͷRails 5.1Ͱ͸୭͔
    ͕ARͷ͜ͷ͋ͨΓΛΰϦοͱ௚ͯ͋͛͠Δ͔͠
    ͳͦ͞͏

    View Slide

  70. ςετͱݴ͑͹
    FAQ: RSpec or minitest?

    View Slide

  71. RSpec or minitest?
    ๻͕͜Ε·Ͱʹ঺հͨࣗ͠࡞Gem
    ͷςετͰ͸શͯRSpec΋minitest
    ΋࢖ͬͯ·ͤΜ

    View Slide

  72. test-unit
    test-unit/test-unit

    View Slide

  73. test-unit
    My favorite testing framework
    ফڈ๏Ͱ
    ͱ͍͏͔ɺҰ൪;ͭ͏Ͱ·ͱ΋

    View Slide

  74. Killer Features
    power_assert
    ๻͸΄ͱΜͲ࢖ͬͯ·ͤΜ͕
    sub_test_case
    RSpecͷdescribeͱ͔contextΈ͍ͨʹ֊૚ߏ଄Λ
    ࣋ͬͨςετέʔε͕ॻ͚Δ
    ࣮૷ͱͯ͠͸ɺTestCaseͷಈతͳແ໊αϒΫϥε
    ͳͷͰsub_test_case

    View Slide

  75. sub_test_case
    ػೳࣗମ͸ศརͳΜ͚ͩͲ
    sub_test_case໊ͬͯલ͕Θ͔Γʹ͘͘ͳ͍

    Ͱ͔͢ʁ
    ෳ਺ͷ"test"ΛଋͶΔ΋ͷ͔ͩΒ"test_group"
    ͰͲ͏͔ʁͱ͍͏ఏҊΛͯ͠Έ͍ͯ·͢
    https://github.com/test-unit/test-unit/pull/130

    View Slide

  76. One More Thing

    View Slide

  77. rfd
    amatsuda/rfd

    View Slide

  78. OSX͸γΣϧ͸࢖͍΍ͯ͘͢ૉ੖Β͍͠Μ͚ͩ
    ͲɺFinder.app ͷ࢖͍উख͕ͱʹ͔͘ώυ͍
    ΍ͬͺλʔϛφϧ্Ͱಈ͘

    ϑΝΠϥʔ͕࠷ߴͩΑͳ
    FDΈ͍ͨͳ΍ͭ

    View Slide

  79. rfd
    RubyͰॻ͍ͯΈͨϑΝΠϥʔ
    ԡ͞ΕͨΩʔΛͦͷ··sendͯ͠ɺରԠ

    ͢Δ໊લͷϝιουΛݺͼग़ͯ͠Δ͚ͩɺ

    ͱ͍͏ܿ͗͢Δ࣮૷
    ҟৗͳ֦ுੑͷߴ͞Λ࣮ݱ
    RubyͳΒͰ͸

    View Slide

  80. ͜Μͳײ͡Ͱɺ๻͕ศརͩͱࢥͬͯ࢖ͬ
    ͍ͯΔಓ۩ʹ͸Φʔϓϯͳ΋ͷ͕ଟ͍
    ࣗ෼͕࡞ͬͨಓ۩Ͱʮศར͡Ό
    Μʂʯͱࢥͬͨ΋ͷ͸ͲΜͲΜ

    ެ։͢ΔΑ͏ʹ͍ͯ͠Δ
    ͦΕΛ࢖ͬͯ͘Εͨ୭͔͕ಥવ
    ΋ͬͱศརʹͯ͘͠ΕͨΓ͢Δ

    View Slide

  81. ϓϩάϥϚʔ͸ࣗ෼͕࢖͏

    ಓ۩Λࣗ෼Ͱ࡞Δ͜ͱ͕Ͱ͖Δ
    ͦΕΛ͠ͳ͍ͳΜͯ΋͍ͬͨͳ͍ʂ
    ָ͍͠ͷʹʂ

    View Slide

  82. ϓϩάϥϚʔʹ͸ࣗ෼͕࢖͏
    ಓ۩Λࣗ෼Ͱ࡞Δݖར͕͋Δ
    ୭ͷڐՄ΋ٻΊͳ͍͍ͯ͘ΜͰ͢Α
    (by @ppworks)
    ͨͩίʔυΛॻ͖࢝ΊΕ͹ྑ͍͚ͩ
    Ͱ΋ͬͯউखʹެ։͢Ε͹ྑ͍͚ͩ

    View Slide

  83. ࡞ͬͨ΋ͷ͕ྑ͍΋ͷͰ͋Ε͹ɺ

    ੈքʹ޿·Δ
    Πϯλʔωοτͷੈք͸ฏ͍ͨ
    ΈΜͳ͕࢖ͬͯ͘ΕͨΓ͢Δͱɺ
    ͪΐͬͱੈͷதΛม͑ͨΓͰ͖Δ͔΋
    ͠Εͳ͍
    ౡࠜʹډͳ͕Βʹͯ͠ੈքΛม͑ΒΕ
    Δʂ

    View Slide

  84. ౡࠜͷ͓·͑Β
    ౡࠜͱ͔ΊͬͪΌפ͍͠ޘָͩͬͯΧχ

    ৯͏͙Β͍͔͠ͳ͍͠ɺίʔυॻ͙͘Β͍

    ͔͢͠Δ͜ͱͳ͍Μ͔ͩΒίʔυॻ͚͹͍͍
    ͷʹ
    Ϗδωεͱҧ͓ͬͯۚ΋͔͔Βͳ͍͔Β

    ݝி΍ࢢ໾ॴͷαϙʔτͩͬͯཁΒͳ͍

    Ͱ͢Α

    View Slide

  85. ాࣷऀ(͔΋͠Εͳ͍)͍͢͝
    ϋοΧʔͷྫ
    @_why
    @normalperson

    View Slide

  86. ͋Δ͍͸ɺੈքͷ৭Μͳͱ͜Ζ͔
    ΒίʔυΛൃ৴ͯ͠Δཱྀਓͨͪ
    @apotonick
    @maccaw

    View Slide

  87. Ή͠Ζদߐ͸͍͢͝

    ܙ·ΕͯΔ
    ʮRuby Cityʯদߐ
    ੈքͰҰ൪Rubyʹৄ͍͓͠͡͞Μ
    ͱ͍͏஍Ҭࢿݯ
    ͳͥ͜ΕΛ΋ͬͱ׆͔͞ͳ͍ͷ͔

    View Slide

  88. ౡࠜͷΈΜͳɺ΋ͬͱίʔυ

    ॻ͍ͯੈքͱͭͳ͕ͬͯߦ͜͏Α
    ͱݴ͍͍ͨͰ͢ɻ

    View Slide

  89. ͱ͜ΖͰɺRuby City͸ࠓ΍

    দߐࢢ͞Μ͚ͩ͡Όͳ͍ΜͰ͢Α
    Yet Another Ruby City

    View Slide

  90. ୩ࠜઍ
    Did you know?

    View Slide

  91. ୩ࠜઍ as a Ruby City
    ۙॴͷਓ͕ͨͪົʹRubyʹৄ͍͠
    ๻ͷՈ͔Β
    ెา10෼: @_ko1
    ెา10෼: @shyouhei
    ెา15෼: @nalsh
    ెา10෼: @_zzak (New!)
    ెา20෼: @hsbt (New!)

    View Slide

  92. Rubyίϛολʔಉ࢜͸

    ͻ͔Ε߹͏ʁ
    ஍ҬRubyίϛϡχςΟ͕͸͔ͲΔ
    ͜ͷ఺Ͱ͸দߐʹ΋ෛ͚ͯͳ͍ͷ
    Ͱ͸ʁ

    View Slide

  93. We Code! You Code!
    ͕Μ͹ΕRuby City!

    View Slide

  94. end

    View Slide