-
Notifications
You must be signed in to change notification settings - Fork 8
議事録(5)
- 日付:2011年7月13日
- 議事録担当:@tarya , @sasaki
- AGENDAの共有(by司会)
- 前回決めたTryの再確認
- 過去の未解決質問を検討する時間があってもいいかもしれない
- コードを事前に用意してほしい
- 議事録を二人以上で書いてみる
- 一回は発言する
- 初参加者の自己紹介
- メタプログラミングRuby読書会
- 発表
- @mackatoさん「浜松Rails3道場 Active Record編(多分)」
- @kiwofusiさん「Rails勉強会とかAsakusa.rbみてきた話とかを5分でおしゃべりします」
- KPT(最後の15分)
- 次回の予告と担当割り振り
- @w1mvy 松本さん (@sea_mountain さんのご学友)
- メタプログラミングを勉強していきたい
-
p.145 コラム ・@@vが定義されているときのカレントクラスはObject ・クラス変数はサブクラスからアクセス可・ゆえにMyClassからObjectの@@vにアクセスできる、というのは理解できたのですが、「クラス変数はクラスではなく、クラス階層に属している」の意味がわかりませんでした(suchi)
- クラス変数は、定義されたクラスを派生したクラスでも参照できるし変更できる。ここで「クラス階層に属している」という表現を使っているのは、クラスインスタンス変数とは違うということを言いたいのではないかと思われる。
- クラスインスタンス変数: 定義されたそのクラスでしか参照できない
- クラス変数: 定義されたクラスを派生したクラスでも参照できる
- クラス変数は、定義されたクラスを派生したクラスでも参照できるし変更できる。ここで「クラス階層に属している」という表現を使っているのは、クラスインスタンス変数とは違うということを言いたいのではないかと思われる。
-
p.147 真ん中あたり「class_eval()...を使って、プライベートな @time_class 変数にこのクラスを割り当てる」のclass_evalを使った場合はどう書く?(mackato)
- class_eval と instance_eval の違いは?
- どちらも同じ動作をするようだが、オブジェクトに対しては instance_eval しか使えない
- Loan をオブジェクトとしての視点で見るときは、instance_eval を使い、クラスの視点で見るとき(オープンクラスを使いたいとき)は class_eval を使う
class Loan def initialize(book) @book = book @time = Loan.time_class.now end def self.time_class @time || Time end def to_s '#{@book.upcase} loaned on #{@time}' end end class FakeTime def self.now; 'Mon Apr 06 12:15:50'; end end require 'test/unit' class TestLoan < Test::Unit::TestCase def test_conversion_to_string Loan.class_eval { @tine_class = FakeTime } Loan = Loan.new('War and Peace') assert_equal 'WAR AND PEACE loaned on Mon Apr 06 12:15:50', loan.to_s end end
ここで、class_eval を instance_eval に書き換えても、そのまま動く
-
p.150 Object.singleton_methods #=> 特異メソッドを配列で返す
-
p.153 class_definisions/attr.rbのコードで、def my_attribute=(value)の部分で、my_attributeに=が付いている理由(これで起こる処理?)。
- "my_attribute=" までがメソッド名
- オブジェクトの属性に対する代入が目的のメソッド名は = を使う。(C# のプロパティの setter と同じで = がメソッド名に付く)
例として、以下のようなメソッド定義では、d.foo = "hoge" というように = を使うことができない。
class D def foo(value) @foo = value end end
-
p.158 「特異クラスとinstance_eval()」 「instance_evalを呼ぶことでカレントクラスをレシーバの特異クラスに変更する」の意味がわからなかった(suchi)
- 普通はその方法では使わないと言う事を主張するための文意があるのだろうか
- instance_eval もカレントクラスを変更するのだが、一般的にその目的で使うことはない。
- よって、instance_eval の意味として「self に変更を加えたい」という認識で問題ない
-
「4.6 エイリアス」 aliasとModule#alias_method() の使い分けは必要? (suchi)
- 別にわざわざ用意されている意味は何だろうか?
- 動的にエイリアスを作りたいときは、キーワードを使えないので Module#alias_method() が用意されている
-
4.7 クイズ:壊れた計算
- 演算子のオーバーライド
-
- というメソッドを自分で定義するとどうなるだろうか
class Foo def +(value) puts value; value end end Foo.new + "hello" => hello Foo.new + "hello" + " world" => hello world
- 再定義できない演算子
= ?: .. ... ! not && and || or ::
- 演算の優先度を変更できないだろうか
- => できなそう
- groovy のエルビス演算子(?:)は定義できるだろうか
- => ? が再定義できない為無理
-
Asakusa.rb
- rubykaigiのプログラムみて雑談
- 身内感があった
- 勉強会というよりコミュニティとしての雰囲気が強い
- Ruby会議
- 「Ruby でつくるOS」がすごいらしい
-
Rails For Zombies
- インタラクティブな Rails 学習サイト(http://railsforzombies.org/)
- チームの一体感の形成の為ふりかえりを行う
- リラックスが大事
- 勉強会開催場所(静大月曜日11時から)
-
wiki の仕様
- ユーザ認証・ページ履歴確認・ページ作成
-
参考
- Ruby on Rails Guides
-
バージョン
- ruby 1.9.2
- rails 3.0
-
サンプルコード
- GitHub
-
環境
- FactoryGirls:テストデータ作成 => ruby のコードでテストデータを作成
- Spork:テストの高速化
-
実装モデル
- User
- Page
- Comment
- History
-
各モデルの実装手順
- モデルの作成
- Factory
- Spec (参照: http://jp.rubyist.net/magazine/?0032-TranslationArticle)
- 条件によってスペックの前にコンテキストを追加
describe "ClassName" do describe "#method_name" do context "条件" do it "テスト内容" do
- モデルクラス
- SexyValidation
- scope
- 各モデルの関連付け
- テスト実行
-
開発終了時
- 作業内容を master にマージ
- 作業後のコードが GitHub にある
-
モデルについて補足
-
Migration(データベース構造の管理)
rake db:migrate rake db:rollback rake db:migrate:redo
- Validations(データ検証)
Validation Helpers Sexy Validation
- Associations(データ関連)
belongs_to has_one has_many has_many :through
- Query(データ検索)
Finder methods Retrieving a Single Object Retrieving Multiple Object Calculations
- ※ 遅延評価に注意
- Page.limit(10).count #=> 11
- Page.limit(10).all.count #=> 10
- 実際にクエリを実行させてデータをフェッチさせそれからカウントを取る
- ActiveRecord でテーブルの項目が内部で動的に作られていると思うが、それをオーバーライドして別のメソッドを作りたい
- 同名の setter を作成して上書きしていいのかどうか
- アクセサメソッドの挙動・仕様が明示的で無くなるのであまりやらない方がいいかもしれない
- Linux, Mac だと RVM
- Windows だと PICK
- dojo のクオリティやばい
- 浅草・ゾンビの発表がよかった
- 色々なツールを知るきっかけになる
- LTがあった
- dojoのスライドきれい
- dojo復習
- dojo説明丁寧
- dojoレベル高い
- 議事録は2人だと good(片方が話していてもOK)
- GitHubの使い方が分からない
- 初心者にはきつい
- コードはDLしてくる
- メタプロ難しい
- メタプロ質問ない
- 予習しないとダメです ついていけません
- メタプロRubyの日本語変
- ATNDのアンケート結果知りたい
- 発言少なめ
- テストがちゃんと書けない
- 開催場所を変えてみる
- ATND 価値のあるアンケート
- メーリングリストで宣伝
- メタプロRubyの日本語のリファクタリングが必要
- コードのカラーを変更(Rails3道場)
- メタプロのあとのあり方を相談したい(浅草ゾンビを受けて)
- いろいろ試したい
- LT希望(内容未定)
- Git本
- 告知(ATNDとか): tarya
- モデレータ: 清水さん
- 打ち込まー: ke_tachibanaさん
- 議事録er: チェさん, kiwofusiさん
- LT: arfyasuさん
- (勉強会終了後のフィードバック記事)