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
Takato Fukui
March 28, 2024
Programming
0
28
リファクタリング
社内でエンジニア以外にリファクタリングを説明した時の資料
Takato Fukui
March 28, 2024
Tweet
Share
More Decks by Takato Fukui
See All by Takato Fukui
本番分析データベースを丸ごと削除した人の顔
takatofukui
0
79
Other Decks in Programming
See All in Programming
try! Swift Tokyo 初参加報告LT
hinakko2
0
220
Git Rebase
bkuhlmann
11
1.6k
try! Swift Tokyo 2024 参加報告 / try! Swift Tokyo 2024 Report
hironytic
0
210
0→1と1→10の狭間で Javaという技術選定を振り返る/Reflecting on the Decision to Choose Java Between Scaling from 0 to 1 and 1 to 10
jaguar_imo
2
390
Zero Waste, Radical Magic, and Italian Graft – Quarkus Efficiency Secrets
hollycummins
0
230
『Railsオワコン』と言われる時代に、なぜブルーモ証券はRailsを選ぶのか
free_world21
0
270
Behind VS Code Extensions for JavaScript / TypeScript Linnting and Formatting
unvalley
5
1k
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
27
8.3k
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
890
大規模UIKitベースアプリへのTCAの段階的導入/gradual-adoption-of-tca-in-a-large-scale-uikit-based-app
takehilo
1
190
MicrosoftのPlatform Engineeringガイドを読んで実際になにかやってみた
ymd65536
1
430
雑に思考を整理する技術と効能
konifar
60
29k
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
227
16k
A Tale of Four Properties
chriscoyier
151
22k
The Language of Interfaces
destraynor
151
23k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
14
1.6k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
659
120k
Practical Orchestrator
shlominoach
182
9.7k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
21
1.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
6
1.5k
Unsuck your backbone
ammeep
663
57k
Automating Front-end Workflow
addyosmani
1356
200k
4 Signs Your Business is Dying
shpigford
175
21k
Become a Pro
speakerdeck
PRO
11
4.5k
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変更する • バグを直す •
ページ表示速度を速くする • 脆弱性を直す • ユーザーのため • 運用のため • ユーザー価値提供 • コスト削減 リファクタリング (前に出てきた例) • 開発者のため • 「普通」の開発を推進
まとめ • リファクタリングした方がいいソースコードになってしまうのは仕方ない • リファクタリングが必要ないように未来予知することは不可能 • リファクタリングは開発ブースター🚀みたいなもの • 「経済的な基準で測られる」べし