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
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
リファクタリング
社内でエンジニア以外にリファクタリングを説明した時の資料
takato fukui
March 28, 2024
More Decks by takato fukui
See All by takato fukui
関数の挙動書き換える
takatofukui
4
880
機関室の灯りは消えない
takatofukui
0
48
エンジニアリングの良い塩梅🧂🌸
takatofukui
0
78
dd-trace-goのtrace context propagation実装
takatofukui
0
570
ソフトウェアテスト
takatofukui
0
92
なぜコードを書いてはいけないか
takatofukui
0
150
本番分析データベースを丸ごと削除した人の顔
takatofukui
0
130
Other Decks in Programming
See All in Programming
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
1.7k
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
280
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
2k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
180
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
180
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
170
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
420
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
360k
えっ!!コードを読まずに開発を!?
hananouchi
0
230
地域 SRE コミュニティ最前線 - ホンマでっかSRE勉強会
tk3fftk
0
270
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
340
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
170
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
7k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.6k
Designing for Timeless Needs
cassininazir
1
400
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
260
Building the Perfect Custom Keyboard
takai
2
820
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
640
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
190
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
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変更する • バグを直す •
ページ表示速度を速くする • 脆弱性を直す • ユーザーのため • 運用のため • ユーザー価値提供 • コスト削減 リファクタリング (前に出てきた例) • 開発者のため • 「普通」の開発を推進
まとめ • リファクタリングした方がいいソースコードになってしまうのは仕方ない • リファクタリングが必要ないように未来予知することは不可能 • リファクタリングは開発ブースター🚀みたいなもの • 「経済的な基準で測られる」べし