Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
A Perl Monger in the Ruby World
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kentaro Kuribayashi
September 29, 2012
Technology
16k
16
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
A Perl Monger in the Ruby World
@yapcasia 2012
Kentaro Kuribayashi
September 29, 2012
More Decks by Kentaro Kuribayashi
See All by Kentaro Kuribayashi
あとはAIに任せて人間は自由に生きる
kentaro
5
2.2k
社会人力と研究力ー博士号をキャリアの武器にするー
kentaro
3
320
IoTシステム開発の複雑さを低減するための統合的アーキテクチャ
kentaro
2
2.4k
Bidirectional Quadratic Voting Leveraging Issue-Based Matching
kentaro
2
770
大高生へのメッセージ(令和6年度「大高未来塾」) / Messages to Current Students
kentaro
0
350
「始め方」の始め方 / How to Start Starting Things
kentaro
5
1k
Dynamic IoT Applications and Isomorphic IoT Systems Using WebAssembly
kentaro
1
1.7k
わたしがこのところハマっている「ライセンスフリー無線」のご紹介 / An Invitation to License-Free Radio
kentaro
1
770
先行きの見えなさを楽しさに変える ーVUCA時代のキャリア論と絶対他力主義ー / How to develop your career in the VUCA era
kentaro
8
6.9k
Other Decks in Technology
See All in Technology
5分でわかるDuckDB Quack
chanyou0311
2
250
フィジカル版Github Onshapeの紹介
shiba_8ro
0
320
現場のトークンマネジメント
dak2
1
190
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
200
Deep Data Security 機能解説
oracle4engineer
PRO
2
110
飲食店もAIで。レジ締めやハンディシステムをつくってる話 / Using AI for restaurant management
vtryo
0
160
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
240
AIチャット検索改善の3週間
kworkdev
PRO
2
170
PostgreSQL 19 新機能概要 OSC Hokkaido 2026
nori_shinoda
0
240
Zenoh on Zephyr on LiteX
takasehideki
2
110
時期が悪い!それでもRaspberry Piを買って遊んで活用するには / 20260627-osc26do-rpi-jikigawarui
akkiesoft
0
780
作る力から、見極める力へ — AI時代に広がるエンジニアの価値と役割
rince
0
330
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Building AI with AI
inesmontani
PRO
1
1.1k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Building an army of robots
kneath
306
46k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.6k
Navigating Team Friction
lara
192
16k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Color Theory Basics | Prateek | Gurzu
gurzu
0
370
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
470
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
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͋ΔΑ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠