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
97
たのしい情報収集(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
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
510
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
170
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Bash Introduction
62gerente
608
210k
Code Review Best Practice
trishagee
65
17k
A designer walks into a library…
pauljervisheath
204
24k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
169
50k
A Modern Web Designer's Workflow
chriscoyier
693
190k
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版)に載っている、広く使われているリファクタリングのカタログ