Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

名古屋Ruby会議02 LT:Ruby中級への道

5,202 views

Published on

初級を抜け出すためにやったこと、「Ruby逆引きレシピ 232」「リファクタリングRuby」「メタプログラミングRuby」の面白かったところをお話させていただきます。

Published in: Technology
  • Be the first to comment

名古屋Ruby会議02 LT:Ruby中級への道

  1. 1. Ruby中級への道 @suchi(Hamamatsu.rb) NAGOYARubyKaigi02 2011/02/26
  2. 2. suchi http://www.suchi.org/ Ruby Lv: 初心者→中級? 好きなメソッド: Object#tap 好きなrubyist: @m_seki 好きなSNSDメンバ: TaeYeon好きなアジャイルプラクティス: ありのままの進捗を計測 好きなXPプラクティス: 計画ゲーム 好きなもの: 似てるもの
  3. 3. Hamamatsu.rb? 3/9 Kickoff http://hamamatsu-rb.github.com/
  4. 4. Rubyレベル
  5. 5. NGRK01
  6. 6. 「好きなメソッドはyieldと書きたかったんで すが」 http://www.youtube.com/watch?v=o8Y3mHpPAlE 02:35
  7. 7. yield はメソッドではなく 式
  8. 8. 初心者から抜き出るには
  9. 9. いま風なのは• 遅延評価勉強法(@amachang)• つまみ食い勉強法• パラシュート法 (野口悠紀雄「『超』勉強法」 http://d.hatena.ne.jp/amachang/20080204/1202104260
  10. 10. がこれまでを振り返ると
  11. 11. K&REffectiveC++/STL
  12. 12. ソフトウェア作法Software Tools
  13. 13. MachProgramming
  14. 14. Scheme
  15. 15. 本日の水木サン
  16. 16. Windows API MFC
  17. 17. XP
  18. 18. CODECOMPLETE
  19. 19. 身についたのは 全部 つまみ食い フルコース
  20. 20. Why?
  21. 21. 高野豊rootから/への メッセージ http://www.amazon.co.jp/dp/4756107869
  22. 22. 「管理者になるからにはBSDのmanは全部 読め」
  23. 23. ゲーテ言わなくていいことをわざわざ言っちゃう人 (最近再ブレイク)
  24. 24. 世界はお粥で出来ているのではない 怠けてぐずぐずするな 堅いものなら噛め 二つに一つしかないのだ 世界に負けて喉が詰まるか それとも自分の力で消化するかあこがれを持って、強く希求し、そしてそのためにどれほど膨大なコツコツが必要であるかに溜息をつきながら、投げ出さないで続けることって、難しいことですが、すごく豊かになれますよ(id: inflorescenciaさん) http://d.hatena.ne.jp/inflorescencia/20071027/1193498546
  25. 25. amazonのペゾスさん
  26. 26. 「PCや携帯電話、PDAのようなネットワークツールが普及することで、情報の断片的な収集(情報のつまみぐい)に慣れてしまい、長時間集中して本を読まなくなってきている」といった主旨のことを語ったという。また、「Kindleによって、そうしたことからの脱却を図りたい」とも述べていたという。 http://bizmakoto.jp/makoto/articles/1102/16/news013.html
  27. 27. 戦略• 基本からしっかり• 重箱の隅ではなく全体感/体系• 全部読む–時間がない?→トイレで読む• (でもドライブする仕組みがあ るといい)
  28. 28. WebアプリスーパーサンたのしいRuby 2007/11/27-04/27 2009/07/01-08/01 プルRubyレシピブック 2008/08/30-10/07 逆引きRails(2回目) 2009/10/22-12/20268Railsレシピ183 2008/10/07-10/16 Ruby逆引きレシピ232 2009/12/23-01/29AWDwR 2008/11/17-03/03 Head First Rails 2010/03/23-04/05一日でわかるRails 2009/01/07-01/10 Railsデプロイ 2010/04/08-04/21Railsレシピ 183 2009/01/15-03/29 RailsOfRubyOnRails 2010/04/17-05/16 リファクタリングRuby初めてのRuby 2009/03/30-04/16 2010/05/17-07/07 エディション メタプログラミング逆引きRails 2009/05/08-06/22 2010/09/07-11/20 Ruby
  29. 29. アクティヴィティ• 表紙から索引、後付まで全部読む• レシピ本を全部読む• 逆引き本を最初から読む ← オススメ! – 中身忘れてもインデックスができる• バーンダウンチャートでドライブ! ←オススメ!• 社内Wikiに載せる• トイレで読む
  30. 30. バーンダウン チャート
  31. 31. トラウマ
  32. 32. 計るもの• 残ページ数• ユニット数 – レシピ番号 – 逆引き番号• 10日毎に予測線←オススメ!• あまり関係ない – 消化ページ数 – 平均進捗/ここ10日の進捗
  33. 33. 消化ユニット 残ユニット
  34. 34. 1/1の予測ライン 1/10の予測ライン
  35. 35. 脱初心者向け面白かった本
  36. 36. はじめに(Martin Fowler)
  37. 37. Q.オリジナルを持っているのにこの本も 必要なのか?
  38. 38. たぶんいらないだろう
  39. 39. ゲーテ
  40. 40. 例: タイプコードの除去• ふるまいをタイプコード(switch文等)で 切り替えているコード• オブジェクト指向(ポリモーフィズム)を理 解していない場合が多い• 重傷な場合は、クラスのタイプIDを取得 してswitch文で振り分けていたり
  41. 41. 本家リファクタリ ング
  42. 42. a.クラスによるタイプコードの 置き換えb.サブクラスによるタイプコー ドの置き換えc.State/Strategyによるタ イプコードの置き換え
  43. 43. Rubyエディション
  44. 44. a.クラスによるタイプコードの 置き換えb.タイプコードからモジュール のextendへc.State/Strategyによるタ イプコードの置き換え
  45. 45. 他にも• モジュールの抽出• テンプレートメソッドの作成–モジュール版• クラスアノテーションの導入• 名前付き引数の導入
  46. 46. メタプログラミング Ruby
  47. 47. クラスアノテーション導入による リファクタリングmodule CustomInitializers def hash_initializer(*attribute_names) define_method(:initialize) do |*args| data = args.first || {} attribute_names.each do |attribute_name| instance_variable_set "@#{attribute_name}", data[attribute_name] end end endmendClass.send :include, CustomInitializersclass SearchCriteria... hash_initializer :author_id, :publichsr_id, :isbnend
  48. 48. クラスメソッドclass MyClass def self.my_method; : endenddef MyClass.my_other_method :end
  49. 49. これはどういうことclass MyClass class << self def class_method; : end endend
  50. 50. クラスメソッドは Classの 特異クラスの 特異メソッド
  51. 51. オープンソースのコードを読んで 面食らうことボブが易しく解説
  52. 52. • 「初めてのRuby」 – 他言語からの移行者に特にオススメ! – 第8章は、筆がすべっている! • クラスとオブジェクトとモジュールの難しい関係 – メタプログラミングRubyを読んで • →Rubyを理解する上で重要なところだったのか!
  53. 53. super class Object Module class classObj1 super class super class classObj2 class MyClass Class class class classObj3
  54. 54. ActiveRecord
  55. 55. ActiveRecordで定義したクラスPersonを探す
  56. 56. Object.const_defined?(:Person) #=> falseObject.const_get(:Person) #=> Person # ここで定義されるObject.const_defined?(:Person) #=> true
  57. 57. うっかりClassを 調べると
  58. 58. >> Class.ancestors>> Class.ancestors=> [Class, ActiveSupport::Dependencies::ClassConstMissing, Module, ActiveSupport::Deprecation::ClassMethods,ActiveSupport::Dependencies::ModuleConstMissing, ActiveSupport::CoreExtensions::Module, Object, PP::ObjectMixin, ActiveSupport::Dependencies::Loadable, InstanceExecMethods, Base64::Deprecated, Base64, Kernel]
  59. 59. わかること• メソッドはどうやって探すの?• Procとlambdaの違いは?• では聞くが、クラスとはいったい なんなのだ?• 自己記述コード
  60. 60. 異様に楽しい
  61. 61. 副作用def foo proc { puts "hello" }endfoo.callfoo.class #=> Proc
  62. 62. まとめ• 脱初心者にはフルコース – (不器用なのでそれしかやり方を知らない)• バーンダウンはドライブする• 逆引き本オススメ• 「リファクタリング:Ruby Ed」 – 言語の使い方がわかる• 「メタプログラミングRuby」 – Rubyである意味がわかる。 • 応用例は30分後!• 中級は理解する楽しさ

×