SlideShare a Scribd company logo
今日からはじめる 
リファクタリング 
2014.08.30 
kanazawa.rb meetup#24
よろしくお願いします 
• 島津 純哉(しまず じゅんや) 
• DMM.com Labo 
• Linux, Apache, PHP, MySQL, Memcached, 
Javascript, HTML5, Vim, Shell, Git 
@jshimazu0820 Junya Shimazu
こんなコードで困っていませんか? 
• 読みにくい 
• 編集しにくい 
• 複雑
こんなイメージ 
なんで動いてるの?みたいな
コードがモンスター化している!
コードがモンスター化している! 
• メンテナンスしにくい!
コードがモンスター化している! 
• メンテナンスしにくい! 
• 修正したい
コードがモンスター化している! 
• メンテナンスしにくい! 
• 修正したい 
• でも修正するの難しい
コードがモンスター化している! 
• メンテナンスしにくい! 
• 修正したい 
• でも修正するの難しい 
• 現状動いてるので放置・・・
コードがモンスター化している! 
• メンテナンスしにくい! 
• 修正したい 
• でも修正するの難しい 
• 現状動いてるので放置・・・ 
• クソコードが拡大していく
駄目だこのコード、 
早くなんとかしないと・・・ 
リファクタリングをしよう! 
でも、何から手を付ければいいのだろう?
参考文献
リファクタリングの名著 
• リファクタリングを体系化 
• サンプルコードが充実 
• 2000年初版(14年前!) 
• 最近新装版がでた
リファクタリングとは 
「外部から見たときの振る舞いを保ちつつ 
理解や修正が簡単になるように 
ソフトウェアの内部構造を変化させること」 
! 
→ メンテナンスしやすいコードにすること
リファクタリングとは 
「外部から見たときの振る舞いを保ちつつ 
理解や修正が簡単になるように 
ソフトウェアの内部構造を変化させること」 
! 
→ メンテナンスしやすいコードにすること
なぜコードは汚れていくのか? 
仕様追加・変更、バグ修正の繰り返し 
コードがだんだん乱れていくのは自然な事
リファクタリングは 
常に行われていくべきもの
どこを直せばいいの? 
「コードの不吉なにおい」➡22種類 
! 
そのうちよく見かけた5つを紹介
1位 重複したコード
「重複したコード」の特徴 
• 同じようなコードが2カ所以上に存在 
• 2カ所以上変更しなければならない
2位 長すぎるメソッド
「長すぎるメソッド」の特徴 
• メソッドの内部の処理を追うのが大変 
• 一時変数が多くなりがち 
• テスト・デバッグが困難
3位 巨大なクラス
「巨大なクラス」の特徴 
• 仕事をしすぎなクラス 
• いわゆる密結合 
• フィールドが多くなりがち
4位 多すぎる引数
「多すぎる引数」の特徴 
• 引数の意味を理解するのに手間 
• 仕様追加でさらに増える 
• 本来、0~2個にとどめておくのが良い
5位 変更の分散
「変更の分散」の特徴 
• 変更するたびに他の箇所も変更が必要 
• 他方の修正を忘れて問題発生
不吉なにおい=負債 
将来にわたってコードの理解・修正を妨げる 
プログラマーにとっての「負債」
どうやって負債を取り除くか? 
「リファクタリングカタログ」 
わりとすぐに適用できる3種類を紹介
メソッドの抽出
「メソッドの抽出」 
• 最もメジャーなリファクタリング手法 
• コードの断片をわかりやすい名前のメソッド 
にする 
• 「重複したコード」「長すぎるメソッド」 
に有効
クラスの抽出
「クラスの抽出」 
• 本来2つのクラスでやるべきことを 
1つのクラスでやっている場合 
• 「巨大なクラス」に対して有効 
→
委譲の隠蔽
「委譲の隠蔽」 
• 使い手が意識するクラスを2つ→1つに
他にもたくさんあります 
「コードの不吉なにおい」 
「リファクタリングカタログ」 
でググってみよう!
いつやればいいの? 
• 新機能追加・バグ修正・レビューのとき 
• 3度目の法則 
• 不吉なにおい → 1、2回はガマンして 
3回目に感じたときに修正
注意すること 
• 小さい単位で修正・テストしながら進める 
• できれば単体テストコードも用意 
• 機能追加(またはバグ修正)と 
リファクタリングは分けて作業 
• 無理はしない
まとめ 
• リファクタリングは常に行われていくもの 
• 「コードの不吉なにおい」を知る 
• 手法は体系化されている 
「リファクタリングカタログ」
リファクタリングの 
テクニックを身につけて 
幸せなプログラマーライフを!
ご清聴ありがとうございました

More Related Content

PDF
リファクタリングで実装が○○分短縮した話
PDF
Metaverse & Web3 Technology Innovation & Business Development
PDF
Metaverse Infographics
PDF
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
PPTX
3Dモデル類似検索
PPTX
僕たちがすべきことはリファクタリングなのか
PDF
越境アジャイル
PDF
4つの戦犯から考えるサービスづくりの失敗
リファクタリングで実装が○○分短縮した話
Metaverse & Web3 Technology Innovation & Business Development
Metaverse Infographics
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
3Dモデル類似検索
僕たちがすべきことはリファクタリングなのか
越境アジャイル
4つの戦犯から考えるサービスづくりの失敗

What's hot (20)

PDF
毎日が越境だ!
PDF
Sphinxでまとめる多言語環境APIドキュメント
PDF
プロダクトオーナーが知るべき97のこと
PDF
chatGPTの驚くべき対話能力.pdf
PDF
Magic Mirror For Retail Stores
PPTX
擬人化で考えるオブジェクト指向
PDF
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
PPTX
インセプションデッキ: やらないことリストと トレードオフスライダーをやってる話
PDF
見えない壁を越えよう!アジャイルやマイクロサービスを阻む「今までのやり方」 - デブサミ夏2023
PDF
大企業アジャイルの勘所(ver1.1) #アジャイルマネジメントセミナー
PDF
ChatGPT を使ってみた
PPTX
「アーティスト活動」というプログラマの自己防衛術 - 坪倉輝明
PDF
ソフトウェア開発のやり方の改善
PPTX
JICD主催−ナラティヴ・セラピー・アドバンスコース
PPTX
BDD Approach with Karate Framework in Service Tests
PDF
アジャイルによくきく?モデリング
PDF
OpenAI の音声認識 AI「Whisper」をテストしてみた
PDF
コールバックと戦う話
PDF
The CQRS diet
PPTX
プロダクトのフェーズとマネジメント
毎日が越境だ!
Sphinxでまとめる多言語環境APIドキュメント
プロダクトオーナーが知るべき97のこと
chatGPTの驚くべき対話能力.pdf
Magic Mirror For Retail Stores
擬人化で考えるオブジェクト指向
SWEBOKにみるソフトウェアエンジニアリングの全体、および、 つながる時代のソフトウェアモデリング&品質
インセプションデッキ: やらないことリストと トレードオフスライダーをやってる話
見えない壁を越えよう!アジャイルやマイクロサービスを阻む「今までのやり方」 - デブサミ夏2023
大企業アジャイルの勘所(ver1.1) #アジャイルマネジメントセミナー
ChatGPT を使ってみた
「アーティスト活動」というプログラマの自己防衛術 - 坪倉輝明
ソフトウェア開発のやり方の改善
JICD主催−ナラティヴ・セラピー・アドバンスコース
BDD Approach with Karate Framework in Service Tests
アジャイルによくきく?モデリング
OpenAI の音声認識 AI「Whisper」をテストしてみた
コールバックと戦う話
The CQRS diet
プロダクトのフェーズとマネジメント
Ad

Viewers also liked (20)

PPTX
レガシーコード改善のススメ
PDF
プログラムの処方箋~健康なコードと病んだコード
PDF
テストとリファクタリングに関する深い方法論 #wewlc_jp
PDF
レガシーコードを改善した先にあるもの、それは継続的インテグレーション
PDF
『新装版リファクタリング ―既存のコードを安全に改善する―』 のここがすごい
PDF
レガシーコードとの付き合い方とテストでの話
PDF
納品のない受託開発を支える レガシーコードを作らない仕組み
PDF
アジャイルサムライ横浜道場「リファクタリング:技術的負債の返済」
PDF
リファクタリングの実情
PDF
Gaucheで本を作る
PDF
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PPT
【CyberX読書会】リファクタリング 2012/02/06
PDF
リファクタリング?
PDF
命名の話(ソースコードは読み物です)
KEY
テストコードのリファクタリング
PPTX
Spring超入門-Springと出会ってから1年半-
PDF
コーディングスタイル入門~人に伝えるプログラミング~
PDF
エクストリームエンジニア5
PDF
第1回JUnit勉強会ハンズオン
PDF
システムアーキテクト~My batis編~
レガシーコード改善のススメ
プログラムの処方箋~健康なコードと病んだコード
テストとリファクタリングに関する深い方法論 #wewlc_jp
レガシーコードを改善した先にあるもの、それは継続的インテグレーション
『新装版リファクタリング ―既存のコードを安全に改善する―』 のここがすごい
レガシーコードとの付き合い方とテストでの話
納品のない受託開発を支える レガシーコードを作らない仕組み
アジャイルサムライ横浜道場「リファクタリング:技術的負債の返済」
リファクタリングの実情
Gaucheで本を作る
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
【CyberX読書会】リファクタリング 2012/02/06
リファクタリング?
命名の話(ソースコードは読み物です)
テストコードのリファクタリング
Spring超入門-Springと出会ってから1年半-
コーディングスタイル入門~人に伝えるプログラミング~
エクストリームエンジニア5
第1回JUnit勉強会ハンズオン
システムアーキテクト~My batis編~
Ad

Similar to 今日からはじめるリファクタリング (9)

PDF
2019年度 若手技術者向け講座 リファクタリング
KEY
111030 ksworks-lifehack-refactoring
PDF
第10回rest勉強会 リファクタリング(サーバ編)編
PDF
デザインパターンを用いたリファクタリング
PDF
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
PDF
第11回rest勉強会 リファクタリング(クライアント編)
PDF
Refactoring
PPT
Mizukiryu refactering-20110821
PDF
App codeでリファクタリング
2019年度 若手技術者向け講座 リファクタリング
111030 ksworks-lifehack-refactoring
第10回rest勉強会 リファクタリング(サーバ編)編
デザインパターンを用いたリファクタリング
任意粒度機能モデルコードクローン検出手法のリファクタリング理解への適用の試み
第11回rest勉強会 リファクタリング(クライアント編)
Refactoring
Mizukiryu refactering-20110821
App codeでリファクタリング

今日からはじめるリファクタリング