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
ソフトウェアにおける「捨てやすさ」の探求
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Yutaka Kamei
July 19, 2025
Programming
100
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ソフトウェアにおける「捨てやすさ」の探求
Yutaka Kamei
July 19, 2025
More Decks by Yutaka Kamei
See All by Yutaka Kamei
チェックリストの正体に迫る!
yykamei
0
91
ミーティングなどの場における タイムキーパーの役割に スポットライトを当てたい
yykamei
0
97
コードと政治
yykamei
0
240
タスクは分割するのではなく、ステップを積み重ねていく
yykamei
4
1k
「困っていることはありません」は物事の見方を変えるチャンス
yykamei
0
93
Other Decks in Programming
See All in Programming
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
5.7k
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
240
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
130
Vite+ Unified Toolchain for the Web
naokihaba
0
740
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
360
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
140
どこまでゆるくて許されるのか
tk3fftk
0
470
SLOをサービス品質の共通言語にするために 取り組んできたこと
wakana0222
0
480
PHPだって関数型したい 〜できること、できないこと〜 / fp-in-php
jsoizo
0
190
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
310
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
840
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
150
Featured
See All Featured
Accessibility Awareness
sabderemane
1
150
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
The Curse of the Amulet
leimatthew05
2
13k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
Crafting Experiences
bethany
1
210
Transcript
ソフトウェアにおける 捨てやすさの探究 Yutaka Kamei Scrum Fest Osaka2025 @関西大学梅田キャンパス KANDAI Me
RISE July 19, 2025
Self-introduction • Yutaka Kamei • @yykamei on GitHub • @_yykamei
on X • Timee, Inc.
Copyright © Timee All Rights Reserved 3 タイミーとは
Copyright © Timee All Rights Reserved 4 タイミーの特徴
Copyright © Timee All Rights Reserved 5 導入実績
Copyright © Timee All Rights Reserved 6 導入企業の例
今回は私が思っている主張をぶつけていこうと 思っています。間違っていることもあると思いま すがご了承ください。
“ソフトウェアはソフトでなければいけない” —Robert C. Martin(著)、角征典、髙木正弘(訳)『Clean Architecture 達人に学ぶソフ トウェアの構造と設計』KADOKAWA、2018年
ソフトウェアの「ソフト」とは? 簡単にいうと、 not hard ということ → 簡単に貫通させられるし、分割もでき るし、形を変えられるようなもの https://www.dictionary.com/browse/soft
ソフトウェアにはユーザーがいる
2種類のユーザー • もっとたくさん「機能」を欲しがる ユーザー • 日常的に特定の「機能」を使って現 状に満足しているユーザー
ソフトウェア開発者のジレンマ
ソフトウェア自身も形を変えたがる — ソフトだからね • 潜在的なバグが顕在化 • 脆弱性が発見された →ユーザーに使ってもらいながらこれらに対応する必要がある
リファクタリング • リファクタリングは見た目や振る舞いを変えずに内部構造を改善する取り組み ◦ これは最高だ! • しかし、リファクタリングは難しく、システムを破壊する可能性もある ◦ 振る舞いを変えないはずでは!?
“整頓は可愛くてふわふわした小さなリファクタリン グなので、誰も嫌いになれないはずだ” Kent Beck(著)、吉羽龍太郎、永瀬美穂、細澤あゆみ(訳)『Tidy First? ―個人で実践 する経験主義的ソフトウェア設計』オライリー・ジャパン、2024年
整理と整頓 • 「整理」は不要なものを捨てること • 「整頓」は必要なものを決められた 場所に置き、取り出しやすくするこ と
「捨てる」のは簡単だが「何を」「捨てる」のか? • ソフトウェアにおける「整理」(捨てる) は、意思決定と合意があれば簡単 • しかし、「捨てる」対象の特定が難し い場合がある • 機能のリプレイスのように、既存機能 を「捨てる」際に影響範囲の特定と安
全な削除が求められる • 対象が分散していると「捨てる」難易 度が非常に高くなる
最初は「適切な境界」に基づいていた(はず) • 「モジュールの分離」だとか「境界 の設定」みたいな話 • しかし、ソフトウェアは進化の過程 で当初の境界が曖昧になることが ある
最初から「捨てる」ことを目指す キャップとラベルは「プラスチック」として捨てられるようになっている
「捨てる」ことを目指す開発 • 「未来永劫使うわけではない」とい う前提で機能を考える • 時代や状況の変化で前提が簡単 に崩れることを受け入れる • 「あとで捨てられる機能」として導入 することで、心理的なハードルが下
がる • 「捨てる」対象が明確になり、確実 に捨てられる • Slack は Glitch というゲームからピボットし た ◦ https://www.johnnyrodgers.is/the-death-of- glitch-the-birth-of-slack/ • YouTube は最初は出会いを促すサービス だった ◦ https://en.wikipedia.org/wiki/History_of_Yo uTube Copeさんの “Stop treating code as an asset” に近い考えかもしれません
「捨てる」マインドとソフトウェア原則 • 「捨てる」ことを目指すと、「捨てる」対象がどこからどこまでかが明確になる • 「意味のあるかたまりにする」「同じ理由・同じタイミングで変更されるものをまとめ る」といった原則に従う • 「同じ理由・同じタイミングで変更されるか?」という問いを「同じタイミングで捨てら れるか?」に置き換えただけ ◦
違いはこう ▪ 「変更のタイミング」を意識するか? ▪ 期待通りその空間はきれいになるか?
プラグインの話 — 「土台」自体も「捨てる」 • プラグインの仕組みは「捨てる」のに便 利だが、その「土台」を最初からつくらな い • 一度「土台」を作ると、将来より良い方法 が見つかっても置き換えが難しいのでな
るべく「土台」自体も「捨てられる」ように しておきたい • 高価な決定を先送りし、「捨てる」ことで オプションを購入する ◦ オプションの行使は先送りに
「作り直し」の奨励と学びの蓄積 • 「捨てる」ことを目指すことは、必然的 に「作り直し」を奨励する • これは「車輪の再発明」に見えるかも しれないが、そうではない • 「捨てる」「作り直す」を繰り返すこと で、その過程での学びが蓄積される
• 関わったメンバーの経験がアップ デートされ、技量が向上する ちなみに、Copeさんはオープニングキーノートで “Move the rework to analysis” と言い、 Set-Based Design の文脈で作りなおせと言っていました
品質と「捨てやすさ」 • 「捨てる」からといって「雑につくればいい」わけではない • 目の前のリリースに向けて、リリース可能な品質のものを目指す • 「捨てる」ことを目指すからこそ、品質が良くなる可能性がある • 「捨てる」ためのソフトウェア設計は、単体テストのしやすさや変更・リファクタリング のしやすさにつながる
まとめ • ソフトウェアはソフトだが、ユーザーが増えると変更が難しくなる • 開発者は「変更を望む」と「現状維持を望む」ユーザーの間で板挟みになりがち • 「捨てる」という考え方は、未来永劫使わない前提で機能を設計し、明確な境界を 設定する • 「捨てる」ことを目指す開発は、「作り直し」を奨励し、学習と品質向上につながる
Thank you!