Date:  Wed, 06 Aug 2008 19:14:22 +0900
Subject:  【オブジェクト倶楽部: 2008-30号】
X-Mail-Count: 00255

読者のみなさまへ

発行者のオペレーションミスにより、先週のメールマガジンを再度発行して
しまいました。ご迷惑をおかけし、申し訳ありません。
以下が、今週分のメールマガジンです。お間違えのないようお願いします。

                     オブジェクト倶楽部事務局

       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
       ┃                         ■┃
      ●┃● ● オ ブ ジ ェ ク ト 倶 楽 部   ■ ┃
       ┃                       ■  ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
                          No.246 2008/08/06

■ I N D E X
┃
┣【プログラミング】Rubyで進むオブジェクトの道 [30]
┗【コラム】僕の営業日記 [3] 

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■━
■
┗【プログラミング】Rubyで進むオブジェクトの道 [30]

■はじめに
前回からRSpecのマッチャについて学習しています。
今回がマッチャ学習の最後として、マッチャを独自定義する方法を学んでみた
いと思います。

独自マッチャといっても今日は、文字列比較でeqlをmy_eqlで置き換えること
だけをゴールにします。

'hoge'.should eql 'hoge'
'hoge'.should_not eql 'fuga'
を
'hoge'.should my_eql 'hoge'
'hoge'.should_not my_eql 'fuga'

■ソース
module Spec
  module Matchers
    describe "'hoge'" do
      it "should my_eql('hoge')" do
        "hoge".should my_eql("hoge") #1-1
      end

      it "should_not my_eql('fuga')" do
        "hoge".should_not my_eql("fuga") #1-2
      end
    end
  end
end

module Spec
  module Matchers
    class MyEqlMatcher #2
      attr_reader :expected

      def initialize(expected)
        @expected = expected
      end

      def matches?(actual) #3
        @actual = actual
        @actual.equal?(@expected)
      end

      def failure_message() #4-1
        return "期待は[#{@expected.inspect}]. でも、実績は[#{@actual.inspect}]でした"
      end

      def negative_failure_message() #4-2
        return "期待は[#{@expected.inspect}]でないこと. でも、実績は[#{@actual.inspect}]でした"
      end
    end

    def my_eql(expected) #5
      MyEqlMatcher.new(expected)
    end
  end
end

■解説
#1  マッチャの使い方をデザイン
        "hoge".should my_eql("hoge") #1-1
        "hoge".should_not my_eql("fuga") #1-2

my_eqlのメソッド呼び出しでマッチャオブジェクトが返ってきます。
ここでは、my_eqlとショボイ名前ですが、実際にマッチャを独自定義する際は、
英文を読むように、簡潔でわかり易いメソッド名にするよう気を配ります。
実際のmy_eqlのメソッド定義は #5で行われています。

# マッチャクラスの定義
    class MyEqlMatcher #2
      ...

特に継承関係は必要ありませんが、マッチャクラスを定義する際は次のメソッド
を定義します。
- matches?(actual) #3
- failuer_message #4-1
- negative_failure_message #4-2

# 期待する振る舞いとマッチしたかをチェック
      def matches?(actual) #3
        @actual = actual
        @actual.equal?(@expected)
      end

期待通りの振る舞いならtrue、期待通りでないならfalseを返します.

# 失敗した場合のメッセージを記述
      def failure_message() #4-1
        return "期待は[#{@expected.inspect}]. でも、実績は[#{@actual.inspect}]でした"
      end

      def negative_failure_message() #4-2
        return "期待は[#{@expected.inspect}]でないこと. でも、実績は[#{@actual.inspect}]でした"
      end

failser_messageは should, nagative_failuer_messageは should_notで失敗
した場合にメッセージが表示されます。#1-1, 1-2でわざと失敗するように変
更して、エラーメッセージを確認してみてください。

■おわり
独自マッチャを定義する方法について、簡単に学習しました。
単調に繰り返し似たようなマッチャを書いている場合や、細かいeql等でつまり
何を期待する振る舞いかがはっきり読み取れない場合に、独自マッチャを使って
簡潔にわかりやすく書けるようにデザインします。

マッチャ定義の例としては、RailsやMerbといったWebフレームワークのコント
ローラーテストで be_missing や respond_successfully や redirect_to など
といった、Webフレームワーク特有の期待する振る舞いを、簡潔にわかりやすく
Specを書けるように、マッチャ定義を用意しています。
http://www.merbivore.com/documentation/merb-core/head/index.html?a=C00000158&name=Rspec#
(IENAGA)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E006-29&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E006-29&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E006-29&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■━
■
┗【コラム】僕の営業日記 [3]
            やり始めることの重要性

こんにちは、Hiroshiです。今回も、僕が営業をしている中で体感したことを
みなさんと共有できればと思います。

ここ数年、お客様から「平鍋さんに、現場を活性化させる(見える化、PF等)の
講演をやってもらいたい」というご要望を多くいただいています。今回は、そ
の講演後に呼んでいただく懇親会の雰囲気から、現場を活性化させる為のポイ
ントだな、と感じたことをご紹介したいと思います。

先日、あるお客様での平鍋の講演に同行してきました。電子機器メーカーであ
るそのお客様は、システム開発部門の現場活性化に向けて、改善事例発表会を
催されていました。その締めとして平鍋の講演が位置付けられていました。参
加者は130名で、ざっと見たところ、30代前後の方とそれ以上の方が半々位で
した。講演が始まり、平鍋の現場感あふれる話に会場全体で反応していただき
盛況の内に終了しました。その後には、懇親会が設けられており、経営職、管
理職、若手リーダー、地方事業所、都内事業所の方々が分け隔てなく、現場の
悩みや、今後の改善の進め方について熱い議論を交わしています。僕も、その
輪に入れていただき話を聞いていました。その話の中から、活性化成功のポイ
ントを勝手にまとめてみました。

 ・皆(管理職、若手リーダー)が、なんとか職場を楽しくしたいと思っている
 ・トップダウンとボトムアップの相乗効果で盛り上げている
 ・何か楽しそうだな、ということで、簡単なことからやり始めている

なんとか現場を楽しくしたいという気持ちが皆にあることが重要です。管理職
の方は、ボトムアップで何か出てこないかなという待ちの状態にならず、自ら
率先して見える化を推進しています。また、若手リーダーの方は、その雰囲気
を感じて協力し、ついに、ボトムアップでよい意味で勝手に走るようになって
いました。最初は簡単なことから始め徐々にお互いがその流れに乗っていく、
そうしていく中で周りを変えている、ということをやっているのです。

簡単なことでもいいので、やり始めなければ何も始まらないということを改め
て感じました。僕もそれに喚起され、会社で何か始められればな、と思い立ち
ました。みなさんが何か始めるきっかけにこの話がなれば幸いです。(Hiroshi)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=H006-2&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=H006-2&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=H006-2&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■ 
■
┗【アンケート】気になるシステム業界 ホントのところ

今週は「メタボ対策してますか?」のホントのところ。
メタボリックシンドローム検診が厚生労働省より義務化されましたが、みなさ
んメタボの心配はないでしょうか?万年ダイエッターのナガタは今日もバラン
スボールに乗っていますが、長年の不摂生からきた脂肪はなかなかしぶとくて
・・・えーん><

  食事に気をつけて対策してます!
     http://www.ObjectClub.jp/special/kininaru/vote?vol=211&choice=0
  運動で対策してます!
     http://www.ObjectClub.jp/special/kininaru/vote?vol=211&choice=1
  特に対策はしてないけどメタボではないです♪
     http://www.ObjectClub.jp/special/kininaru/vote?vol=211&choice=2
  メタボですが何も対策してないです・・・。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=211&choice=3
  メタボ検診の結果次第で対策します。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=211&choice=4
  それは秘密です。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=211&choice=5
  ちょっと語らせて!
     詳細をこのメールに返信ください!!

アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「朝会で良く話すことは?」の結果は公開中。ぜひご覧下さい。
⇒http://www.ObjectClub.jp/special/kininaru/vol210/PlonePopoll_results2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
■
┗編集後記

こんにちは!ナガタユウコです。暑いことを言い訳に、連日ビールを飲んだり
クーラーをつけたまま寝たりしていたら、案の定体調を崩し、自分のマヌケさ
に呆然としました・・・。まだまだ暑い日が続きますが、みなさんも体調管理
には十分お気をつけくださいね。
来週のメルマガはお盆ということでお休みさせていただきます。次回の発行は
8月20日。夏休みでリフレッシュした執筆陣による記事をお届けしたいと思い
ますので、どうぞよろしくお願いします♪(ナガタユウコ)

今週の強引な一言
*** 「ええ。プロよりアマチュアの方が面白い作戦を考えるものです。
      それをコンピューターの記憶バンクから拾いだす...」 ***
                                           (マチルダ・アジャン)

時と場合によっては、変に知識を持っている人よりも逆に多くは知らない方が
既存のやり方に捕らわれず、ブレイクスルー的な手法を思いつくことがありま
す。重要なのはフィードバックで、フィードバックループが機能していれば、
自由闊達な意見が出ている方が、より健全な感じがします。
システム開発だって正しいやり方が確立されているわけではないのですから、
経験の多寡にとらわれることなく自由な発想で取り組んでいきたいものです。
出典:機動戦士ガンダム第14話(dot.)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
● ご意見、ご感想は         ⇒このメールに返信ください
〇 配信中止、アドレス変更は ⇒http://www.ObjectClub.jp/community/object_ml/help/
〇 免責事項、過去の記事は   ⇒http://www.ObjectClub.jp/community/object_ml/
■ 発行:オブジェクト倶楽部 ⇒http://www.ObjectClub.jp/
Copyright (c)2003-2008 オブジェクト倶楽部. All Rights Reserved.
powered by Eiwa System Management, Inc.