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.
→
takato fukui
March 28, 2024
Programming
140
0
Share
リファクタリング
社内でエンジニア以外にリファクタリングを説明した時の資料
takato fukui
March 28, 2024
More Decks by takato fukui
See All by takato fukui
関数の挙動書き換える
takatofukui
4
850
機関室の灯りは消えない
takatofukui
0
43
エンジニアリングの良い塩梅🧂🌸
takatofukui
0
69
dd-trace-goのtrace context propagation実装
takatofukui
0
530
ソフトウェアテスト
takatofukui
0
86
なぜコードを書いてはいけないか
takatofukui
0
150
本番分析データベースを丸ごと削除した人の顔
takatofukui
0
130
Other Decks in Programming
See All in Programming
Spec-Driven Development with AI Agents (Workshop, May 2026)
antonarhipov
3
330
実用!Hono RPC2026
yodaka
2
300
AI時代だからこそ「Bloc」を採用する価値があるのかもしれない
takuroabe
0
110
20年以上続くプロダクトでも使い続けられる静的解析ツールを求めて
matsuo_atsushi
0
140
WebAssembly を読み込むベストプラクティス 2026年春版 / Best Practices for Loading WebAssembly (Spring 2026)
petamoriken
5
1.1k
Liberating Ruby's Parser from Lexer Hacks
ydah
2
2.6k
From Formal Specification to Property Based Test
ohbarye
0
2.4k
ローカルLLMでどこまでコードが書けるか / How much code can be written on a local LLM
kishida
2
340
Symfony AI in Action - SymfonyLive Berlin 2026
chr_hertel
1
130
How We Practice Exploratory Testing in Iterative Development( #scrumniigata ) / 反復開発の中で、探索的テストをどう実施しているか
teyamagu
PRO
3
760
20260514_its_the_context_window_stupid.pdf
heita
0
810
SREに優しいTerraform構成 modulesとstateの組み方
hiyanger
2
170
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Heart Work Chapter 1 - Part 1
lfama
PRO
6
35k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
65
54k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.3k
HDC tutorial
michielstock
2
650
Fireside Chat
paigeccino
42
3.9k
Navigating Weather and Climate Data
rabernat
0
190
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
530
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How to Talk to Developers About Accessibility
jct
2
190
Transcript
リファクタリング 福井崇人
リファクタリング 「コンピュータプログラミングにおいて、プログラムの外部から見た動作を変えずにソース コードの内部構造を整理すること」 (出典: Wikipedia「リファクタリング (プログラミング)」) 🤔
Google スプレッドシート関数をリファクタリングしてみる =A3*1.1 =A4*1.1 関数入力を1つで済ませたい🥹
Google スプレッドシート関数をリファクタリングしてみる 何も関数入力してない 何も関数入力してない 「プログラムの外部から見た動作を変えずに」 -> 税込結果の表示 「ソースコードの内部構造を整理すること」 -> 関数を書き換えた
関数入力が1つで済んだ🤗
リファクタリングは「モバイルアプリ」とか、「awsを使ってる」とか、「SQL」とか、「スプレッ ドシート」とかは関係ない コンピュータプログラミングのどこにでも存在する作業
リファクタリングの例 工数低 ソースコードの名前を変える • 口コミが”review”と書かれていた • “report”と表現するのが社内のルールなので、それに合わせて修正した
リファクタリングの例 工数中 処理をまとめる 1. 対象外口コミを除外する a. 本文なし口コミを抜く b. 非公開口コミを抜く 2.
口コミ合計件数を算出する 1. 対象外口コミを除外する a. 本文なし口コミを抜く b. 非公開口コミを抜く 2. 口コミ平均スコアを算出する 2. 口コミ合計件数を算出する 2. 口コミ平均スコアを算出する 口コミ合計件数取得処理 口コミ平均スコア算出処理 口コミ合計件数取得処理 口コミ平均スコア算出処理 1. 対象外口コミを除外する a. 本文なし口コミを抜く b. 非公開口コミを抜く リファクタリング
リファクタリングの例 工数大 使用していた内製ツールがあったが、似たようなより扱いやすいツールが出てきたので それを使う プログラム 内製ツール GoogleとかMetaが作ったツール
リファクタリングだけで本ができるし、 1つのジャンルとして確立している (画像出典: amazon.co.jp) (画像出典: amazon.co.jp) and more… 工数中程度のリファクタリングパターン が約60個紹介されている
開発者が見えてる範囲 なぜリファクタリングが必要になるか(最初から必要ないように作れば良いのでは?) 1. システム全体が見えてない 1. 対象外口コミを除外する a. 本文なし口コミを抜く b. 非公開口コミを抜く
2. 口コミ合計件数を算出する 口コミ合計件数取得処理 🫣 口コミ合計件数取得処理 口コミ合計件数取得処理を開発するが、対 象外口コミを除外する処理がすでにあるこ とに気づいてない 1. 対象外口コミを除外する a. 本文なし口コミを抜く b. 非公開口コミを抜く 2. 口コミ平均スコアを算出する 開発 ただ開発者が最初から システム全体を見るの は難しい
なぜリファクタリングが必要になるか(最初から必要ないように作れば良いのでは?) 2. 後回しが積み重なる 1. 対象外口コミを除外する a. 本文なし口コミを抜く b. 非公開口コミを抜く 2.
口コミ合計件数を算出する 口コミ合計件数取得処理 😅 口コミ合計件数取得処理 1. 対象外口コミを除外する a. 本文なし口コミを抜く b. 非公開口コミを抜く 口コミ合計件数取得処理内のすでにある 処理を使うように抽出すると、デグレ確認 もしないといけない リリースに間に合わないので新しく処理を 書いてしまう 抽出 1. 対象外口コミを除外する a. 本文なし口コミを抜く b. 非公開口コミを抜く 2. 口コミ平均スコアを算出する すでに使われている
なぜリファクタリングが必要になるか(最初から必要ないように作れば良いのでは?) 3. 後からドメイン知識が見えてくる • 開発していくにつれ開発者のドメイン理解度が深まる ◦ 例えば「口コミごとに非公開状態があるのではなく、口コミ非公開設定した投稿者の口コミが非公開 になるのか!」 • 開発していくにつれドメインエキスパート(ドメインに詳しい人)も気づかないビジネス
ルールなどが見えることもある この資料ではドメイン知識 × リファクタリングについては触れない
リファクタリングすることのメリット 1. ソースコードを読む時間が減る • ソースコードは書くより読む時間に9割以上かかるとよく言われる • ソースコードが整理されることで、読んで把握する時間が減らすことができる • 例えば”review”と書かれていて「reportとは違うのか?🤔」となる時間がなくなる
リファクリングすることのメリット 2. 開発しやすくなる (例は次ページ)
1. 対象外口コミを除外する a. 本文なし口コミを抜く 10文字以下口コミを抜く b. 非公開口コミを抜く 2. 口コミ合計件数を算出する 1.
対象外口コミを除外する a. 本文なし口コミを抜く 10文字以下口コミを抜く b. 非公開口コミを抜く 2. 口コミ平均スコアを算出する 2. 口コミ合計件数を算出する 2. 口コミ平均スコアを算出する 口コミ合計件数取得処理 口コミ平均スコア算出処理 口コミ合計件数取得処理 口コミ平均スコア算出処理 1. 対象外口コミを除外する a. 本文なし口コミを抜く 10文字以下口コミを抜く b. 非公開口コミを抜く 10文字以下の口コミも 対象外口コミにしたい 😩 😄 2箇所変えないといけない 1箇所変えるだけで済む リファクタリング
リファクタリングすることのメリット 3. バグを生みにくくなる (例は次ページ)
1. 対象外口コミを除外する a. 本文なし口コミを抜く 10文字以下口コミを抜く b. 非公開口コミを抜く 2. 口コミ合計件数を算出する 1.
対象外口コミを除外する a. 本文なし口コミを抜く b. 非公開口コミを抜く 2. 口コミ平均スコアを算出する 2. 口コミ合計件数を算出する 2. 口コミ平均スコアを算出する 口コミ合計件数取得処理 口コミ平均スコア算出処理 口コミ合計件数取得処理 口コミ平均スコア算出処理 1. 対象外口コミを除外する a. 本文なし口コミを抜く 10文字以下口コミを抜く b. 非公開口コミを抜く 10文字以下の口コミも 対象外口コミにしたい 😩 😄 もう1箇所変え忘れる 1箇所変えるだけで済むので変え忘れない リファクタリング 1箇所変える
リファクタリングしないことのデメリット メリットの裏返し • ソースコードを読む時間が増える • 開発しにくくなる • バグを生みやすくなる
つまりリファクタリングは開発者からしか見えず、開発者のためで、開発を推進する ただ開発者のためとはいえ、 「リファクタリングは、コードベースがどれだけ美しいかではなく、純粋に経済的な基準で 測られるものです。」(Martin Fowler『リファクタリング 第2版』オーム社, 2022 第5刷)
整理 例 誰のため 目的 「普通」の開発 • UI変更する • バグを直す •
ページ表示速度を速くする • 脆弱性を直す • ユーザーのため • 運用のため • ユーザー価値提供 • コスト削減 リファクタリング (前に出てきた例) • 開発者のため • 「普通」の開発を推進
まとめ • リファクタリングした方がいいソースコードになってしまうのは仕方ない • リファクタリングが必要ないように未来予知することは不可能 • リファクタリングは開発ブースター🚀みたいなもの • 「経済的な基準で測られる」べし