Skip to content
yowasou edited this page Aug 13, 2023 · 30 revisions

[議事録]

AGENDA

  1. AGENDAの共有(by司会)
  2. 先回決めたTryの再確認
    • モデレータを誰かにふる :解決
    • ちゃんとハンズオン
    • ホワイトボードを使いまくる:使いましょう
    • 手元PCを気軽にプロジェクタに映す:
    • ハンズオン用のPJを作っておく
    • Rounting道場を動かしてくる
    • Ruby入門書を読んで勉強してくる
  3. 初参加者の自己紹介
    • @toshi0328t さん
    • @Cot_K (コティ)さん -- @sea_mountain さんのご学友
    • @indigo_1030 さん -- @Tysonさんのご友人
    • @nek_s さん
    • 既存参加者についてはポジションペーパー読んどいてください。
  4. メタプログラミングRuby勉強会
    • 節単位でまとめ
    • Wikiの疑問点の説明(書いた人)、それに関する議論(全員)
    • 自由に質問/コメントしてよい
    • モデレータが調整する
  5. 発表「浜松Rails3道場
  6. KPT(最後の15分)
    • 全員でKPTを書く
    • それに関して意見交換
    • 全体での次回のTry項目を決める
  7. 次回の予告と担当割り振り

4. メタプログラミングRuby勉強会

範囲:第3章 水曜日: ブロック

疑問点と議論

  • p107 yieldの読みは「イールド」、イにアクセントでOK? (mackato)

    • ⇒【発音記号】ji'ːld  イにアクセントです。(tyson)
    • ⇒イエールド!!だとテンションウP!なのに・・・。
  • P112 『ブロックの引数を〜修正されている』の意味がよく分かりません。   Ruby1.9では「x # => 1」となるようだが、yieldの引数「2」はどうなってしまうのかよく分からない。(tyson)

    • ⇒不自然なので1.9で治ったのでは?
    • ⇒どこがどう不自然なのか?
    • ⇒ブロック引数のxは先に宣言されたローカル引数のxとは別であって欲しい
  • P112 同じ箇所ですが、『〜先のコードのxは1つだけとなり、』の意味がわかりませんでした。(yuto)

    • ⇒本来ここで2つのxが存在するはずが、1つだけになってしまう、という意味かな(suchi)
  • P113 blocks/scopes.rb のコードを実行すると、my_method内でlocal_variablesが「v3」と一緒にnilを吐くのですが、私だけでしょうか?(yuto)

  • p.121 一番下の partial_mock_spec.rb がなにをやっているのかわかりませんでした(suchi)

  • 同上・・・「テスト対象に同様のインスタンス変数がある場合、どうすればいいだろう?」 の答えがpartial_mock_spec.rbの中に あるのでしょうか? インスタンス内に同じクラスのインスタンスを保管したインスタンス変数を設定していることが何を意味するのか理解できませんです。(ywaka)

    • ⇒@objectが@optionsだと説明文と合っているような気がする。 オブジェクトが入れ替わらないことを検証したいのではないか?(下2行はあまり関係ない)。

    • どなたかわかったらwikiに書いてください。

    • ひょっとして、rspecはオブジェクトのメソッドをスタブ化するときに、対象のオブジェクトに@optionsというインスタンス変数を持たせ、 それにスタブ化したメソッドのリストを保存している、ということが前提としてあるのでは? だから元から@optionsというインスタンス変数を持っているオブジェクトにスタブを使うと動作しないように思える。 しかし「裏でいくつものトリックを仕掛けている」のでちゃんと動くようになっている。 そして、そのトリックがうまく行っているかテストするのにinstance_evalを活用している…… ということではないでしょうか。(@ke_tachibana, 2011/6/9)

    • ↑のとおりです should_receive(:blah)でblahというメソッドのモックを定義していて、 このblahというメソッドがコールされないとテストがFailします (手元に環境があるならば@object.blahを削除してテストをしてみるとFailになるのがわかります) 「お互いが利用している変数が競合してしまっても正常にテストができるかどうか」のテストをしているわけですね

      実際のテストは以下のようになっています

      it "should not conflict with @options in the object" do
        @object.instance_eval { @options = Object.new }
        @object.should_receive(:blah)
        @object.blah
      end
  • p.130 UnboundMethodオブジェクト「この風変わりな機能を実際に使う理由」はどういうときなんでしょうか。難しい(suchi)(ywaka)

    • ⇒特異メソッドを使い回すとき?と思いましたが、特異メソッドを定義したらbindできませんでした。。。   TypeError: singleton method bound for a different object (tarya)
  • P135 下から三行目 プログラムは@eventsをイテレートする。の部分ですが、  @eventsの中の要素をループして処理するという意味であってるでしょうか?あとイテレートという呼び方はよく使いますか?(makita)

    • ⇒それで間違いない。Rubyの本ではイテレートと使われている。
    • 私は「の要素をループする」という言葉の方を良く使いますが、イテレートという言葉も別に違和感ありません。他のところでも聞いたことあるような。(tarya)
    • C++のイテレータとか(反復子と訳す本もある)
    • GoFデザインパターンのIteratorパターンとか
    • イテレーティブ開発とか
  • p.137 「クリーンルームのインスタンスメソッドなら、すべてのeventsとsetupsから見えるのだ。」 :結構考え込んでしまったのですが、event, setupというカーネルメソッドに渡すブロックの中で使えるメソッドを専用のクリーンルームクラスで実装できる、という意味であっていますでしょうか? (tarya)

    • ⇒Yes
    • それは「クリーン」ルームと呼ぶべきなのか?
    • いや、それ専用のルーム、という意味だから適切なのか
  • クラスの中にメソッドの外側に書いたコードっていつ実行されるんですか?ロード時?

    • ⇒ロード時に実行される。
  • インスタンス変数はオブジェクトそれぞれに持っている。  1章で説明されているとおり、クラス内で宣言されると、@hogeはそのクラスのインスタンス変数になる  メソッドの外で宣言したインスタンス変数は、クラスのインスタンス変数になる。  @@を付けるとクラス変数になる。C++で言うところのstatic変数。  C#やJavaではclass Foo{ }の直下で変数を宣言するとインスタンス変数(的なもの)になるが、Rubyではそうはならない。

  • 生みの親はイテレータと読んでいる、今はブロックと呼ばれることが多い

クイズ

  • p.110 beginは予期される例外がある場合に使う。 ensureはC#でいうところのfinally。逆にfinallyの有効範囲を決める、という意味で使える。

  • p.115  begin,endureはスコープゲートではない。  begin,ensure内にある変数を参照したくない場合はスコープをまたぐ必要がある。

  • p.135  @が付いているので外側のスコープのインスタンス変数なので、どこからでもアクセス可能。  env = Object.newはクリーンルーム。

5. 発表「浜松Rails3道場

  • 3ヶ条  習うより慣れろ!  理論より実用  未知を恐れない

  • 環境  Ruby 1.9.2  Rails 3.0.7

  • RailsWizardが便利!!  コマンドを選択してURLを生成。

  • Routingとは・・・? HTTP リクエストとコントローラのアクションを結ぶ仕組み。

  • いけてるテンプレート  「Skeleton」  HTML, CSS, javascript でできている。  Html2Haml で変換。  ⇒変換したものはgithubへ置いておいた。

  • リソース用のコントローラを生成  update ,destoroyが同じURLだが?  同じパスにアクセスしても、HTTPのメソッドが違うので振る舞いが分かれる。  HTTPではGET,POST,PUT,DELETEの4種類のメソッドが定義されているが、一般的なブラウザはGETかPOSTしか使えない。なので……→ 参考

  • 作成されるヘルパーの名前は規則で決まっている。  member にアクセスするのであれば基本はpage_path(id)

  • Resource Rountingを理解してしまえば、開発者間で共通認識として使える。 config/route.rbを定義することになる。

  • テストはRSpec。今やデファクトスタンダード。 テンプレートでRSpecで指定+gemでRSpecをインストールしているとRSpecのテストコードも作成される

  • sassとはスタイルシートをもっと簡単にかけるようにするもの。 CSS に変換される必要がある。

hoge.sass

#header
  width: 200px
  #navi
    height: 50px
a
  text-decoration: underline
  &:hover, &.hoge
    text-decoration: none

hoge.css

#header{width:200px;}
#header #navi{height:50px;}
a{ text-decoration:underline; }
a:hover, a.hoge{ text-decoration:none; }

嬉しいのは以下のようなことができること これでベースカラーを変えたくなったときに$basecolorの値を変更すれば 変わっちゃうというCMSに近いことができてしまう

$basecolor: #ee3366;
$subcolor: #cc6666;
#header
  width: 200px
  background-color: $basecolor
  #navi
    height: 50px
    background-color: $subcolor
  • Powってなにがうれしいの?URLをlocalhostにする以外には?

    • rails serverする必要ない。
    • Powはアクセスがあったら勝手に立ち上がる、アクセスがしばらくなかったら勝手に落ちる。
    • サブドメインを自由につけて、foo.rails3dojo.devなどとしてもアクセスできる。「ユーザ毎にサブドメインを割り当てるサービス」などを開発するときのテストに便利。
  • Pow再起動のコマンドは?  touch tmp/restart.txt  tmpディレクトリの下にrestart.txtを付けると再起動する。

  • Powの設定の仕方  homeディレクトリの直下に.powというディレクトリができる。そこに名前付きのシンボリックリンクを作成

  • HAMLはerbの代わりになる?  なると思う。  今のところRubyのみ。  ブロックで囲むのではなく、インデントで判断する。

  • 『次回』  多分、Active Record

6. KPT(最後の15分)

『Keep』

  • dojo面白かった
  • クイズの答えを一行一行説明した
  • dojoで色々な便利ツールを知った

『Problem』

  • みんなの理解度がわからない
  • ネットワークが繋がらない(モデレータや発表者は各自で対策が必要)
  • 予習不足

『Try』

  • 過去の未解決質問を検討する時間があってもいいかもしれない
  • コードを事前に用意してほしい
  • 議事録を二人以上で書いてみる
  • 一回は発言する

7. 次回の予告と担当割り振り

  • 告知(ATNDとか) :@チェレンコフ
  • モデレータ : @tachibana
  • 議事禄er :@taryaさん , @sasakiさん

フィードバック

Clone this wiki locally