Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
A Perl Monger in the Ruby World
Kentaro Kuribayashi
September 29, 2012
Technology
17
15k
A Perl Monger in the Ruby World
@yapcasia 2012
Kentaro Kuribayashi
September 29, 2012
Tweet
Share
More Decks by Kentaro Kuribayashi
See All by Kentaro Kuribayashi
kentaro
2
590
kentaro
1
1k
kentaro
0
120
kentaro
1
490
kentaro
3
480
kentaro
0
430
kentaro
3
1.3k
kentaro
3
570
kentaro
0
12k
Other Decks in Technology
See All in Technology
ihcomega56
2
950
hiyosi
0
120
kaga
0
350
aamine
4
970
kawaguti
0
480
tsugimot
0
100
sumi
1
300
mathetake
2
160
kadoppe
1
250
kinunori
1
260
takatoshiroto
0
140
yuzoiwasaki
0
180
Featured
See All Featured
dougneiner
56
5.4k
qrush
285
19k
holman
288
130k
jeffersonlam
330
15k
bryan
32
3.5k
62gerente
586
200k
trallard
15
840
davidbonilla
71
3.6k
tanoku
259
24k
lemiorhan
629
48k
addyosmani
1346
200k
maltzj
502
36k
Transcript
Rubyistͷࠃͷ Perl͍ @kentaro ܀ྛ݈ଠ paperboy&co.
@kentaro ,ZPUPQNॴଐ ΤϯδχΞ 1FSMFS ϧϏʔετ ฐࣾެࣜίϯςϯπ /FX ܀ྛ݈ଠ paperboy&co.
None
ٕज़ج൫උΤϯδχΞ
None
ʊਓਓਓਓਓਓਓਓʊ ʼɹಥવͷRubyԽɹʻ ʉ^Y^Y^Y^Y^Y^Y^ʉ
ͷΜͨΜ ·͚ͭΜ mizzy
None
Kyoto.pm͔Βདྷ·ͨ͠
Kyoto.pmҠ
Cinnamon A Minimalistic Deploy Tool
https://speakerdeck.com/u/kentaro/p/datamapper
࠷ۙPerlશવॻ͍ͯ ͳ͍ ͨ·ʹίʔυϨ Ϗϡʔ͢Δ͙Β͍
YAPCͷ5γϟπΛ ணͯRubyͷձͰ rubygemsΛDISͬͯ Δࢲͷ༐࢟Ͱ͢ Emacsͷձͳͷʹ Subilme Text2ͷ ͷΈͷεϥΠυ
ͱ͍͏Θ͚Ͱɺࠓ Perlʹಛʹؔ ͷͳ͍Λ͠·͢ɻ
ϖύϘͰ࠷ ۙͳʹͬͯ ΔΜͰ͔͢ʁ ͏ʙΜʜͳΜͱ ͍͏͔ɺ͍Ζ͍ ΖͰ͢Ͷʜɻ
Ξτϓοτͷେ͞ http://www.flickr.com/photos/timjoyfamily/532089575/
http://www.paperboy.co.jp/recruit/important/
ҰൠԽ ݕূՄ ൃੑ Ξτϓοτ ֎ʹग़͢͜ͱͰ෦ࣄ ΛҰൠԽͰ͖Δ Ξτϓοτ͞Εͳ͍͜ ͱʹݕূ͠Α͏͕ͳ͍ ΞτϓοτͷॏͳΓ߹ ͍͕৽͍͠ͷΛੜΉ
͖ ֎͖ ։ൃڥඋ ։ൃίϛϡχέʔγϣϯ ΞδϟΠϧ։ൃ αʔϏεϦϦʔε ϦʔϯελʔτΞοϓ ٕज़తΞτϓοτ
։ൃϓϩηεͷվળ http://www.flickr.com/photos/betsyweber/6719452305/
w/@hsbt ྡ੮ͷΔͼΓ͢ͱࢯ
ϦʔϯελʔτΞοϓ εΫϥϜ 91ϓϥΫςΟε ։ൃϓϩηεͷࡾߏ
None
http://www.flickr.com/photos/goodoldsparky/2716165693/ ίϯηϓτΛݻΊΔ
։ൃऀ ͷͨΊͷ ϖύϘձٞࣨ JEBOUJQPQ QBQFSCPZDP Ϧʔϯ ελʔτΞοϓ http://blog.kentarok.org/entry/2012/07/10/185408
Build Measure Learn
#.- #.- #.- #.- #.- #.- #VJME .FBTVSF -FBSO όοναΠζ
αʔϏε։ൃΛՊֶ ࣮ݧͷΑ͏ʹԾઆͱͦ ͷݕূΛ௨ͯ͡ߦ͏͜ ͱ ·ͣԾઆݕূͷͨ Ίͷඞཁ࠷খݶͷ Λ࡞Δ͜ͱ
ԾઆݕূϧʔϓΛͰ ͖Δ͚ͩ͘ճ͢͜ͱ
*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
http://www.imi.ie/news-and-events/wp-content/uploads/2011/11/IMI-Ash-Maurya-Running-Lean-Presentation.pdf ސ٬ Ձ ղܾ ใ
ऩೖ ࢧग़ ༏Ґ ݕূ
None
http://d.hatena.ne.jp/nawoto/20111011/1318303619
https://speakerdeck.com/u/nawoto/p/head-first-inception-deck?slide=11
http://www.flickr.com/photos/cdm/2336025560/ νʔϜͰ։ൃ͢Δ
ϢʔβετʔϦऩू
ϖʔύʔϓϩτλΠϐϯά
εϓϦϯτܭը ϓϩμΫτόοΫϩά εϓϦϯτόοΫϩά
εϓϦϯτϨϏϡʔ
https://speakerdeck.com/u/nawoto/p/head-first-inception-deck?slide=11 ίʔυϨϏϡʔ
ϖΞϓϩάϥϛϯά
https://speakerdeck.com/u/hsbt/p/20120916-sappororubykaigi2012
https://speakerdeck.com/u/hsbt/p/20120916-sappororubykaigi2012?slide=59 αΠΫϧλΠϜ Λॖ͢Δ
http://www.slideshare.net/startuplessonslearned/2012-05-15-eric-ries-the-lean-startup-pwc-canada ઢ։ൃऀʹͱͬͯಛʹॏཁͳࣄ߲
ඇ3VCZͳձࣾͰ ͭͷํ๏ !LFOUBSP ࣄʹΛ ࣋ͪࠐΉͨΊͷ ܀ྛ݈ଠ QBQFSCPZDP
ࣗಈԽ ࣮֬ੑ ҆શੑ ͍αΠΫϧ capistrano/webistrano chef/puppet tests, more tests continuous
integration developer sandbox incremental deployment
։ൃϓϩηε͕ ઃܭΛม͑Δ http://www.flickr.com/photos/wolflawlibrary/4703808270/
ׂ ͱͯ͠ ΰʔϧ Λୡ ͍ͨ͠ɻͦΕ ཧ༝ ͷͨΊͩ ϢʔβετʔϦ
ׂ ͱͯ͠ ΰʔϧ Λୡ ͍ͨ͠ɻͦΕ ཧ༝ ͷͨΊͩ ׂ ͱͯ͠ ΰʔϧ
Λୡ ͍ͨ͠ɻͦΕ ཧ༝ ͷͨΊͩ ׂ ͱͯ͠ ΰʔϧ Λୡ ͍ͨ͠ɻͦΕ ཧ༝ ͷͨΊͩ M V C
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.
ػೳͱ࣮ʹؔ ࿈ੑ͕ͳ͍ Կ͕͔ ετʔϦͷݟ͑ ͳ͍ઃܭ
“Slim Controller, fat model”, but it’s too fat to be
a model. ࢀߟ http://lab.ursm.jp/blog/2012/09/17/sapporo-rubykaigi-2012/ Կ͕͔
DCI Data Context Interaction
“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.”
None
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.
ׂ ͱͯ͠ ΰʔϧ Λୡ ͍ͨ͠ɻͦΕ ཧ༝ ͷͨΊͩ ׂ ͱͯ͠ ΰʔϧ
Λୡ ͍ͨ͠ɻͦΕ ཧ༝ ͷͨΊͩ Data + Role context Data + Role ର ର
ετʔϦʔࢦ ͷઃܭ͕Մೳ DCIʹΑͬͯ Too fat model ղܾ
։ൃϓϩηεͱ ߹͢Δઃܭɾ ࣮ख๏Λೖख DCIʹΑͬͯ
·ͱΊ
Ξτϓοτॏཁ ·ͱΊ ։ൃऀͷΞτϓοτΛ ߴΊΔ ։ൃϓϩηεΛվળ͢Δ DCI͋ΔΑ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠