SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
Rubyにおける
Clean Code戦略


   2011/04/10
  大江戸Ruby会議
赤松 祐希(@ukstudio)
フリーのRubyプログラマ

     http://ukstudio.jp
 y.akamatsu@ukstudio.jp
どうしてこうなった
“しかし、ディルバートよ、間違っている
      のは、我々の星回りではなく、我々自身
      なのです。”

      “あなたがそれに負けない熱意を持っ
      てコードを守ればよいのです。”




Clean Code P.30
戦略



http://www.flickr.com/photos/calliope/2313727442/
もしまだやってないのなら...




   テスト駆動開発
   リファクタリング
 継続的インテグレーション
汚れたコード



http://www.flickr.com/photos/creative_tools/4353923698
20%
 リファクタリング
組み合わせる

      ストーリー



          リファクタ




http://www.flickr.com/photos/picken/3312949360/
細目にクリーンにする




http://www.flickr.com/photos/picken/3312949360/
“ボーイスカウトには大切なルールがあ
   ります。それは、「来た時よりも美しく」
   です。たとえ自分が来た時にキャンプ場
   が汚くなっていたとしても、そしてたとえ
   汚したのが自分ではなかったとしても、
   きれいにしてからその場を去る、という
   ルールです。”
プログラマの知るべき97のこと P.17
S.O.L.I.D原則

 SRP       OCP         LSP
単一責任     オープン・クローズド   リスコフの置換




 ISP        DIP
依存関係逆転   インターフェース分離
単一責任の原則
変更理由 = 役割・責務
Userクラス

    バリデーション
    認証              権限に
                   関する修正
    権限




バリデーションに    認証に
 関する修正     関する修正
mixin
Validate::User
Userクラス           モジュール



                 バリデーションに
                  関する修正

Authentication
 モジュール           Roleモジュール



    認証に              権限に
   関する修正            関する修正
オープン・クローズド原則



http://www.flickr.com/photos/stevensnodgrass/4460594204/
http://www.flickr.com/photos/seanfx/5092676658/
ダックタイピング
ブロック
Rubyらしい設計



http://www.ruby-assn.org/ruby-logo.html.ja
文化




                                                  スキル


http://www.flickr.com/photos/usgo55/2885049548/
http://www.flickr.com/photos/hawee/2194569264/
議論しよう

Weitere ähnliche Inhalte

Ähnlich wie 大江戸Ruby会議

SGT技術トークス 継続的デリバリー
SGT技術トークス 継続的デリバリーSGT技術トークス 継続的デリバリー
SGT技術トークス 継続的デリバリーYukei Wachi
 
Javaにおけるモジュラリティ元年
Javaにおけるモジュラリティ元年Javaにおけるモジュラリティ元年
Javaにおけるモジュラリティ元年Hiroki Kondo
 
すくすくスクラム広島第8回「塹壕よりスクラムとQC」
すくすくスクラム広島第8回「塹壕よりスクラムとQC」すくすくスクラム広島第8回「塹壕よりスクラムとQC」
すくすくスクラム広島第8回「塹壕よりスクラムとQC」稔 川口
 
世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということYukei Wachi
 
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja77web
 
Enterprise Redmine
Enterprise RedmineEnterprise Redmine
Enterprise RedmineDai FUJIHARA
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2Yasukazu Kawasaki
 
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策Salesforce Developers Japan
 
Apache CloudStack コントリビューション
Apache CloudStack コントリビューションApache CloudStack コントリビューション
Apache CloudStack コントリビューションSatoshi KOBAYASHI
 
A-Frameで作ったギャラリーのお話
A-Frameで作ったギャラリーのお話A-Frameで作ったギャラリーのお話
A-Frameで作ったギャラリーのお話KatsuyaENDOH
 
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Yusuke Wada
 
Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 <ツール・環境篇>」
Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 <ツール・環境篇>」Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 <ツール・環境篇>」
Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 <ツール・環境篇>」Yusuke Suzuki
 
capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活をRyunosuke SATO
 
VC6によるRuby拡張ライブラリ開発環境について
VC6によるRuby拡張ライブラリ開発環境についてVC6によるRuby拡張ライブラリ開発環境について
VC6によるRuby拡張ライブラリ開発環境についてgoritto
 
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-Hiroki Kondo
 
Rubyによるクローラー開発
Rubyによるクローラー開発Rubyによるクローラー開発
Rubyによるクローラー開発しくみ製作所
 
中国のクラウドサービスについて (サイバーエージェント×クックパッド合同勉強会LT資料)
中国のクラウドサービスについて (サイバーエージェント×クックパッド合同勉強会LT資料)中国のクラウドサービスについて (サイバーエージェント×クックパッド合同勉強会LT資料)
中国のクラウドサービスについて (サイバーエージェント×クックパッド合同勉強会LT資料)Yuuki Namikawa
 
SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月
SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月
SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月VirtualTech Japan Inc.
 
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)Yoshiharu Hashimoto
 

Ähnlich wie 大江戸Ruby会議 (20)

SGT技術トークス 継続的デリバリー
SGT技術トークス 継続的デリバリーSGT技術トークス 継続的デリバリー
SGT技術トークス 継続的デリバリー
 
Javaにおけるモジュラリティ元年
Javaにおけるモジュラリティ元年Javaにおけるモジュラリティ元年
Javaにおけるモジュラリティ元年
 
すくすくスクラム広島第8回「塹壕よりスクラムとQC」
すくすくスクラム広島第8回「塹壕よりスクラムとQC」すくすくスクラム広島第8回「塹壕よりスクラムとQC」
すくすくスクラム広島第8回「塹壕よりスクラムとQC」
 
世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ
 
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
 
Enterprise Redmine
Enterprise RedmineEnterprise Redmine
Enterprise Redmine
 
Pythonで検索エンジン2
Pythonで検索エンジン2Pythonで検索エンジン2
Pythonで検索エンジン2
 
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策HerokuでRailsアプリ運用の パフォーマンス、SEO対策
HerokuでRailsアプリ運用の パフォーマンス、SEO対策
 
Apache CloudStack コントリビューション
Apache CloudStack コントリビューションApache CloudStack コントリビューション
Apache CloudStack コントリビューション
 
A-Frameで作ったギャラリーのお話
A-Frameで作ったギャラリーのお話A-Frameで作ったギャラリーのお話
A-Frameで作ったギャラリーのお話
 
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門
 
Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 <ツール・環境篇>」
Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 <ツール・環境篇>」Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 <ツール・環境篇>」
Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 <ツール・環境篇>」
 
capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活を
 
VC6によるRuby拡張ライブラリ開発環境について
VC6によるRuby拡張ライブラリ開発環境についてVC6によるRuby拡張ライブラリ開発環境について
VC6によるRuby拡張ライブラリ開発環境について
 
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
成長できるエンタープライズシステムを目指して-OSGiによるモジュール型アーキテクチャの実現-
 
Rubyによるクローラー開発
Rubyによるクローラー開発Rubyによるクローラー開発
Rubyによるクローラー開発
 
中国のクラウドサービスについて (サイバーエージェント×クックパッド合同勉強会LT資料)
中国のクラウドサービスについて (サイバーエージェント×クックパッド合同勉強会LT資料)中国のクラウドサービスについて (サイバーエージェント×クックパッド合同勉強会LT資料)
中国のクラウドサービスについて (サイバーエージェント×クックパッド合同勉強会LT資料)
 
SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月
SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月
SR-IOV Networking in OpenStack - OpenStack最新情報セミナー 2016年3月
 
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
 
Molecule入門
Molecule入門Molecule入門
Molecule入門
 

Mehr von Yuki Akamatsu

Railsプロジェクトを成功させるために現場ができること -Railsdevcon2010
Railsプロジェクトを成功させるために現場ができること -Railsdevcon2010Railsプロジェクトを成功させるために現場ができること -Railsdevcon2010
Railsプロジェクトを成功させるために現場ができること -Railsdevcon2010Yuki Akamatsu
 
オブラブ忘年会2009 LT資料
オブラブ忘年会2009 LT資料オブラブ忘年会2009 LT資料
オブラブ忘年会2009 LT資料Yuki Akamatsu
 

Mehr von Yuki Akamatsu (6)

Goos 001
Goos 001Goos 001
Goos 001
 
Railsプロジェクトを成功させるために現場ができること -Railsdevcon2010
Railsプロジェクトを成功させるために現場ができること -Railsdevcon2010Railsプロジェクトを成功させるために現場ができること -Railsdevcon2010
Railsプロジェクトを成功させるために現場ができること -Railsdevcon2010
 
オブラブ夏2010
オブラブ夏2010オブラブ夏2010
オブラブ夏2010
 
オブラブ忘年会2009 LT資料
オブラブ忘年会2009 LT資料オブラブ忘年会2009 LT資料
オブラブ忘年会2009 LT資料
 
Vim DE OOP
Vim DE OOPVim DE OOP
Vim DE OOP
 
VimM#3
VimM#3VimM#3
VimM#3
 

大江戸Ruby会議