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
リファクタリング?(202111社内勉強会)
Search
shimadamiyuki
November 18, 2021
0
58
リファクタリング?(202111社内勉強会)
月一で実施している社内勉強会の資料です(2021.11)
shimadamiyuki
November 18, 2021
Tweet
Share
More Decks by shimadamiyuki
See All by shimadamiyuki
20240912 JJUGナイトセミナー
mii1004
0
200
STORES決済の裏側のはなし(Code Polaris 色んなエンジニアLT大会)
mii1004
0
230
オブジェクト指向がわからない(202201社内勉強会)
mii1004
0
96
たのしい情報収集(202112社内勉強会)
mii1004
0
67
OpenAPI Generator使ってみる(Java女子部ハロウィンLT)
mii1004
0
56
ビルドツールの話(202110社内勉強会)
mii1004
0
77
Hello Spring(202109社内勉強会)
mii1004
0
73
StreamAPI, Lambdaと仲良くなる(202108社内勉強会)
mii1004
0
82
Javaはじめのいっぽ(202107社内勉強会)
mii1004
0
81
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Unsuck your backbone
ammeep
669
57k
Raft: Consensus for Rubyists
vanstee
137
6.7k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
Done Done
chrislema
181
16k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
28
4.3k
A better future with KSS
kneath
238
17k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Transcript
リファクタリング︖ 11⽉チーム会
Q. なぜリファクタリングをするの︖ A. かっこいいから︕
リーン・スタートアップ(2011) スタートアップ =不確実な状態で新しい製品やサービスを 創り出さなければならない⼈的組織 リーンスタートアップ(⽇経BP) エリック・リース 著 井⼝ 耕⼆ 訳
伊藤 穣⼀ 解説 https://shop.nikkeibp.co.jp/front/commodity/0000/P48970/
スタートアップのほとんどが失敗する 最⾼の製品を作ったはずなのに・・・ → スタートアップのような不確実な状況では、 従来のように最初に計画を⽴ててから 完璧な製品を作るような⽅法は難しい (顧客に望まれない製品を作ってしまう)
構築計測学習のフィードバックループ アイデア 製品 データ 構築する 計測する 学ぶ • まずは最⼩限の労⼒と時間で製品を作る (MVP︓minimum
viable product) • 「構築計測学習」のループを通じて、 顧客の望み、成⻑につながる価値を学ぶ (検証による学び) • 完璧なものを作るより、フィードバック ループにかかる時間を最⼩にすることが ⼤事
従来型のソフトウェア開発プロセス アイデア 計画 製造 リリース • 計画が正しいか(=顧客が必要とするものを作れているか︖)はリリース しないとわからない • あれもこれもでソフトウェアの規模が⼤きくなり費⽤も膨らむ
• ユーザーが必要としてない機能(ムダ)を作ってしまう 時間とお⾦をかけて完璧なシステムを作る︕
反復型のソフトウェア開発プロセス ⼩規模なリリース→フィードバックを繰り返す アイデア 計画 製造 リリース フィードバック 計画 製造 リリース
フィードバック 計画 製造 リリース
軽量ソフトウェア開発プロセス 従来の計画主義的なプロセスとは異なる、新しい価値観に沿ったプロセス。 数ページの基本的な理念で構成されているので軽量プロセスと呼ばれる。 • スクラム • エクストリームプログラミング • 適応型ソフトウェア開発 •
リーンソフトウェア開発 →こうしたいくつもの軽量プロセスから⽣まれたのが「アジャイル開発」という ムーブメント エンジニアリング組織論への招待(技術評論社) 広⽊⼤地 著 https://gihyo.jp/book/2018/978-4-7741-9605-3
リリースサイクルを早めるには︖ 実装 テスト デプロイ リファクタリング 継続的インテグレーション テスト駆動開発 ペアプログラミング バージョン管理 ビルドツール
テストコード ⾃動リグレッションテスト (E2E) ⾃動デプロイ チーム開発実践⼊⾨(技術評論社) 池⽥尚史,藤倉和明,井上史彰 著 https://gihyo.jp/book/2014/978-4-7741-6428-1 エクストリームプログラミング(オーム社) Kent Beck・Cynthia Andres 共著/⾓ 征典 訳 https://shop.ohmsha.co.jp/shopdetail/000000004303/
リファクタリングって何︖ • 外部から⾒たときの振る舞いを保ちつつ、理解や修正が簡単になるように、ソ フトウェアの内部構造を変化させること • 個々のリファクタリングは⾮常に⼩さなステップ、またはそれらの組み合わせ でできている(いつでも中断が可能) • ⼩さなステップを積み重ねていくことで⼤きな変化をもたらしていくもの リファクタリング
既存のコードを安全に改善する(第2版)(オーム社) Martin Fowler 著、児⽟ 公信 訳、友野 晶夫 訳、平澤 章 訳、梅澤 真史 訳 https://www.ohmsha.co.jp/book/9784274224546/
なぜリファクタリングをするの︖ リファクタリングはソフトウェア設計を改善する リファクタリングはソフトウェアを理解しやすくする リファクタリングはバグの発⾒を助ける リファクタリングはプログラミングを速める
関数の抽出 関数のインライン化 変数の抽出 変数のインライン化 関数宣⾔の変更 変数のカプセル化 変数名の変更 パラメータオブジェクトの導⼊ 関数群のクラスへの集約 関数群の変換への集約
フェーズの分離 レコードのカプセル化 コレクションのカプセル化 オブジェクトによるプリミティブの置き換え 問い合わせによる⼀時変数の置き換え クラスの抽出 クラスのインライン化 委譲の隠蔽 仲介⼈の除去 アルゴリズムの置き換え 関数の移動 フィールドの移動 ステートメントの関数内への移動 ステートメントの呼び出し側への移動 関数呼び出しによるインラインコードの置き換え ステートメントのスライド ループの分離 パイプラインによるループの置き換え デッドコードの削除 変数の分離 フィールド名の変更 問い合わせによる導出変数の置き換え 参照から値への変更 値から参照への変更 条件記述の分解 条件記述の統合 ガード節による⼊れ⼦の条件記述の置き換え ポリモーフィズムによる条件記述の置き換え 特殊ケースの導⼊ アサーションの導⼊ 問い合わせと更新の分離 パラメータによる関数の統合 フラグパラメータの削除 オブジェクトそのものの受け渡し 問い合わせによるパラメータの置き換え パラメータによる問い合わせの置き換え setterの削除 ファクトリ関数によるコンストラクタの置き換え コマンドによる関数の置き換え 関数によるコマンドの置き換え メソッドの引き上げ フィールドの引き上げ コンストラクタ本体の引き上げ メソッドの押し下げ フィールドの押し下げ サブクラスによるタイプコードの置き換え サブクラスの削除 スーパークラスの抽出 クラス階層の平坦化 委譲によるサブクラスの置き換え 委譲によるスーパークラスの置き換え リファクタリングのカタログ リファクタリング 既存のコードを安全に改善する(第2版)に載っている、広く使われているリファクタリングのカタログ