SlideShare a Scribd company logo
1 of 18
リファクタリングのすゝめ
目次
1. はじめに
2. リファクタリングとは?
3. 考え方
4. 進め方
4.1. 一段階
4.2. 二段階
4.3. 三段階
1.はじめに
この話をする理由
リファクタリングは簡単な事(もある)と知って欲しい
この話を聞いた後の期待
少しやってみようという気持ちを持つこと
ここで話さないこと
リファクタリングの手法について
面倒な知識が必要な具体例の提示
2.リファクタリングとは?
外部の振る舞いを変えず、内部の構造を改善していく作業
3.考え方
ロジックを大きく変えることだけがリファクタリングではありません。
ロジックを大きく変えると難易度が高く、多くの対応ができません。
対して小さい変更は早く対応することができます。
そして多くの改善が可能です。
なので、リファクタリングは小さく長く変え続けることが偉いのです。
やれることをやれるだけしよう!
4.進め方
4.一段階
①無駄なスペースを削除
②インデントを最適化
③変数名を最適化
④コメントを修正・削除
影響箇所を局所的にする!
4.一段階
①無駄なスペースを削除
// 連続、先頭後尾にある
□const□□price□=□0;□
// スペースは途中に1つずつ
const□price□=□0;
4.一段階
②インデントを最適化
// 開始と終了の位置が違う
// 平行な処理の位置が違う
if (isCampaign()) {
price;
□tax;
□}
// 深いインデントで終わる
// 深いインデントで始める
public function isCampaign(price,
taxRate,
region) {
// 処理
}
// 開始と終了の位置を合わせる
// 平行な処理の位置を合わせる
if (isCampaign()) {
price;
tax;
}
// 役目毎でインデントさせる
public function isCampaign(
price,
taxRate,
region
) {
// 処理
}
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;
4.一段階
④コメントを修正・削除
// キャンペーン ※正確ではない
const winterCampaign = 0;
// キャンペーン ※コメントが嘘
const cart = 0;
// カート
const cart = 0;
// 冬季キャンペーン
const winterCampaign = 0;
// カート
const cart = 0;
const cart = 0; ※見ればわかる名称にコメントは不要
4.二段階
①プライベート関数名を最適化
②処理を関数化(最小化)
③テスト作成
④ロジックを最適化
クラスの中身をわかりやすく!
クラス内の高凝集を目指す
4.二段階
①プライベート関数名を最適化
/** カートの合計金額(税込)を計算する */
public totalPrice() {}
// 動詞 + 名詞 とする ※動詞始まり以外はNG
public calcTotalPrice() {}
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;
}
4.三段階
①パブリック関数名を最適化
②クラス名を最適化
③クラスを分割/統合
④フォルダを移動
アーキテクチャを適(切妥)当に!
疎結合高凝集を目指す
Appendix
おすすめ書籍
● リーダブルコード
● プリンシプル オブ プログラミング
● 現場で役立つシステム設計の原則
● 良いコード/悪いコードで学ぶ設計入門
● リファクタリング
● セキュア・バイ・デザイン
EoF

More Related Content

What's hot

研究発表を準備する
研究発表を準備する研究発表を準備する
研究発表を準備するTakayuki Itoh
 
ChatGPT Impact - その社会的/ビジネス価値を考える -
ChatGPT Impact - その社会的/ビジネス価値を考える -ChatGPT Impact - その社会的/ビジネス価値を考える -
ChatGPT Impact - その社会的/ビジネス価値を考える -Daiyu Hatakeyama
 
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWayTakayuki Shimizukawa
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~Daisuke Morishita
 
大学でC++03を教わった私が、便利そうだと思ったC++11の新機能
大学でC++03を教わった私が、便利そうだと思ったC++11の新機能大学でC++03を教わった私が、便利そうだと思ったC++11の新機能
大学でC++03を教わった私が、便利そうだと思ったC++11の新機能tSURooT
 
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみたRust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた虎の穴 開発室
 
ネットワークの基礎①
ネットワークの基礎①ネットワークの基礎①
ネットワークの基礎①tatsuya yamaguchi
 
立花氏とのスライドメモ.pptx
立花氏とのスライドメモ.pptx立花氏とのスライドメモ.pptx
立花氏とのスライドメモ.pptxrehacq
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015Masahiro Nagano
 
用20分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
用20分鐘搞懂   《系統分析、軟體工程、專案管理與設計模式》用20分鐘搞懂   《系統分析、軟體工程、專案管理與設計模式》
用20分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》鍾誠 陳鍾誠
 
MIRACLE LINUX 8をVirtualBoxに入れる時のいくつかのコツ
MIRACLE LINUX 8をVirtualBoxに入れる時のいくつかのコツMIRACLE LINUX 8をVirtualBoxに入れる時のいくつかのコツ
MIRACLE LINUX 8をVirtualBoxに入れる時のいくつかのコツVirtualTech Japan Inc./Begi.net Inc.
 
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデートHironori Washizaki
 
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へYoheiGibo
 
(2021.11) 機械学習と機械発見:データ中心型の化学・材料科学の教訓とこれから
(2021.11) 機械学習と機械発見:データ中心型の化学・材料科学の教訓とこれから(2021.11) 機械学習と機械発見:データ中心型の化学・材料科学の教訓とこれから
(2021.11) 機械学習と機械発見:データ中心型の化学・材料科学の教訓とこれからIchigaku Takigawa
 
リクルートライフスタイル流!分析基盤との賢い付き合い方
リクルートライフスタイル流!分析基盤との賢い付き合い方リクルートライフスタイル流!分析基盤との賢い付き合い方
リクルートライフスタイル流!分析基盤との賢い付き合い方Recruit Lifestyle Co., Ltd.
 
SDCCオープンネットワークのご紹介【2021/01版】
SDCCオープンネットワークのご紹介【2021/01版】SDCCオープンネットワークのご紹介【2021/01版】
SDCCオープンネットワークのご紹介【2021/01版】ProjectDC-01
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java増田 亨
 
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライドJJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライドToshiakiArai
 
MySQLおじさんの逆襲
MySQLおじさんの逆襲MySQLおじさんの逆襲
MySQLおじさんの逆襲yoku0825
 
僕なりのAtlassianの管理メソッド
僕なりのAtlassianの管理メソッド僕なりのAtlassianの管理メソッド
僕なりのAtlassianの管理メソッドNarichika Kajihara
 

What's hot (20)

研究発表を準備する
研究発表を準備する研究発表を準備する
研究発表を準備する
 
ChatGPT Impact - その社会的/ビジネス価値を考える -
ChatGPT Impact - その社会的/ビジネス価値を考える -ChatGPT Impact - その社会的/ビジネス価値を考える -
ChatGPT Impact - その社会的/ビジネス価値を考える -
 
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
 
大学でC++03を教わった私が、便利そうだと思ったC++11の新機能
大学でC++03を教わった私が、便利そうだと思ったC++11の新機能大学でC++03を教わった私が、便利そうだと思ったC++11の新機能
大学でC++03を教わった私が、便利そうだと思ったC++11の新機能
 
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみたRust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
Rust製の全文検索エンジンライブラリ(tantivy bayard)を試してみた
 
ネットワークの基礎①
ネットワークの基礎①ネットワークの基礎①
ネットワークの基礎①
 
立花氏とのスライドメモ.pptx
立花氏とのスライドメモ.pptx立花氏とのスライドメモ.pptx
立花氏とのスライドメモ.pptx
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
 
用20分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
用20分鐘搞懂   《系統分析、軟體工程、專案管理與設計模式》用20分鐘搞懂   《系統分析、軟體工程、專案管理與設計模式》
用20分鐘搞懂 《系統分析、軟體工程、專案管理與設計模式》
 
MIRACLE LINUX 8をVirtualBoxに入れる時のいくつかのコツ
MIRACLE LINUX 8をVirtualBoxに入れる時のいくつかのコツMIRACLE LINUX 8をVirtualBoxに入れる時のいくつかのコツ
MIRACLE LINUX 8をVirtualBoxに入れる時のいくつかのコツ
 
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
世界標準のソフトウェア工学知識体系SWEBOK Guide最新第4版を通じた開発アップデート
 
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
「DX完全に理解した」「DXわけがわからないよ」なユーザ企業の方へ
 
(2021.11) 機械学習と機械発見:データ中心型の化学・材料科学の教訓とこれから
(2021.11) 機械学習と機械発見:データ中心型の化学・材料科学の教訓とこれから(2021.11) 機械学習と機械発見:データ中心型の化学・材料科学の教訓とこれから
(2021.11) 機械学習と機械発見:データ中心型の化学・材料科学の教訓とこれから
 
リクルートライフスタイル流!分析基盤との賢い付き合い方
リクルートライフスタイル流!分析基盤との賢い付き合い方リクルートライフスタイル流!分析基盤との賢い付き合い方
リクルートライフスタイル流!分析基盤との賢い付き合い方
 
SDCCオープンネットワークのご紹介【2021/01版】
SDCCオープンネットワークのご紹介【2021/01版】SDCCオープンネットワークのご紹介【2021/01版】
SDCCオープンネットワークのご紹介【2021/01版】
 
DDD sample code explained in Java
DDD sample code explained in JavaDDD sample code explained in Java
DDD sample code explained in Java
 
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライドJJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
JJUG CCC 2015 Spring 「新人エンジニア奮闘記 - Javaって何?からwebサービスを公開するまで -」発表スライド
 
MySQLおじさんの逆襲
MySQLおじさんの逆襲MySQLおじさんの逆襲
MySQLおじさんの逆襲
 
僕なりのAtlassianの管理メソッド
僕なりのAtlassianの管理メソッド僕なりのAtlassianの管理メソッド
僕なりのAtlassianの管理メソッド
 

Recently uploaded

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介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...論文紹介: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クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~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)【早稲田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論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Recently uploaded (12)

論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介: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の始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介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...論文紹介: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クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~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)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

リファクタリングのすゝめ

Editor's Notes

  1. 1回で最適なコードにすることはできない。
  2. 順番にやらなくてはいけないのではなく、影響が少ない事から記載しているだけです。 やることは色々なことを考慮して判断する必要がある
  3. 静的解析ツールが大いに役立つ
  4. まずはテスト作成が推奨されているが、駄コードのテストを作るのは辛いのである程度綺麗にしてから作る
  5. まずはテスト作成が推奨されているが、駄コードのテストを作るのは辛いのである程度綺麗にしてから作る 難度計測が使える
  6. 一段階と同様にする
  7. 抽象度を揃えてあげるのも良い
  8. ここまでくると1から作り直しも検討
  9. 読み易い順