Date:  Wed, 16 Feb 2005 12:30:11 +0900
Subject:  【オブジェクト倶楽部: 2005-06号】

       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
       ┃                         ■┃
      ●┃● ● オ ブ ジ ェ ク ト 倶 楽 部   ■ ┃
       ┃                       ■  ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
                          No.81 2005/02/16

■ I N D E X
┃
┣【Topics】モデリングコンテスト 投票受け付け始まりました!
┣【プログラミング】Rubyで進むオブジェクトの道 〜脱初心者をめざして〜[2]
┣【キーワード】知ってるようで分からないビジネスワード勉強会[16]
┗【アンケート】気になるシステム業界 ホントのところ

〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
 〇  モデリングコンテスト 投票受け付け始まりました!
  〇 〇━━━━━━━━━━━━━ ━━・ 

一昨日の14日月曜日に、モデリングコンテストの応募作品が出揃いました。な
んと合計32件の作品を応募していただきました。参加いただいたみなさん、あ
りがとうございます!これから今週いっぱいが、投票期間となります。今まで
参加していなかった方も、これだけの数のモデルが揃うのはめったにないチャ
ンスです。作品を眺めて、優秀作品を自分の手で選んでみませんか?投票の方
法はこちらから。
http://www.ObjectClub.jp/community/modeling/modeling_contest/
 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━1 s t ■━
■
┗【プログラミング】Rubyで進むオブジェクトの道 〜脱初心者をめざして〜[2]

●はじめに
プロの中のプロのデベロッパは、プログラム言語を学ぶ際に、"HelloWorld"の
次は、UnitTestを使ったテストファーストを試すそうです。

テストファーストは、XPのプラクティスとして紹介されたもので、以下の手順
でプログラミングするのが特徴です。
===========================================
・まずテストプログラムを書く
・テストを実行して失敗することを確認する
・テストをパスする製品プログラムを書く
・テストを実行して成功することを確認する
・上のステップを小さく繰り返す。                                    
===========================================
現在では、テストファーストを発展させた体系化手法をTDD[1]と呼んでいます。

そこで今回は、テストファーストを[2]を参考にRubyの場合どのように行うかを
確かめ、テストファーストのポイントを探ってみたいと思います。また、初め
て、Rubyのソースコードを見る人も多いと思いますので、文法について適宜、
説明を加えていきます。

まだRubyの実行環境が整っていない方は、前回の記事を参考にしてください。
http://www.objectclub.jp/ml-arch/magazine/81.html

●テストプログラムを書く
まずはテストプログラムを書いてみましょう。今日は簡単な例として、長方形
の面積を計算してくれる、長方形クラスのテストプログラムを書きます。

---< rectangle_test.rb >----------------------------------------------
require 'test/unit'
require 'rectangle'

class RectangleTest < Test::Unit::TestCase
  def setup
    @rectangle = Rectangle.new
  end

  def test_area
    @rectangle.width = 3
    @rectangle.length = 4
    assert_equal(12, @rectangle.area )
  end
end
----------------------------------------------------------------------

文法の説明
・ライブラリの読み込み
----------------------------------------------------------------------
require 'test/unit'
----------------------------------------------------------------------
「require」メソッドを使ってライブラリを読み込むことができます。Ruby1.8
なら標準でRubyのテストライブラリがついてきます。
#いいですね。Unitテストのライブラリが標準でついてくるなんて。

・クラス、継承
----------------------------------------------------------------------
class RectangleTest < Test::Unit::TestCase
・・・
end
----------------------------------------------------------------------
「class」キーワードを使ってクラスを定義します。クラスの終了は「end」に
なります。「<」を使って継承します。

・メソッド
----------------------------------------------------------------------
def setup
・・・
end
----------------------------------------------------------------------
メソッドは 「def」を使って書きます。メソッドの終了は「end」です。Rubyで
は、classやmetodのほかに、制御構造なども「end」を使って終了を示します。

・インスタンス変数、インスタンス生成
----------------------------------------------------------------------
@rectangle = Rectangle.new
----------------------------------------------------------------------

のように先頭が「@」ではじめることでインスタンス変数になります。クラスか
らインスタンスを生成するには、「new」メソッドを使います。
ちなみに、
 「$」で始まる変数はグローバル変数
 「@@」で始まる変数はクラス変数
です。
#ほう!「@」って癖があるけど、慣れればこっちのほうが見分けやすいなぁ

▲テストを先に書くポイント
私たちがテレビを見たいとき、テレビの複雑な内部がどのように動作している
か(How)より、何のボタンを押したらテレビが何をしてくれるか(What)のほうが
ずっと知りたいことです。
同様にRectangleクラスの利用者にとっては、Rectangleクラスの内部の実装の
詳細より、Rectangleクラスが何をしてくれるかのほうがずっと重要なことです。

「テストを先に書き、実装者の視点ではなく、利用者の視点でわかりやすいよ
うにと意識してプログラミングする」がテストファーストの1つ目のコツになり
ます。(参考:意図によるプログラミング[3])

●製品プログラムを書く(面積計算は未実装)
ここでは、長方形の縦と横は準備して面積計算の実行に失敗するプログラムを
書いてみましょう。

---< rectangle.rb >--------------------------------------------------
class Rectangle
  attr_accessor :width, :length
  def area
  end
end
---------------------------------------------------------------------
文法の説明
----------------------------------------------------------------------
attr_accessor :width, :length
----------------------------------------------------------------------
attr_accessorを使うとインスタンス変数の宣言とそのアクセサメソッド(ゲ
ッター・セッター)を自動的に準備してくれます。
#実にシンプル!

またRubyには「attr_accessor」のほかに、
・「attr_writer」で変更のみ(セッター)
・「attr_reader」で参照のみ(ゲッター)
が用意されています。

●テストに失敗することを確認する(面積計算ができていない)
-----< コマンドプロンプト >-------------------------------------------
$ruby rectangle_test.rb
Loaded suite rectangle_test
Started
F
Finished in 0.03 seconds.

  1) Failure:
test_area(RectangleTest) [rectangle_test.rb:11]:
<12> expected but was
<nil>.

1 tests, 1 assertions, 1 failures, 0 errors
----------------------------------------------------------------------
テストに失敗しました。Rubyならテストケースの実行に関する記述(main)が
なくてもテストが実行できます。

ここでは、
 「長方形の計算結果を12と期待してたけど、nilが返ってきたよ。」
とテスト失敗の画面は私たちにメッセージを送っています。面積計算の実装を
直しましょう。

▲テスト失敗のポイント
テスト失敗画面が私たちに次に何をしたらよいかを教えてくれています。「テ
ストを失敗して、問題を顕在化し、それを直すと意識してプログラミングする」
がテストファーストの2つ目のコツです。

---< rectangle.rb >---------------------------------------------------
class Rectangle
  attr_accessor :width, :length
  def area
    width * length
  end
end
----------------------------------------------------------------------

●テストの実行
-----< コマンドプロンプト >-------------------------------------------
$ruby rectangle_test.rb
Loaded suite rectangle_test
Started
.
Finished in 0.0 seconds.

1 tests, 1 assertions, 0 failures, 0 errors
----------------------------------------------------------------------
テストをパスしたようです。ここで小さくガッツポーズをとりましょう!

▲テスト成功のポイント
「テスト成功で小さな達成感を感じながらプログラミングする」がテストファ
ースト3つ目のコツです。(参考:達成感[4])

●おわりに
テスト失敗→成功を繰り返して、あなたの心に耳を傾けてください。きっとプ
ログラミングについて「何か」新しい発見があるでしょう!

ではでは。(IENAGA)

参考
[1] TDD(Test Driven Development):テスト駆動開発
    書籍に「テスト駆動開発入門」 ケントベック著がある。
    http://amazon.co.jp/o/ASIN/4894717115/xp-jp22
[2] RubyのUnitテストのリファレンス
    http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=Test%3A%3AUnit
[3] 「意図によるプログラミング」(programming by intention)
    XPエクストリーム・プログラミング導入編 p139〜158
    http://amazon.co.jp/o/ASIN/4894714914/xp-jp22
[4] 「達成感」
    XPエクストリーム・プログラミング導入編 p59〜62
______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/cgi-bin/question.cgi?E006+1+0
普通:
http://www.ObjectClub.jp/cgi-bin/question.cgi?E006+1+1
イマイチ:
http://www.ObjectClub.jp/cgi-bin/question.cgi?E006+1+2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2 n d ■━
■
┗【キーワード】知ってるようで分からないビジネスワード勉強会[16]

こんにちは、hiroshiです。今回は「PoE(Power over Ethernet)」についてご
紹介します。

まだ、聞きなれない言葉かもしれませんが(僕もつい最近までは知りませんで
した)、最近PoE対応という言葉のついたネットワーク機器を目にするようになっ
ているかと思います。ここでは、PoEって何なの?、何に応用できるの?といっ
たことを紹介したいと思います。

PoEとは何なのでしょうか。それは、イーサネットのLANケーブルを使い、ほか
のLAN機器に電力を供給して動かすための技術です。「Powered Ethernet」 
「Inline Power」「Active Ethernet」など、いくつかの呼称があります。

それでは、何に応用できるのでしょうか。上記で説明したように「PoE」に対応
した機器は、LANのポートを電源コンセントの代わりに使えるようになります。
応用が期待されている機器は以下です。
・IP電話
・無線LANのアクセスポイント
・Webカメラ

通常のビジネスフォンや一般加入電話は電話線から電力を受けているのに対し
て、現在普及しているIP電話は、イーサネットから電力を受けることができま
せん。したがってイーサネットの配線に加えて、電源ケーブルも用意する必要
がありました。一般電話は、電話回線から電力の供給を行っている為、停電時
にも連絡を取れるというメリットがあります。非常時のライフラインの確保と
いう意味では、これまでIP電話が一般電話にかないませんでした。しかし、PoE
を利用することで、IP電話はLANケーブルの接続のみで、ネットワークへの接続
と電源の供給が実現でき、低コストで安定したネット環境が構築できます。

さらに無線LANには、オフィスのレイアウト変更の影響を受けないというネット
ワーク敷設面のメリットがありますが、アクセスポイント自体は見通しのよい
場所、つまり天井付近などの高い場所に設置することが望まれます。また、監
視カメラもやはり高い場所への設置が必要と考えられます。こうした場所に電
源を設置するのは、それだけで労力とコストのかかることになります。そこで
PoEを用いればイーサネットケーブルのみでデータの送受信と電源供給がまかな
えるため、従来のような電源確保の問題が解消され、自由かつ低コストでのネッ
トワーク構築が可能になるのです。まとめると、非常時にも使用可能になった
ことによる「安全性」危機の設置コストを削減できたことによる「低コスト化」
がPoEのメリットとなります。

Ethernetケーブルを使って電源を供給できるこのPoE技術は、2003年6月12日、
「IEEE802.3af-2003」標準規格として、LAN規格の標準化団体であるIEEE Standard
Boardにより承認されました。標準規格化されたことで、ネットワークにつなが
るすべてのIT機器が必要とする電源環境に、今後大きな変革をもたらすと期待
されています。このような広く一般的となってきたネット環境がPoEのインフラ
を使用することでさらに進化したサービスが生まれる可能性を感じています。
(hiroshi) 
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/cgi-bin/question.cgi?D001+15+0
普通:
http://www.ObjectClub.jp/cgi-bin/question.cgi?D001+15+1
イマイチ:
http://www.ObjectClub.jp/cgi-bin/question.cgi?D001+15+2
 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━3 r d ■━
■
┗【アンケート】気になるシステム業界 ホントのところ

今週は「バレンタインにチョコをいくつもらいました/あげました?」のホント
のところ。つい2日前のバレンタイン。贈り手、貰い手、どちらの立場での回答
でもかまいませんよ。
  10個以上!
     http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+45+0
  5〜9個。
     http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+45+1
  2〜4個。
     http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+45+2
  1個。
     http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+45+3
  0個。。
     http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+45+4
  バレンタインなんて知りません。。
     http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+45+5
  それは秘密です。
     http://www.ObjectClub.jp/cgi-bin/question.cgi?Z001+45+6
  ちょっと語らせて!
     editors@ObjectClub.jp まで詳細を!!

アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「眼鏡かけてますか?」の結果は公開中。是非ご覧下さい。
⇒http://www.ObjectClub.jp/special/kininaru
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
■
┗編集後記

こんにちは、編集人です。今朝、関東地方を中心に起こった地震は強かったで
すね。私は飛び起きました。みなさん、ご無事でしたか?スマトラ沖地震にし
ろ、新潟中越地震にしろ、地震による被害が大きいのが事実です。災害対策を
本格的に考えないといけないのかもしれませんね。

今週の強引な一言
*** 片口聞いて公事を分くるな(ことわざ)***
身近にいる人の話だけを聞いてことを進めるのではなく、利害関係者の意見を
よく聞いてから、判断をしたほうが、結局手戻りが少なくなりますよね。
(さとみ)

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