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
110
リファクタリング
社内でエンジニア以外にリファクタリングを説明した時の資料
Takato Fukui
March 28, 2024
Tweet
Share
More Decks by Takato Fukui
See All by Takato Fukui
エンジニアリングの良い塩梅🧂🌸
takatofukui
0
5
dd-trace-goのtrace context propagation実装
takatofukui
0
420
ソフトウェアテスト
takatofukui
0
60
なぜコードを書いてはいけないか
takatofukui
0
94
本番分析データベースを丸ごと削除した人の顔
takatofukui
0
100
Other Decks in Programming
See All in Programming
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
3
490
技術同人誌をMCP Serverにしてみた
74th
1
650
Webの外へ飛び出せ NativePHPが切り拓くPHPの未来
takuyakatsusa
2
560
Hack Claude Code with Claude Code
choplin
4
2.2k
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
700
The Modern View Layer Rails Deserves: A Vision For 2025 And Beyond @ RailsConf 2025, Philadelphia, PA
marcoroth
2
400
Deep Dive into ~/.claude/projects
hiragram
14
2.6k
VS Code Update for GitHub Copilot
74th
2
650
テスト駆動Kaggle
isax1015
0
310
MDN Web Docs に日本語翻訳でコントリビュートしたくなる
ohmori_yusuke
1
130
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
260
PHPで始める振る舞い駆動開発(Behaviour-Driven Development)
ohmori_yusuke
2
400
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
95
14k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Code Review Best Practice
trishagee
69
19k
Bash Introduction
62gerente
613
210k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
690
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Testing 201, or: Great Expectations
jmmastey
43
7.6k
GraphQLとの向き合い方2022年版
quramy
49
14k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
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変更する • バグを直す •
ページ表示速度を速くする • 脆弱性を直す • ユーザーのため • 運用のため • ユーザー価値提供 • コスト削減 リファクタリング (前に出てきた例) • 開発者のため • 「普通」の開発を推進
まとめ • リファクタリングした方がいいソースコードになってしまうのは仕方ない • リファクタリングが必要ないように未来予知することは不可能 • リファクタリングは開発ブースター🚀みたいなもの • 「経済的な基準で測られる」べし