SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
ソースコードの複雑さを測ろう
     2012/4/10
自己紹介

‣   永井伸弥(@Shinya_131)

‣   製薬会社で営業支援システムを開発中

‣   Ruby & Ruby on Rails暦10ヶ月くらい
【今日のテーマ】
メトリクス測定
メトリクス測定って何?
•   コードの複雑な部分を指摘してくれるツール

     ‣   長過ぎるクラス、メソッド

     ‣   短すぎる変数名(a, b, c...)

     ‣   多すぎる変数

     ‣   Rdoc用のコメントが無いクラス、メソッド

    ➡ こう言う部分を見つけて指摘してくれる
例えば
   Rubyのメトリクスツール”Reek”を使ってみる

$gem install reek
$reek myApp.rb
myApp.rb -- 9 warnings:
 A has no descriptive comment (IrresponsibleModule)
 A has no descriptive comment (IrresponsibleModule)
 A#a has the variable name 'f' (UncommunicativeName)
 B has no descriptive comment (IrresponsibleModule)
 B#a calls a.b twice (Duplication)
 B#a contains iterators nested 2 deep (NestedIterators)
 ・・・
例えば
                     Railsにも使える

$reek myRailsApp/app/controller/
file_a.rb -- 10 warnings:
 A has no descriptive comment (IrresponsibleModule)
 ・・・
file_b.rb -- 32 warnings:
 B has no descriptive comment (IrresponsibleModule)
 ・・・
file_c.rb -- 3 warnings:
 C has no descriptive comment (IrresponsibleModule)
・・・
【メトリクス測定とは?】
コードの複雑さを見える化する事
あるプロダクトのClass別Warning数


                     •   プロダクト全体で63のClass
         Class A
          14%        •   でも上位5つだけでWarningの半分以上!
その他             B
40%            13%   •   A∼Eを集中してリファクタリングすべき!


               C     •   どこが複雑か把握できると対処しやすい

       E   D  13%
      10% 10%
【課題】
複雑になったコードをリファクタリング
    するのはとっても大変
【対策】
そもそも複雑にならないようにしよう!
治療より予防!
治療より予防!

• 複雑にならないように書くべき


 ➡複雑になったらすぐリファクタリング


 ➡コミットする度にメトリクス測定


 ➡reekをJenkinsに組み込もう!
Reek Viewerでレポート作成

• reekをjenkinsで自動実行→あまり見やすくは無い...


• reekの出力結果を見やすく整形するツール”reek   viewer”

 ➡コマンドライン→HTML


 ➡Warning数が多い順に表示


 ➡複雑さを色でお知らせ
•   Class別にWarningを表示

•   クリックすると詳細表示
使い方

$reek -y myRailsApp/app/ > reek.yaml
$ruby reek_viewer.rb ./reek.yaml
DEMO
まとめ

(1)reekでコードの複雑さを測ろう
 $gem install reek


(2)複雑になる前にリファクタリングしよう!



(3)reek viewer使ってみてね!
ご清聴ありがとうございました
     @Shinya_131

Weitere ähnliche Inhalte

Ähnlich wie コードの複雑さを測ろう

Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Tsunenori Oohara
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
プロが教える Rails 教え方ワンポイントとキャリア情報
プロが教える Rails 教え方ワンポイントとキャリア情報プロが教える Rails 教え方ワンポイントとキャリア情報
プロが教える Rails 教え方ワンポイントとキャリア情報DIVE INTO CODE Corp.
 
C#のココが好き!
C#のココが好き!C#のココが好き!
C#のココが好き!Takaaki Suzuki
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回龍一 田中
 
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby CocoaTomoki Maeda
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ陽平 山口
 
Numeric クラスについて
Numeric クラスについて Numeric クラスについて
Numeric クラスについて Tomoya Kawanishi
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」Shuji Morisaki
 
nomlab_okayamaruby_slide
nomlab_okayamaruby_slidenomlab_okayamaruby_slide
nomlab_okayamaruby_slidenomlab
 
Cプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧めCプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧めMITSUNARI Shigeo
 
nomlab_okayamaruby_subslide
nomlab_okayamaruby_subslidenomlab_okayamaruby_subslide
nomlab_okayamaruby_subslidenomlab
 
レガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合うレガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合うYuta Ohashi
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版DIVE INTO CODE Corp.
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeKen Morishita
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)Yoshifumi Yamaguchi
 
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチMonadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチTomoharu ASAMI
 
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Tokoroten Nakayama
 

Ähnlich wie コードの複雑さを測ろう (20)

Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486Elixir-Conf-Japan-2017-session-ohr486
Elixir-Conf-Japan-2017-session-ohr486
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
プロが教える Rails 教え方ワンポイントとキャリア情報
プロが教える Rails 教え方ワンポイントとキャリア情報プロが教える Rails 教え方ワンポイントとキャリア情報
プロが教える Rails 教え方ワンポイントとキャリア情報
 
C#のココが好き!
C#のココが好き!C#のココが好き!
C#のココが好き!
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回
 
090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa090821 Ruby Sapporo Night Ruby Cocoa
090821 Ruby Sapporo Night Ruby Cocoa
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
 
Numeric クラスについて
Numeric クラスについて Numeric クラスについて
Numeric クラスについて
 
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
XP祭り関西2011 森崎 修司「プラクティスが有効にはたらく前提は明らかになっていますか?」
 
nomlab_okayamaruby_slide
nomlab_okayamaruby_slidenomlab_okayamaruby_slide
nomlab_okayamaruby_slide
 
Cプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧めCプログラマのためのカッコつけないプログラミングの勧め
Cプログラマのためのカッコつけないプログラミングの勧め
 
nomlab_okayamaruby_subslide
nomlab_okayamaruby_subslidenomlab_okayamaruby_subslide
nomlab_okayamaruby_subslide
 
レガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合うレガシーなWebアプリケーションと向き合う
レガシーなWebアプリケーションと向き合う
 
Coderetreat
CoderetreatCoderetreat
Coderetreat
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
iOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPracticeiOSやAndroidアプリ開発のGoodPractice
iOSやAndroidアプリ開発のGoodPractice
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
 
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive ProgrammingへのアプローチMonadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
 
Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話Rubyの会社でPythonistaが3ヶ月生き延びた話
Rubyの会社でPythonistaが3ヶ月生き延びた話
 

コードの複雑さを測ろう