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
100
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
160
渋谷アジャイルコミュニティへの想い #shibuyagile
treby
0
1.2k
久々にコードを書いてOmniauthでハマった話
treby
0
1k
IM@Study活動紹介
treby
1
590
全ての雑用を、生まれる前に消し去りたい
treby
0
560
Webエンジニアからデータエンジニアへ転向している話 #pronama
treby
0
410
Rails 6.0の気になった新機能 #shuuumai
treby
1
750
Shinjuku.rbの移り変わりについて、あるいは大規模カンファレンスの知見を募集したい話 #tqrk13
treby
1
170
EMの悩みにフォーカスする #em_izakaya
treby
0
570
Other Decks in Technology
See All in Technology
ググるより、AIに聞こう - Don’t Google it, ask AI
oikon48
0
920
re:Invent2025 事前勉強会 歴史と愉しみ方10分LT編
toshi_atsumi
0
130
Lazy Constant - finalフィールドの遅延初期化
skrb
0
220
Spring Boot利用を前提としたJavaライブラリ開発方法の提案
kokihoshihara
PRO
2
220
身近なCSVを活用する!AWSのデータ分析基盤アーキテクチャ
koosun
0
1.3k
[mercari GEARS 2025] Building Foundation for Mercari’s Global Expansion
mercari
PRO
1
130
Introducing RFC9111 / YAPC::Fukuoka 2025
k1low
1
250
「O(n log(n))のパフォーマンス」の意味がわかるようになろう
dhirabayashi
0
180
AIと共に開発する時代の組織、プロセス設計 freeeでの実践から見えてきたこと
freee
4
720
Capitole du Libre 2025 - Keynote - Cloud du Coeur
ju_hnny5
0
110
AIでテストプロセスを自動化しよう251113.pdf
sakatakazunori
0
160
Javaコミュニティの歩き方 ~参加から貢献まで、すべて教えます~
tabatad
0
130
Featured
See All Featured
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
140
34k
Scaling GitHub
holman
463
140k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Typedesign – Prime Four
hannesfritz
42
2.9k
Building a Scalable Design System with Sketch
lauravandoore
463
33k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Agile that works and the tools we love
rasmusluckow
331
21k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Optimizing for Happiness
mojombo
379
70k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
YesSQL, Process and Tooling at Scale
rocio
174
15k
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!!
ࢀߟ: શମΞʔΩςΫνϟڞ༗