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
Octocatは技術的負債の夢を見るか?
Search
Hiroaki Ninomiya
July 13, 2018
Technology
0
96
Octocatは技術的負債の夢を見るか?
2018/07/13
Rails Developers Meetup 2018 Day 3 Extreme
https://techplay.jp/event/679666
Hiroaki Ninomiya
July 13, 2018
Tweet
Share
More Decks by Hiroaki Ninomiya
See All by Hiroaki Ninomiya
スタートアップとは何か?アジャイル文脈で何が大変なのか? #shibuyagile
treby
0
100
渋谷アジャイルコミュニティへの想い #shibuyagile
treby
0
1k
久々にコードを書いてOmniauthでハマった話
treby
0
1k
IM@Study活動紹介
treby
1
560
全ての雑用を、生まれる前に消し去りたい
treby
0
520
Webエンジニアからデータエンジニアへ転向している話 #pronama
treby
0
380
Rails 6.0の気になった新機能 #shuuumai
treby
1
730
Shinjuku.rbの移り変わりについて、あるいは大規模カンファレンスの知見を募集したい話 #tqrk13
treby
1
160
EMの悩みにフォーカスする #em_izakaya
treby
0
550
Other Decks in Technology
See All in Technology
新卒から4年間、20年もののWebサービスと向き合って学んだソフトウェア考古学 - PHPカンファレンス新潟2025 / new graduate 4year software archeology
oguri
2
360
Java 30周年記念! Javaの30年をふりかえる
skrb
1
770
コードの考古学 〜労務システムから発掘した成長の糧〜
kenta_smarthr
1
1.2k
Eight Engineering Unit 紹介資料
sansan33
PRO
0
3.2k
AIとSREの未来 / AI and SRE
ymotongpoo
2
1.3k
カンファレンスのつくりかた / The Conference Code: What Makes It All Work
tomzoh
8
930
Roo Codeにすべてを委ねるためのルール運用
pharma_x_tech
1
230
ソフトウェアは捨てやすく作ろう/Let's make software easy to discard
sanogemaru
10
5.8k
KMP導⼊において、マネジャーとして考えた事
sansantech
PRO
1
210
DevOpsDays Taipei 2025 -- Creating Awesome Change in SmartNews!
martin_lover
0
160
大手企業のAIツール導入の壁を越えて:サイバーエージェントのCursor活用戦略
gunta
19
5.2k
Machine Intelligence for Vision, Language, and Actions
keio_smilab
PRO
0
500
Featured
See All Featured
The Language of Interfaces
destraynor
158
25k
4 Signs Your Business is Dying
shpigford
183
22k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
The Invisible Side of Design
smashingmag
299
50k
For a Future-Friendly Web
brad_frost
178
9.7k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.7k
What's in a price? How to price your products and services
michaelherold
245
12k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Practical Orchestrator
shlominoach
188
11k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.6k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
Transcript
Octocatٕज़తෛ࠴ͷເΛ ݟΔ͔? 2018/07/13 @treby006 Rails Developers Meetup Day3
ࣗݾհ • treby (@treby006) Shinjuku.rb • Reproגࣜձࣾ Dev2νʔϜϦʔμʔ • RailsͰ৽͍͠ػೳΛ࡞ͬͨΓɺطଘػೳͷ
վળͨ͠Γ͍ͯ͠Δͱ͜Ζ • Rails, Vue.js, AWS(ECS, EMR), Go
ReproͷϦϙδτϦ • Railsͷίʔυϕʔε • Πϯϑϥίʔυཧ • ӡ༻εΫϦϓτྨ • ͳͲͳͲ
ReproͷϦϙδτϦ • Railsͷίʔυϕʔε • Πϯϑϥίʔυཧ • ӡ༻εΫϦϓτྨ • ͳͲͳͲ
աڈҰؒͷCommit 2Ґ
աڈҰؒͷAdditions/Deletions 1Ґ (͔ΓͮΒ͍υϠϦϯά)
ReproͷϦϙδτϦ • Railsͷίʔυϕʔε • Πϯϑϥίʔυཧ • ӡ༻εΫϦϓτྨ • ͳͲͳͲ •
େମ CTOͷਓ͕Contribute্Ґ ʹ͍ΔϠόΠ
Reproͷ͝հ
We are hiring!! • ΞϐʔϧϙΠϯτ • େنσʔλ / B to
B ͳΒͰͷݻ͞ • َͷΑ͏ʹίʔυ͕ॻ͚Δ • ఆ࣌ͷ֓೦͕ͳ͍ • ࣗ༝ʗϦϞʔτϫʔΫࣗ༝ • Conferenceνέοτ͕ग़Δ
ͳʹͱͧͳʹͱͧ
ຊ: ٕज़తෛ࠴
ٕज़తෛ࠴ͱ ٕज़తෛ࠴ʢӳ: Technical debtʣͱɺߦ͖ ͨΓͬͨΓͳιϑτΣΞΞʔΩςΫνϟͱɺ ༨༟ͷͳ͍ιϑτΣΞ։ൃ͕Ҿ͖ى݁͜͢Ռͷ ͜ͱΛࢦ͢৽͍͠ൺᄻͰ͋Δ ʮઃܭ্ͷෛ࠴(design debt)ʯͱݴ͏ɻ ----
Wikipediaʮٕज़తෛ࠴ʯΑΓ
Կؾͳ͘͏༻ޠ͚ͩͲ • ࣮ͦͷ࣮ମΛ௫Έ͖Ε͍ͯͳ͍ • ΤϯδχΞʮ͋ʔͳΔ΄ͲͶʯ • ҰํɺϏδωε্ͷϦεΫ͕͔ΓͮΒ͍ • ٕज़తෛ࠴Λ͡Δલʹٕज़తෛ࠴ΛΒͳ͚ ΕͳΒͳ͍
ཧͯ͠Έͨ
ཧͯ͠Έͨ
ٕज़తෛ࠴ • ݏͩɺͳ͍ͨ͘͠ • ଟ͖ͳਓ͍ͳ͍
ٕज़తෛ࠴ • ݏͩɺͳ͍ͨ͘͠ • ଟ͖ͳਓ͍ͳ͍ • ͳͥʁ => ͕͋Δ͔Β •
ͲΜͳʁ
ٕज़తෛ࠴ʹΑΔฐ • ੬͍ઃܭ • อकੑͷԼ • ϞνϕʔγϣϯͷԼ(։ൃޮͷԼ) • νʔϜͷ݈߁ੑͷԼ •
৬ɾ࠾༻ • ࣄۀͷࣦഊ
ٕज़తෛ࠴ͱݺΕΔͷ • छྨ • ͍ΘΏΔΫιίʔυ • εέʔϧ͠ͳ͍ΞʔΩςΫνϟ • ͜͜·Ͱམͱͤ۩ମྫΛ૾͍͢͠ •
ࠓճɺಛʹίʔυ࣮ʹϑΥʔΧε
Ξϯνύλʔϯ(Railsฤ)
έʔε1 ಠࣗDSL/ϑϨʔϜϫʔΫΛΞϓϦέʔγϣϯίʔ υʹೖΕΔ class SomeDSL def self.configulation(*args) end module Definition
def provide(&definition) end end : : end
ಠࣗDSL/ϑϨʔϜϫʔΫΛΞϓϦέ ʔγϣϯίʔυʹೖΕΔ • 0 → 1ͷϑΣʔζͰΓ͕ͪ • େόάϑΟΫεػೳՃͷϫʔΫΞϥϯ υ͕ੵΈॏͳͬͯݟ௨͠ѱ͘ͳΔ •
ͦͷ෦͕ຊʹރΕ͍ͯΕʹͳΒ ͳ͍͜ͱ͋Δ͕……
ಠࣗDSL/ϑϨʔϜϫʔΫΛΞϓϦέ ʔγϣϯίʔυʹೖΕΔ • ։ൃऀ͕ࣗखΛೖΕ͍͢ͷ͕·͍ͣ • ͦͷ࣌୲͍ͯ͠Δػೳ։ൃϕʔεͰमਖ਼Ͱ ͖Δ • ॳ͋ͬͨͣͷDSL/ϑϨʔϜϫʔΫͷࢥ ͕յΕΔ
ಠࣗDSL/ϑϨʔϜϫʔΫΛΞϓϦέ ʔγϣϯίʔυʹೖΕΔ • ָ͍͠RubyͱͷτϨʔυΦϑ • ॻ͖ͨ͘ͳΔ͚ͲνʔϜ։ൃͰ߇͑ͨ΄ ͏͕ແ • gemͱͯ͠OSSެ։ͷํ͕݈શ
έʔε2 ͕ᐆດͳΛऔΓೖΕͯ͠·͏ class SomeController < ApplicationController : : def create
@presenter = SomePresenter.new(@some_model) if @presenter.save redirect_to :some_path else render :new end end end
έʔε2 class SomePresenter < PresenterBase attr_reader :form delegate :save, to:
:form def initialize(some_model) @form = SomeForm.new(some_model.attributes, self) end : : end
έʔε2 class SomeForm < FormBase validate :something : : def
initialize(params) : : end end
͕ᐆດͳΫϥεΛऔΓೖΕͯ͠· ͏ • ͍ΘΏΔࣅඇαʔϏεΫϥε • RailsͷϨʔϧʹ͍ͬͯͳ͍෦ • Կͷͳ͍Α͏ʹݟ͑Δ • ͕ɺෳਓͰ։ൃΛଓ͚ͯΔͱ……
SomeForm : Before class SomeForm < FormBase validate :something :
: def initialize(params) : : end end
SomeForm : After class SomeForm < FormBase validate :something :
: attr_reader :presenter def initialize(params, presenter) : @presenter = presenter : end def validate presenter.some_methods super end end
Presenter : Before class SomePresenter < PresenterBase attr_reader :form delegate
:save, to: :form def initialize(some_model) @form = SomeForm.new(some_model.attributes, self) end : : end
Presenter : After class SomePresenter < PresenterBase attr_reader :form def
initialize(some_model) @form = SomeForm.new(some_model.attributes, self) end def save : @form.save : end : : end
͕ᐆດͳΫϥεΛऔΓೖΕͯ͠· ͏ • ݁߹্͕Γଓ͚ɺΠϯελϯεͷ૬ޓࢀর ͕ൃੜ • Ͳ͜ʹॻ͚Α͍ͷ͔Θ͔Βͳ͍͠ɺͲ͜ ʹॻ͍ͯΑ͍ؾ͕ͯ͘͠Δ • ৮Γͨ͘ͳ͍͠ɺ৮ΔͱόάΔ
ͷͰɺ࠷খͷ มߋͰٻΊΒΕ͍ͯΔཁ݅Λຬͨ͢Α͏ʹͳΔ • ׂΕ૭ཧ
͕ᐆດͳΫϥεΛऔΓೖΕͯ͠· ͏ • ͜͏͍͏ͱ͜ΖʹݶͬͯɺϏδωεతʹίΞཁ ૉͩͬͨΓ͢Δ • ฐࣾͰ͍͏ͱϞσϧΛϑϩϯτ͔Β࡞͢Δ෦ ʹଘࡏ͍ͯͨ͠ • ͢ͷʹ͘Β͍͔͔Γ·ͨ͠
• ͠ɺ௧Έ͋ͬͨ
ͱ͍͑ • ίʔυϨϏϡʔͯ͠Δ͠ɺCIճ͍ͬͯΔ • ͦΕͰͳ͓ෛ࠴ͱݺΕΔͷ͕ੜ·Ε Δͷͳ͔ͥ
ٕज़తෛ࠴͕ੜ·ΕΔཧ༝ • ҰݸਓʹىҼ • ࣌ؒෆ • ٕज़ྗෆ • ৸ෆ •
͕ɺݱ࣮ʹνʔϜ։ൃͰ͕ࣗΒͳ͍͏ͪ ʹίʔυ͕มߋ͞Ε͍ͯΔͱ͍͏͜ͱΑ͋͘ Δ
ࣄۀతʹՁ͕͋Δͱ͜Ζʹ ෛ࠴ཷ·Γ͍͢ • ࣄۀతʹՁ͕͋Δ • → ଟ͘ػೳཁ͕݅ೖΔ • → ଟ͘ͷϝϯόʔ͕मਖ਼͢ΔՄೳੑ͕͋Δ
• → ͔ͭɺଟ͘ํస͢ΔՄೳੑ͕͋Δ • ෳਓͰಉ͡ՕॴΛසൟʹ৮ΔͷͰɺٕज़తෛ ࠴͕ੜ·Ε͍͢
͖͞΄ͲͷΞϯνύλʔϯ • ࠷ॳͷίʔυ͕ॻ͔Εͨஈ֊ɿ ͻͲ͘ͳ͍ • αʔϏεΛਐΊΔ͋ΔλΠϛϯάͰੜ·Ε ͯ͠·ͬͨͷ • ٕज़తෛ࠴ͷΞϯνύλʔϯ =>
ٕज़తෛ࠴ ΛੜΈग़ͯ͘͢͠͠͠·͏Ξϯνύλʔϯ • ٕज़తෛ࠴ΛੜΈग़͞ͳ͍ίʔυͳ͍ • αʔϏεΛΒͤଓ͚ΔݶΓɺίʔυͷมߋ ආ͚ΒΕͳ͍
େࣄͳ͜ͱ • ։ൃΛग़͠ͳ͕ΒɺػೳՃΛ͠ͳ͕Βί ʔυͷ݈߁ੑΛอͭ͜ͱ • ։ൃ(αʔϏε)͕ਐΉաఔͰίʔυશମΛ၆ ᛌ͢ΔػձΛઃ͚Δ͜ͱ • ͦΕͧΕҧ͏։ൃऀ͕ಉ͡ઢͰίʔυશ ମΛΈଓ͚Δ͜ͱ
ٕज़తෛ࠴ : νʔϜ։ൃ
ٕज़తෛ࠴Λ࡞Βͳ͍
ٕज़తෛ࠴Λ࡞Βͳ͍
ٕज़తෛ࠴ͱ͖߹͏
ٕज़తෛ࠴ͳͥੜ·ΕΔͷ͔ • ෆ࣮֬ੑͷରॲͷࣦഊ • ࣗʹͱͬͯΘ͔Βͳ͍(ෆ࣮֬ͳ)ͷɿ ະདྷͱଞਓ • ͜ΕΒෆ࣮֬ͳͷʹରॲ͖͠Εͳ͔ͬͨ • νʔϜͱͯ͠ɺෆ࣮֬ੑʹͲ͏͖߹͍ͬͯ͘
͔
ٕज़తෛ࠴ͷਖ਼ମ
લʹਐΜͰ͍Δ͔Βͦ͜ͷٕज़తෛ࠴
͜Θ͘ͳ͍ٕज़తෛ࠴ • ͲΜͳʹࠅ͍ίʔυͰɺ͜ͷઌ͍͡Δ͜ͱ͕ ઈରʹͳ͍ͷͰ͋Εෛ࠴Ͱͳ͍ • ٕज़తෛ࠴ʹΑΔਏ͞ͷࠜݯ • ࠓͦͷ࣌ɺػೳΛՃ͠Α͏ͱͯ͠Ͱ͖ ͳ͍ʗͮ͠Β͍ͨΊ •
ࠓͷ͜ͱ͕ࠓΑΓෆ࣮֬ͩͬͨաڈʹɺ͔͠ ͨ͠ΒࣗͰͳ͍ଞਓ͕ॻ͍ͨίʔυΛࠓ͍͡ Δͷ͕ਏ͍
ະདྷ ͷෆ࣮֬ੑ୭ʹରॲ Ͱ͖ͳ͍
ଞਓ ͷෆ࣮֬ੑϝιουͰ ղফͰ͖Δ͔͠Εͳ͍
ଞਓͱͷؒͷෆ࣮֬ੑʹରॲ͢Δϝι ου • ରɾϏδωεαΠυ(ඇΤϯδχΞ) • ϢϏΩλεݴޠ • ରɾΤϯδχΞ • ઃܭ(ਤͷڞ༗)
ଞਓͱͷؒͷෆ࣮֬ੑʹରॲ͢Δϝι ου • ରɾϏδωεαΠυ(ඇΤϯδχΞ) • ϢϏΩλεݴޠ • ରɾΤϯδχΞ • ઃܭ(ਤͷڞ༗)
• ଞͷ෦ʹ͍ͭͯલग़ͷຊ͕ৄ͍͠
ਤΛڞ༗͢Δ https://speakerdeck.com/joker1007/realworld- domain-model-on-rails
ਤΛڞ༗͢Δ https://speakerdeck.com/joker1007/realworld- domain-model-on-rails
νʔϜͰਤΛڞ༗͢ΔͨΊʹ৺͕͚ ͍ͯΔ͜ͱ • ਤ͕͢Ͱʹ͋Ε • ڊਓͷݞͷ্ʹཱͭɿϨʔϧʹΓଓ͚Δ • ਤ͕ͳ͍ͷͰ͋Ε • ਤΛ࡞ͬͯ
ڭ͢Δ
ϨʔϧʹΓଓ͚Δͱ͍͏બ • Railsͷ͍͢͝ͱ͜Ζ • Ϩʔϧͱ͍͏໊ͷਤ͕͍ൣғͰڞ༗͞ Ε͍ͯΔ͜ͱ • CoC (Convention over
Configuration) • RailsΤϯδχΞRailsϓϩδΣΫτͰ͋Εଈ ઓྗΛظͰ͖Δ(ࣄ͕ଟ͍) • Ϩʔϧ͔Β֎Ε·ͬͯͨ͘߹ผ͕ͩ
ਤ͕ͳ͍෦ʹ໘ͨ͠Β • ͱ͍͑ɺਤͷͳ͍Ҭଟ͍ • ͦͷձࣾಛ༗ͷΧϧνϟʔ • ฐࣾͩͬͨΒσʔλετΞܥͷ֓೦͕ଟ͘ ଘࡏ͢Δ • ਤΛ࣋ͨͳ͍ਓ:
ͲΜͳਤ͕͍Δͷ͔ͷΤ εΧϨ • ਤΛ࣋ͭਓ: ਤΛ͘Β͠ΊΔྗ
·ͣॻ͍ͯΈΔ
ϨϏϡʔΛґཔ
ͨΓલͩ͠ຯ͚ͩͲɺ͢ ͘͝େࣄ !
ࣼʹߏ͍͑ͯͯ͝ΊΜͳ͍͞ !
·ͱΊ • ٕज़తෛ࠴ɿωΨςΟϒͳΠϝʔδ • ͍ΘΏΔٕज़తෛ࠴ʹΑΔѱӨڹ • ࠓͦͷ࣌ɺखΛՃ͑Α͏ͱ͢Δׂ͕ࣗ৯ ͍ͬͯΔͨΊ • ࣗࣗίϯτϩʔϧՄೳ(Ͱ͢ΑͶʁ)
• ίϯτϩʔϧෆೳͳͷ ະདྷͱଞਓ
·ͱΊ • ະདྷͷෆ࣮֬ੑͷରॲఘΊͨʹͯ͠ɺଞ ਓͱͷෆ࣮֬ੑͳΒݮΒͤΔ͔ • νʔϜͰਤΛڞ༗͠Α͏ • ྑ͖νʔϜ։ൃΛʂ • ະདྷ͕ݟ͑ͳ͍ʁͦΕͳΒ……
We are hiring!! • ΞϐʔϧϙΠϯτ • େنσʔλ / B to
B ͳΒͰͷݻ͞ • َͷΑ͏ʹίʔυ͕ॻ͚Δ • ఆ࣌ͷ֓೦͕ͳ͍ • ࣗ༝ʗϦϞʔτϫʔΫࣗ༝ • Conferenceνέοτ͕ग़Δ
એɿRepro Tech Meetup https://repro-tech.connpass.com/event/94282/
Happy Hacking!!
ࢀߟ: શମΞʔΩςΫνϟڞ༗