Submit Search
Upload
リファクタリングのすゝめ
•
Download as PPTX, PDF
•
0 likes
•
26 views
N
ngs
Follow
リファクタリングのハードルを下げる
Read less
Read more
Technology
Report
Share
Report
Share
1 of 18
Download now
Recommended
アジャイル開発を支えるアーキテクチャ設計とは
アジャイル開発を支えるアーキテクチャ設計とは
Yusuke Suzuki
高橋メソッドサンプル
高橋メソッドサンプル
Takashi Fujimoto
論文の書き方(研究室用)
論文の書き方(研究室用)
Takanori Fukui
ネットワークエンジニアがyou tuberやってみた結果
ネットワークエンジニアがyou tuberやってみた結果
Taiji Tsuchiya
Pbijp758 #02 Power BI で Twitter分析する
Pbijp758 #02 Power BI で Twitter分析する
Teruchika Yamada
バックボーン運用から見るインターネットの実情
バックボーン運用から見るインターネットの実情
IIJ
【DL輪読会】Egocentric Video Task Translation (CVPR 2023 Highlight)
【DL輪読会】Egocentric Video Task Translation (CVPR 2023 Highlight)
Deep Learning JP
なぜネットワーク運用自動化が進まないのか Whitebox switch編
なぜネットワーク運用自動化が進まないのか Whitebox switch編
Taiji Tsuchiya
Recommended
アジャイル開発を支えるアーキテクチャ設計とは
アジャイル開発を支えるアーキテクチャ設計とは
Yusuke Suzuki
高橋メソッドサンプル
高橋メソッドサンプル
Takashi Fujimoto
論文の書き方(研究室用)
論文の書き方(研究室用)
Takanori Fukui
ネットワークエンジニアがyou tuberやってみた結果
ネットワークエンジニアがyou tuberやってみた結果
Taiji Tsuchiya
Pbijp758 #02 Power BI で Twitter分析する
Pbijp758 #02 Power BI で Twitter分析する
Teruchika Yamada
バックボーン運用から見るインターネットの実情
バックボーン運用から見るインターネットの実情
IIJ
【DL輪読会】Egocentric Video Task Translation (CVPR 2023 Highlight)
【DL輪読会】Egocentric Video Task Translation (CVPR 2023 Highlight)
Deep Learning JP
なぜネットワーク運用自動化が進まないのか Whitebox switch編
なぜネットワーク運用自動化が進まないのか Whitebox switch編
Taiji Tsuchiya
研究発表を準備する
研究発表を準備する
Takayuki Itoh
ChatGPT Impact - その社会的/ビジネス価値を考える -
ChatGPT Impact - その社会的/ビジネス価値を考える -
Daiyu Hatakeyama
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
Takayuki Shimizukawa
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
Daisuke Morishita
大学でC++03を教わった私が、便利そうだと思ったC++11の新機能
大学でC++03を教わった私が、便利そうだと思ったC++11の新機能
tSURooT
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
虎の穴 開発室
ネットワークの基礎①
ネットワークの基礎①
tatsuya yamaguchi
立花氏とのスライドメモ.pptx
立花氏とのスライドメモ.pptx
rehacq
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Masahiro Nagano
用20分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
用20分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
鍾誠 陳鍾誠
MIRACLE LINUX 8をVirtualBoxに入れる時のいくつかのコツ
MIRACLE LINUX 8をVirtualBoxに入れる時のいくつかのコツ
VirtualTech Japan Inc./Begi.net Inc.
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
Hironori Washizaki
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
YoheiGibo
(2021.11) 機械学習と機械発見:データ中心型の化学・材料科学の教訓とこれから
(2021.11) 機械学習と機械発見:データ中心型の化学・材料科学の教訓とこれから
Ichigaku Takigawa
リクルートライフスタイル流!分析基盤との賢い付き合い方
リクルートライフスタイル流!分析基盤との賢い付き合い方
Recruit Lifestyle Co., Ltd.
SDCCオープンネットワークのご紹介【2021/01版】
SDCCオープンネットワークのご紹介【2021/01版】
ProjectDC-01
DDD sample code explained in Java
DDD sample code explained in Java
増田 亨
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
ToshiakiArai
MySQLおじさんの逆襲
MySQLおじさんの逆襲
yoku0825
僕なりのAtlassianの管理メソッド
僕なりのAtlassianの管理メソッド
Narichika Kajihara
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
More Related Content
What's hot
研究発表を準備する
研究発表を準備する
Takayuki Itoh
ChatGPT Impact - その社会的/ビジネス価値を考える -
ChatGPT Impact - その社会的/ビジネス価値を考える -
Daiyu Hatakeyama
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
Takayuki Shimizukawa
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
Daisuke Morishita
大学でC++03を教わった私が、便利そうだと思ったC++11の新機能
大学でC++03を教わった私が、便利そうだと思ったC++11の新機能
tSURooT
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
虎の穴 開発室
ネットワークの基礎①
ネットワークの基礎①
tatsuya yamaguchi
立花氏とのスライドメモ.pptx
立花氏とのスライドメモ.pptx
rehacq
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Masahiro Nagano
用20分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
用20分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
鍾誠 陳鍾誠
MIRACLE LINUX 8をVirtualBoxに入れる時のいくつかのコツ
MIRACLE LINUX 8をVirtualBoxに入れる時のいくつかのコツ
VirtualTech Japan Inc./Begi.net Inc.
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
Hironori Washizaki
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
YoheiGibo
(2021.11) 機械学習と機械発見:データ中心型の化学・材料科学の教訓とこれから
(2021.11) 機械学習と機械発見:データ中心型の化学・材料科学の教訓とこれから
Ichigaku Takigawa
リクルートライフスタイル流!分析基盤との賢い付き合い方
リクルートライフスタイル流!分析基盤との賢い付き合い方
Recruit Lifestyle Co., Ltd.
SDCCオープンネットワークのご紹介【2021/01版】
SDCCオープンネットワークのご紹介【2021/01版】
ProjectDC-01
DDD sample code explained in Java
DDD sample code explained in Java
増田 亨
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
ToshiakiArai
MySQLおじさんの逆襲
MySQLおじさんの逆襲
yoku0825
僕なりのAtlassianの管理メソッド
僕なりのAtlassianの管理メソッド
Narichika Kajihara
What's hot
(20)
研究発表を準備する
研究発表を準備する
ChatGPT Impact - その社会的/ビジネス価値を考える -
ChatGPT Impact - その社会的/ビジネス価値を考える -
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
大学でC++03を教わった私が、便利そうだと思ったC++11の新機能
大学でC++03を教わった私が、便利そうだと思ったC++11の新機能
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
ネットワークの基礎①
ネットワークの基礎①
立花氏とのスライドメモ.pptx
立花氏とのスライドメモ.pptx
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
用20分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
用20分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
MIRACLE LINUX 8をVirtualBoxに入れる時のいくつかのコツ
MIRACLE LINUX 8をVirtualBoxに入れる時のいくつかのコツ
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
(2021.11) 機械学習と機械発見:データ中心型の化学・材料科学の教訓とこれから
(2021.11) 機械学習と機械発見:データ中心型の化学・材料科学の教訓とこれから
リクルートライフスタイル流!分析基盤との賢い付き合い方
リクルートライフスタイル流!分析基盤との賢い付き合い方
SDCCオープンネットワークのご紹介【2021/01版】
SDCCオープンネットワークのご紹介【2021/01版】
DDD sample code explained in Java
DDD sample code explained in Java
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
MySQLおじさんの逆襲
MySQLおじさんの逆襲
僕なりのAtlassianの管理メソッド
僕なりのAtlassianの管理メソッド
Recently uploaded
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
Recently uploaded
(12)
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
リファクタリングのすゝめ
1.
リファクタリングのすゝめ
2.
目次 1. はじめに 2. リファクタリングとは? 3.
考え方 4. 進め方 4.1. 一段階 4.2. 二段階 4.3. 三段階
3.
1.はじめに この話をする理由 リファクタリングは簡単な事(もある)と知って欲しい この話を聞いた後の期待 少しやってみようという気持ちを持つこと ここで話さないこと リファクタリングの手法について 面倒な知識が必要な具体例の提示
4.
2.リファクタリングとは? 外部の振る舞いを変えず、内部の構造を改善していく作業
5.
3.考え方 ロジックを大きく変えることだけがリファクタリングではありません。 ロジックを大きく変えると難易度が高く、多くの対応ができません。 対して小さい変更は早く対応することができます。 そして多くの改善が可能です。 なので、リファクタリングは小さく長く変え続けることが偉いのです。 やれることをやれるだけしよう!
6.
4.進め方
7.
4.一段階 ①無駄なスペースを削除 ②インデントを最適化 ③変数名を最適化 ④コメントを修正・削除 影響箇所を局所的にする!
8.
4.一段階 ①無駄なスペースを削除 // 連続、先頭後尾にある □const□□price□=□0;□ // スペースは途中に1つずつ const□price□=□0;
9.
4.一段階 ②インデントを最適化 // 開始と終了の位置が違う // 平行な処理の位置が違う if
(isCampaign()) { price; □tax; □} // 深いインデントで終わる // 深いインデントで始める public function isCampaign(price, taxRate, region) { // 処理 } // 開始と終了の位置を合わせる // 平行な処理の位置を合わせる if (isCampaign()) { price; tax; } // 役目毎でインデントさせる public function isCampaign( price, taxRate, region ) { // 処理 }
10.
4.一段階 ③変数名を最適化 // 意味不明 ※狭い範囲の利用はOK const
tmp = 0; // 連番 const campaign001 = 0; // 省略形 ※一般的ならOK const crt = 0; // 不要な情報 const totalLabelStr = “合計金額”; // リストなのに単数形 const order = []; // Boolean型 const campaignFlag = true; // 意味ある単語にする const campaign = 0; // 具体名にする const winterCampaign = 0; // 省略しない const cart = 0; // 情報は最低限にする const totalLabel = “合計金額”; // リストは複数形 const orders = []; // is/can/hasから始める const isCampaign = true;
11.
4.一段階 ④コメントを修正・削除 // キャンペーン ※正確ではない const
winterCampaign = 0; // キャンペーン ※コメントが嘘 const cart = 0; // カート const cart = 0; // 冬季キャンペーン const winterCampaign = 0; // カート const cart = 0; const cart = 0; ※見ればわかる名称にコメントは不要
12.
4.二段階 ①プライベート関数名を最適化 ②処理を関数化(最小化) ③テスト作成 ④ロジックを最適化 クラスの中身をわかりやすく! クラス内の高凝集を目指す
13.
4.二段階 ①プライベート関数名を最適化 /** カートの合計金額(税込)を計算する */ public
totalPrice() {} // 動詞 + 名詞 とする ※動詞始まり以外はNG public calcTotalPrice() {}
14.
4.二段階 ②処理を関数化(最小 化) /** カートの合計金額(税込)を計算する */ public
calcTotalPrice() { // カートの合計金額を計算する let subtotal = 0; cart.items.forEach(item -> subtotal += item.price); // 消費税を計算する const tax = price * 0.1; return subtotal + tax; } /** カートの合計金額(税込)を計算する */ public calcTotalPrice() { const subtotal = this.calcSubtotal(); const tax = this.calcTax(subtotal); return subtotal + tax; } /** カートの合計金額(税込)を計算する */ private calcSubtotal() { let subtotal = 0; cart.items.forEach(item -> subtotal += item.price); return subtotal; } /** 消費税を計算する */ private calcTax(price: number) { return price * 0.1; }
15.
4.三段階 ①パブリック関数名を最適化 ②クラス名を最適化 ③クラスを分割/統合 ④フォルダを移動 アーキテクチャを適(切妥)当に! 疎結合高凝集を目指す
16.
Appendix
17.
おすすめ書籍 ● リーダブルコード ● プリンシプル
オブ プログラミング ● 現場で役立つシステム設計の原則 ● 良いコード/悪いコードで学ぶ設計入門 ● リファクタリング ● セキュア・バイ・デザイン
18.
EoF
Editor's Notes
1回で最適なコードにすることはできない。
順番にやらなくてはいけないのではなく、影響が少ない事から記載しているだけです。 やることは色々なことを考慮して判断する必要がある
静的解析ツールが大いに役立つ
まずはテスト作成が推奨されているが、駄コードのテストを作るのは辛いのである程度綺麗にしてから作る
まずはテスト作成が推奨されているが、駄コードのテストを作るのは辛いのである程度綺麗にしてから作る 難度計測が使える
一段階と同様にする
抽象度を揃えてあげるのも良い
ここまでくると1から作り直しも検討
読み易い順
Download now