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
98
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
120
渋谷アジャイルコミュニティへの想い #shibuyagile
treby
0
1.1k
久々にコードを書いてOmniauthでハマった話
treby
0
1k
IM@Study活動紹介
treby
1
570
全ての雑用を、生まれる前に消し去りたい
treby
0
530
Webエンジニアからデータエンジニアへ転向している話 #pronama
treby
0
400
Rails 6.0の気になった新機能 #shuuumai
treby
1
740
Shinjuku.rbの移り変わりについて、あるいは大規模カンファレンスの知見を募集したい話 #tqrk13
treby
1
170
EMの悩みにフォーカスする #em_izakaya
treby
0
560
Other Decks in Technology
See All in Technology
Amazon ECS & AWS Fargate 運用アーキテクチャ2025 / Amazon ECS and AWS Fargate Ops Architecture 2025
iselegant
16
5.6k
PHP開発者のためのSOLID原則再入門 #phpcon / PHP Conference Japan 2025
shogogg
4
770
25分で解説する「最小権限の原則」を実現するための AWS「ポリシー」大全 / 20250625-aws-summit-aws-policy
opelab
9
1.1k
「Chatwork」の認証基盤の移行とログ活用によるプロダクト改善
kubell_hr
1
170
AWS アーキテクチャ作図入門/aws-architecture-diagram-101
ma2shita
29
11k
ひとり情シスなCTOがLLMと始めるオペレーション最適化 / CTO's LLM-Powered Ops
yamitzky
0
440
Windows 11 で AWS Documentation MCP Server 接続実践/practical-aws-documentation-mcp-server-connection-on-windows-11
emiki
0
970
Snowflake Summit 2025全体振り返り / Snowflake Summit 2025 Overall Review
mtpooh
2
400
Github Copilot エージェントモードで試してみた
ochtum
0
110
AWS テクニカルサポートとエンドカスタマーの中間地点から見えるより良いサポートの活用方法
kazzpapa3
2
550
監視のこれまでとこれから/sakura monitoring seminar 2025
fujiwara3
11
3.9k
Javaで作る RAGを活用した Q&Aアプリケーション
recruitengineers
PRO
1
110
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
Rebuilding a faster, lazier Slack
samanthasiow
82
9.1k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.4k
A Tale of Four Properties
chriscoyier
160
23k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.3k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Writing Fast Ruby
sferik
628
61k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.3k
Faster Mobile Websites
deanohume
307
31k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Become a Pro
speakerdeck
PRO
28
5.4k
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!!
ࢀߟ: શମΞʔΩςΫνϟڞ༗