Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A Perl Monger in the Ruby World

A Perl Monger in the Ruby World

@yapcasia 2012

Kentaro Kuribayashi

September 29, 2012
Tweet

More Decks by Kentaro Kuribayashi

Other Decks in Technology

Transcript

  1. Rubyistͷࠃͷ
    Perl࢖͍
    @kentaro
    ܀ྛ݈ଠ࿠ paperboy&co.

    View Slide

  2. @kentaro
    ,ZPUPQNॴଐ
    ΤϯδχΞ
    1FSMFS ϧϏʔετ
    ฐࣾެࣜίϯςϯπ
    /FX

    ܀ྛ݈ଠ࿠
    paperboy&co.

    View Slide

  3. View Slide

  4. ٕज़ج൫੔උΤϯδχΞ

    View Slide

  5. View Slide

  6. ʊਓਓਓਓਓਓਓਓʊ
    ʼɹಥવͷRubyԽɹʻ
    ʉ^Y^Y^Y^Y^Y^Y^ʉ

    View Slide

  7. ͷΜͨΜ
    ·͚ͭΜ
    mizzy

    View Slide

  8. View Slide

  9. Kyoto.pm͔Βདྷ·ͨ͠

    View Slide

  10. Kyoto.pm΁Ҡ؅

    View Slide

  11. Cinnamon
    A Minimalistic Deploy Tool

    View Slide

  12. https://speakerdeck.com/u/kentaro/p/datamapper

    View Slide

  13. ࠷ۙ͸Perlશવॻ͍ͯ
    ͳ͍ ͨ·ʹίʔυϨ
    Ϗϡʔ͢Δ͙Β͍

    View Slide

  14. YAPCͷ5γϟπΛ
    ணͯRubyͷձͰ
    rubygemsΛDISͬͯ
    Δࢲͷ༐࢟Ͱ͢
    Emacsͷձͳͷʹ
    Subilme Text2ͷ࿩
    ͷΈͷεϥΠυ

    View Slide

  15. ͱ͍͏Θ͚Ͱɺࠓ೔
    ͸Perlʹ͸ಛʹؔ܎
    ͷͳ͍࿩Λ͠·͢ɻ

    View Slide

  16. ϖύϘͰ͸࠷
    ۙͳʹ΍ͬͯ
    ΔΜͰ͔͢ʁ
    ͏ʙΜʜͳΜͱ
    ͍͏͔ɺ͍Ζ͍
    ΖͰ͢Ͷʜɻ

    View Slide

  17. Ξ΢τϓοτͷେ੾͞
    http://www.flickr.com/photos/timjoyfamily/532089575/

    View Slide

  18. http://www.paperboy.co.jp/recruit/important/

    View Slide

  19. ҰൠԽ
    ݕূՄ
    ૑ൃੑ
    Ξ΢τϓοτ
    ֎ʹग़͢͜ͱͰ಺෦ࣄ৘
    ΛҰൠԽͰ͖Δ
    Ξ΢τϓοτ͞Εͳ͍͜
    ͱʹ͸ݕূ͠Α͏͕ͳ͍
    Ξ΢τϓοτͷॏͳΓ߹
    ͍͕৽͍͠΋ͷΛੜΉ

    View Slide

  20. ಺޲͖
    ֎޲͖
    ։ൃ؀ڥ੔උ
    ։ൃίϛϡχέʔγϣϯ
    ΞδϟΠϧ։ൃ
    αʔϏεϦϦʔε
    ϦʔϯελʔτΞοϓ
    ٕज़తΞ΢τϓοτ

    View Slide

  21. ։ൃϓϩηεͷվળ
    http://www.flickr.com/photos/betsyweber/6719452305/

    View Slide

  22. w/@hsbt
    ྡ੮ͷΔͼΓ͢ͱࢯ

    View Slide

  23. ϦʔϯελʔτΞοϓ
    εΫϥϜ
    91ϓϥΫςΟε
    ։ൃϓϩηεͷࡾ૚ߏ଄

    View Slide

  24. View Slide

  25. http://www.flickr.com/photos/goodoldsparky/2716165693/
    ίϯηϓτΛݻΊΔ

    View Slide

  26. ։ൃऀ
    ͷͨΊͷ

    ϖύϘձٞࣨ
    JEBOUJQPQ
    QBQFSCPZDP
    Ϧʔϯ
    ελʔτΞοϓ
    http://blog.kentarok.org/entry/2012/07/10/185408

    View Slide

  27. Build
    Measure
    Learn

    View Slide

  28. #.- #.- #.- #.- #.-
    #.-
    #VJME .FBTVSF -FBSO
    όοναΠζ

    View Slide


  29. αʔϏε։ൃΛՊֶ
    ࣮ݧͷΑ͏ʹԾઆͱͦ
    ͷݕূΛ௨ͯ͡ߦ͏͜
    ͱ

    ·ͣ͸Ծઆݕূͷͨ
    Ίͷඞཁ࠷খݶͷ੡඼
    Λ࡞Δ͜ͱ

    ԾઆݕূϧʔϓΛͰ
    ͖Δ͚ͩ଎͘ճ͢͜ͱ

    View Slide

  30. *OUSPEVDUJPOUP
    -FBO$BOWBT
    JEBOUJQPQ
    QBQFSCPZDP

    http://www.imi.ie/news-and-events/wp-content/uploads/2011/11/IMI-Ash-Maurya-Running-Lean-Presentation.pdf
    http://blog.kentarok.org/entry/2012/07/10/185408

    View Slide

  31. http://www.imi.ie/news-and-events/wp-content/uploads/2011/11/IMI-Ash-Maurya-Running-Lean-Presentation.pdf
    ໰୊

    ސ٬

    Ձ஋

    ղܾ

    ޿ใ

    ऩೖ

    ࢧग़

    ༏Ґ

    ݕূ

    View Slide

  32. View Slide

  33. http://d.hatena.ne.jp/nawoto/20111011/1318303619

    View Slide

  34. https://speakerdeck.com/u/nawoto/p/head-first-inception-deck?slide=11

    View Slide

  35. http://www.flickr.com/photos/cdm/2336025560/
    νʔϜͰ։ൃ͢Δ

    View Slide

  36. ϢʔβετʔϦऩू

    View Slide

  37. ϖʔύʔϓϩτλΠϐϯά

    View Slide

  38. εϓϦϯτܭը
    ϓϩμΫτόοΫϩά εϓϦϯτόοΫϩά

    View Slide

  39. εϓϦϯτϨϏϡʔ

    View Slide

  40. https://speakerdeck.com/u/nawoto/p/head-first-inception-deck?slide=11
    ίʔυϨϏϡʔ

    View Slide

  41. ϖΞϓϩάϥϛϯά

    View Slide

  42. https://speakerdeck.com/u/hsbt/p/20120916-sappororubykaigi2012

    View Slide

  43. https://speakerdeck.com/u/hsbt/p/20120916-sappororubykaigi2012?slide=59
    αΠΫϧλΠϜ
    Λ୹ॖ͢Δ

    View Slide

  44. http://www.slideshare.net/startuplessonslearned/2012-05-15-eric-ries-the-lean-startup-pwc-canada
    ੺ઢ͸։ൃऀʹͱͬͯಛʹॏཁͳࣄ߲

    View Slide

  45. ඇ3VCZͳձࣾͰ
    ͭͷํ๏
    !LFOUBSP
    ࢓ࣄʹΛ
    ࣋ͪࠐΉͨΊͷ
    ܀ྛ݈ଠ࿠ QBQFSCPZDP

    View Slide

  46. ࣗಈԽ
    ࣮֬ੑ
    ҆શੑ
    ଎͍αΠΫϧ
    capistrano/webistrano
    chef/puppet
    tests, more tests
    continuous integration
    developer sandbox
    incremental deployment

    View Slide

  47. ։ൃϓϩηε͕
    ઃܭΛม͑Δ
    http://www.flickr.com/photos/wolflawlibrary/4703808270/

    View Slide

  48. ໾ׂ
    ͱͯ͠
    ΰʔϧ
    Λୡ੒
    ͍ͨ͠ɻͦΕ͸
    ཧ༝
    ͷͨΊͩ
    ϢʔβετʔϦ

    View Slide

  49. ໾ׂ
    ͱͯ͠
    ΰʔϧ
    Λୡ੒
    ͍ͨ͠ɻͦΕ͸
    ཧ༝
    ͷͨΊͩ
    ໾ׂ
    ͱͯ͠
    ΰʔϧ
    Λୡ੒
    ͍ͨ͠ɻͦΕ͸
    ཧ༝
    ͷͨΊͩ
    ໾ׂ
    ͱͯ͠
    ΰʔϧ
    Λୡ੒
    ͍ͨ͠ɻͦΕ͸
    ཧ༝
    ͷͨΊͩ
    M
    V
    C

    View Slide

  50. package Controller::Cart;
    sub create {
    user->add_cart(params{book_id});
    # ...
    }
    controllers
    package Controller::Follow;
    sub create {
    user->add_follow(params{user_id});
    # ...
    }
    package Controller::Blog;
    sub create {
    user->add_post(params{text});
    # ...
    }
    package Model::User;
    sub add_cart {
    # ...
    }
    sub add_follow {
    # ...
    }
    sub add_post {
    # ...
    }
    model
    Too many methods.

    View Slide

  51. ػೳͱ࣮૷ʹؔ
    ࿈ੑ͕ͳ͍
    Կ͕໰୊͔
    ετʔϦͷݟ͑
    ͳ͍ઃܭ

    View Slide

  52. “Slim Controller,
    fat model”, but
    it’s too fat to be
    a model.
    ࢀߟ http://lab.ursm.jp/blog/2012/09/17/sapporo-rubykaigi-2012/
    Կ͕໰୊͔

    View Slide

  53. DCI Data
    Context
    Interaction

    View Slide

  54. “We can translate use case
    scenarios into algorithms,
    just in time, as new senarios
    enter the business process.
    We encode these algorithms
    directly as role methods.”

    View Slide

  55. View Slide

  56. package Controller::Cart;
    sub create {
    my $res = Context::Cart->new(
    user,
    params{item_id},
    )->call;
    # ...
    }
    controller
    package Context::Cart
    sub new {
    my ($class, $user, $item_id) = @_;
    $user->extend(“Role::Customer”);
    bless {
    user => $user,
    item_id => $item_id,
    }, $class;
    }
    sub call {
    my $self = shift;
    $self->{user}->add_cart(
    $self->{item_id}
    );
    }
    {
    package Role::Customer;
    sub add_cart { ... }
    }
    context
    https://github.com/kentaro/Class-Extendable
    `$user->extend` is
    enabled by my
    experimental module,
    Class::Extendable.

    View Slide

  57. ໾ׂ
    ͱͯ͠
    ΰʔϧ
    Λୡ੒
    ͍ͨ͠ɻͦΕ͸
    ཧ༝
    ͷͨΊͩ
    ໾ׂ
    ͱͯ͠
    ΰʔϧ
    Λୡ੒
    ͍ͨ͠ɻͦΕ͸
    ཧ༝
    ͷͨΊͩ
    Data
    +
    Role
    context
    Data
    +
    Role


    View Slide

  58. ετʔϦʔࢦ޲
    ͷઃܭ͕Մೳ
    DCIʹΑͬͯ
    Too fat model໰
    ୊΋ղܾ

    View Slide

  59. ։ൃϓϩηεͱ
    ੔߹͢Δઃܭɾ
    ࣮૷ख๏Λೖख
    DCIʹΑͬͯ

    View Slide

  60. ·ͱΊ

    View Slide

  61. Ξ΢τϓοτॏཁ
    ·ͱΊ
    ։ൃऀͷΞ΢τϓοτΛ
    ߴΊΔ
    ։ൃϓϩηεΛվળ͢Δ
    DCI΋͋ΔΑ

    View Slide

  62. ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide