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
DRY原則を誤った結果生まれた技術的負債
Search
Tech Leverages
June 30, 2023
Technology
0
6.5k
DRY原則を誤った結果生まれた技術的負債
DRY原則を誤った結果生まれた技術的負債
Tech Leverages
June 30, 2023
Tweet
Share
More Decks by Tech Leverages
See All by Tech Leverages
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
610
2025年のデザインシステムとAI 活用を振り返る
leveragestech
0
740
ディメンショナルモデリングを採用してない組織がモデリング本を通じて得られたこと
leveragestech
0
670
レバレジーズのLangfuse活用事例
leveragestech
0
600
CloudComposerによる大規模ETL 「制御と実行の分離」の実践
leveragestech
0
930
「ELT職人」から卒業!Fivetranでデータパイプラインの構築・運用から解放され、 本来の価値創造に集中できる ようになった事例
leveragestech
0
600
SpecKitでどこまでできる? コストはどれくらい?
leveragestech
2
4.1k
未来を拓くAI技術〜エージェント開発とAI駆動開発〜
leveragestech
2
300
コンテキストエンジニアリングで変わるAI活用 リファクタリングワークフローの実践から学んだ形式知
leveragestech
0
180
Other Decks in Technology
See All in Technology
モノタロウ x クリエーションラインで実現する チームトポロジーにおける プラットフォームチーム・ ストリームアラインドチームの 効果的なコラボレーション
creationline
0
570
AIと融ける人間の冒険
pujisi
0
110
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
2
750
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.5k
ESXi のAIOps だ!2025冬
unnowataru
0
500
自己管理型チームと個人のセルフマネジメント 〜モチベーション編〜
kakehashi
PRO
5
2.3k
Master Dataグループ紹介資料
sansan33
PRO
1
4.2k
歴史から学ぶ、Goのメモリ管理基礎
logica0419
12
2.5k
Everything As Code
yosuke_ai
0
500
Authlete で実装する MCP OAuth 認可サーバー #CIMD の実装を添えて
watahani
0
430
「違う現場で格闘する二人」——社内コミュニティがつないだトヨタ流アジャイルの実践とその先
shinichitakeuchi
0
180
ファインディにおけるフロントエンド技術選定の歴史
puku0x
1
520
Featured
See All Featured
Building Applications with DynamoDB
mza
96
6.9k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.3k
Heart Work Chapter 1 - Part 1
lfama
PRO
4
35k
The Curse of the Amulet
leimatthew05
0
6.8k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
BBQ
matthewcrist
89
9.9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
48
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
160
Getting science done with accelerated Python computing platforms
jacobtomlinson
0
91
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Transcript
DRY原則を誤った結果 生まれた技術的負債
TL;DR DRYかどうかの前に単一責務かどうか考えて
これは本当にあった怖い話です
teratailにはこんなコンポーネントが存在します
teratailにはこんなコンポーネントが存在します 違い、分かりますか?
<a>タグ <button>タグ
HTMLタグの種類が違うだけなのに 同じスタイルを都度定義するの、面倒だな ...
そうだ!propsにhrefがあるかどうかで 出し分けるように実装しよう! DRY原則の適用だ!
None
None
最初はこれでも問題なかった 最初だけね...
- 内部コンポーネントを制御するためのPropsが際限なく追加される - 内部で利用しているコンポーネントの機能を制御する必要が出てきた - 制御変数が多くなりすぎて内部実装が複雑になる - 他のライブラリ(ReactHookForm等)との組み込みがしづらくなる - 誰も手をつけられない神ボタンコンポーネントの☆完☆成☆
生まれた問題点
None
結局何がいけなかったの? - DRY(Don’t Repeat Yourself) 原則の適用を間違えた - 似て非なるものを同一視してしまった - SRP(Single
Responsibility Principle)に違反した
どうすればよかったの? - 各コンポーネントを責務という観点で独立させる - <a>タグはHTMLにおいて他のリソースへの参照を示す - <button>は文書上のフォームのコントロールや単純なボタンとしての機 能を提供する
TL;DR DRYかどうかの前に単一責務かどうか考えて