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
リファクタリング
社内でエンジニア以外にリファクタリングを説明した時の資料
takato fukui
March 28, 2024
More Decks by takato fukui
See All by takato fukui
関数の挙動書き換える
takatofukui
4
860
機関室の灯りは消えない
takatofukui
0
44
エンジニアリングの良い塩梅🧂🌸
takatofukui
0
73
dd-trace-goのtrace context propagation実装
takatofukui
0
540
ソフトウェアテスト
takatofukui
0
88
なぜコードを書いてはいけないか
takatofukui
0
150
本番分析データベースを丸ごと削除した人の顔
takatofukui
0
130
Other Decks in Programming
See All in Programming
AIとRubyの静的型付け
ukin0k0
0
480
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
210
関係性から理解する"同一性"の型用語たち
pvcresin
2
620
Skillは並べた。動かなかった。契約で繋いだ。— 65個のSkillから、自走する開発サイクルへ
junholee
0
800
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
140
RTSPクライアントを自作してみた話
simotin13
0
390
oxlintはeslint/typescript-eslintを置き換えられるのか
shomafujita
2
290
Oxlintはいかにしてtsgolintのlint ruleを呼び出しているのか
syumai
2
1k
自動レビューエンジンの実装と運用 ~レビューのない世界へ~
kurukuru1999
2
300
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
1.1k
サーバーレスで作る、動画データ管理基盤
oyasumipants
0
320
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
110
Featured
See All Featured
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
810
Context Engineering - Making Every Token Count
addyosmani
9
920
Making the Leap to Tech Lead
cromwellryan
135
9.9k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
AI: The stuff that nobody shows you
jnunemaker
PRO
7
670
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
150
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
370
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
44k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
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変更する • バグを直す •
ページ表示速度を速くする • 脆弱性を直す • ユーザーのため • 運用のため • ユーザー価値提供 • コスト削減 リファクタリング (前に出てきた例) • 開発者のため • 「普通」の開発を推進
まとめ • リファクタリングした方がいいソースコードになってしまうのは仕方ない • リファクタリングが必要ないように未来予知することは不可能 • リファクタリングは開発ブースター🚀みたいなもの • 「経済的な基準で測られる」べし