Date:  Wed, 06 Sep 2006 15:09:34 +0900
Subject:  【オブジェクト倶楽部: 2006-33号】
X-Mail-Count: 00160

       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
       ┃                         ■┃
      ●┃● ● オ ブ ジ ェ ク ト 倶 楽 部   ■ ┃
       ┃                       ■  ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
                          No.154 2006/9/6

■ I N D E X
┃
┣【Topics】XP祭り2006の感想です。
┣【Topics】腰リールメモが日経の雑誌2誌で紹介されました!
┣【書評】『Agile Retrospectives: Making Good Teams Great』
┣【プログラミング】Cayenneで始めるO/Rプログラミング[3]
┗【アンケート】気になるシステム業界 ホントのところ

〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
 〇 XP祭り2006の感想です。
  〇 〇━━━━━━━━━━━━━ ━━・ 
去る9月2日(土)に開催されたXP祭り2006ですが、オブジェクト倶楽部メンバー
も発表者、スタッフ、参加者として大活躍でした。
当日参加した一部メンバーの感想を紹介します。

「トークスで106枚はやりすぎだと思った。コンテストは不完全燃焼だったので
どこかで雪辱したいです」(かくたに)

「今年も熱い祭りでした。スタッフとして参加すると3倍楽しめますよ。コンテ
ストは企画からリベンジしたい!」(やっとむ)

「みなさんと話ができて、変わるための勇気がでました。がっしゅ!」(平鍋) 

「劇団ペケぴーでナレータ、チュートリアルで講師、ライトニングトークスの
司会と、大活躍させてもらい、燃えきった一日でした。ペケぴーのシナリオを
公開しました。」(天野勝)
http://www.objectclub.jp/community/XP-jp/xp_press/pekep/

「当日にカッとなって初ライトニングトークスさせていただきました。今回は
62/69枚で銅鑼がなってしまいましたので、次の機会があれば1トークきっちり
語り終えたいです。」(伊藤)

「事例発表をしました。XP祭りのような大舞台に出させていただき、夢のよう
でした。たくさんのエネルギーをもらった1日でした。」(木下史彦)

「劇団ペケぴーの団員として大勢の前で寸劇をやらせてもらいました。皆で持
ち寄ってのワールドパブ最高でした!!」(かじた)

「久しぶりに熱いエナジーを感じました!XP祭り、やっぱいいですねぇ♪」
(IENAGA)

★なお、XP祭り関西2006は9月30日(土)、『ワッハ上方』にて開催しますよ!
http://xpmaturi-kansai.org/top.html

〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
 〇 腰リールメモが日経の雑誌2誌で紹介されました。
  〇 〇━━━━━━━━━━━━━ ━━・ 
大人気連載のアジャツール記事でも紹介している腰リールメモですが、9月4日
発売の「日経トレンディ」と9月5日発売の「日経ビジネスアソシエ」でそれぞ
れ紹介されています。

特に「日経ビジネスアソシエ」では懸田さん本人の写真もバッチリ掲載されて
います!ぜひみなさんもご覧ください。

「日経トレンディ10月号」
http://www.nikkeihome.co.jp/2f/trendy/index.html

「日経ビジネスアソシエ 2006年9月19日号」
http://bpstore.nikkeibp.co.jp/mokuji/nba104.html

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━1 s t ■━
■
┗【書評】『Agile Retrospectives: Making Good Teams Great』

● 書 名: 『Agile Retrospectives: Making Good Teams Great』
● 著者名: Esther Derby, Diana Larsen
● 発 行: Pragmatic Bookshelf Series
   http://www.amazon.co.jp/o/ASIN/0977616649/xpjp-22

"Pragmatic Programmers"シリーズのこの本は、平鍋が提唱するプロジェクト
ファシリテーション(PF)でも一つのプラクティスとなっている「ふりかえり」
(Retrospective)を効果的に行う方法を「体系的に」しめしたものです。

ぼくは、PFの中のふりかえりの手法としてKPT(Keep/Problem/Try)とTimelineを
よく紹介しますが、外にも沢山のアクティビティがあります。この本では、ふ
りかえりミーティングの全体ファシリテーションをする、という設定で、場の
作り方から、アジェンダの作り方、そして、それぞれのアクティビティの紹介
を行っています。

まずは、ふりかえりミーティング全体の流れを5つに分割します。
この分割の視点がすばらしいと思いました。これは、一般ファシリテーション
技術をうまくアジャイル開発のコラボレーションに活かしているといえるでしょ
う。

1.場を設定する(Set Stage)
2.データを収集する(Gather Data)
3.アイディアを出す(Generate Insight)
4.何を実際にやるか決める(Decide What to Do)
5.クロージング(Close the Retrospective)

の流れです。そして、5つのそれぞれにいくつか使えるアクティビティを紹介し
ています。

例えば、場の設定には、「Check-In」(これはぼくも好き)や「Focus On/Focus 
Off」、データの収集には、「Timeline」(これも好き)、アイディア出しには
「Fishbone」、「Patterns and Shifts」という具合です。AlistairのKPTが紹
介されていないのが残念ですが、ぼくが知らない多くのアクティビティがこの
本には書かれています。
KPTの亜流として、Keep/Drop/AddやWWWDD(What Worked Well/Do Differently)
が含まれます。

ぼくのまわりでは、ふりかえりにおいて「KPT」をよくやっていますが、常々、
最初うまくミーティングが活性化しない、という問題を感じていました。いき
なりのKPTは難しく、全員が安全に感じる場の設定(何のためにぼくらはここに
集まっている?どこまで話をしていい?グランドルールは?)とデータの収集を
やる必要があったのだ。
そして、そこからアイディアを出していく。

また、クロージングでは、「ふりかえりに対するふりかえり」をしたり、ファ
シリテータが「もっと私がうまいファシリテータになるためには、どうしたら
いいでしょうか?」という質問をみんなにする。また、ROTI(Return On Time 
Invested)では、使った時間に対する効果がちゃんとあっただろうか?という
自問自答をしてみる。これも、今後のふりかえりをカイゼンしていきますし、
ファシリテーションスキルも向上できます。

とてもいい本でお勧めです。
なお、この本の個人的なマインドマップ以下に公開します。著者や、参考文献
に含まれている人たちとの関係がわかります。
http://jude-users.com/en/modules/weblog/details.php?blog_id=13 
(平鍋)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=A001-13&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=A001-13&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=A001-13&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2 n d ■━
■
┗【プログラミング】Cayenneで始めるO/Rプログラミング[3]

先日Appleの取締役にGoogleのCEOでもあるEric Schmidtが加わりました。デス
クトップに関して言うとデスクトップサーチvsスポットライト、グーグルデス
クトップvsウィジェットといった具合に結構似たような事をやってますよね。
まぁ相乗効果でよい方向に向かってくれれば良いなぁとは思っています。

さて前回はテーブルからJavaのソースコードを自動生成するところまで紹介し
ました。今回は実際にテーブルを操作してみましょう。
何はともあれデータが入っていないと何もできないので、今回はデータを登録
するプログラムから考えてみます。まずビデオの登録クラスを考えてみます。
なお前回までに作成したファイルは以下のようなツリーで格納してください。

 src
  +-- com\video\model\
         +-- Lending.java
         +-- Member.java
         +-- Video.java
  +-- com\video\model\auto
         +-- _Lending.java
         +-- _Member.java
         +-- _Video.java
  +-- cayenne.xml
  +-- VideoRentalSystemNode.driver.xml
  +-- VideoSystemMap.map.xml

/**
  * ビデオ登録クラス
  */
public class VideoRegister {
     DataContext context;

     public static void main(String[] args) {
         VideoRegister regist = new VideoRegister();
         regist.init();
         regist.main();
         regist.end();
     }
・・・・
}

ビデオを登録するクラスをVideoRegisterとします。今回の例ではメンバ変数
contextとinit、main、endという3つのメソッドを持つクラスを作ります。
contextとはCayenneのDataContextクラスのインスタンスです。Cayenneを使う
アプリケーションでは、DataContextはすべてのCayenne機能への主なユーザ・
アクセス・ポイントになります。DataContextはオブジェクトの状態管理やSQL
実行機能も持っています。では早速initの実装から見てみましょう。

     private void init() {
         context = DataContext.createDataContext();
     }

initメソッドではcontextの初期化を行います。DataContextはcreateContextメ
ソッドで簡単に初期化することができます。
次は実際にmainメソッドでVideoの内容を入力して登録してみます。

     private void main() throws IOException {
         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
         Video video = (Video)context.createAndRegisterNewObject(Video.class);
         System.out.print("ビデオID:");
         video.setObjectId(new ObjectId("Video", Video.ID_PK_COLUMN, reader.readLine()));
         System.out.print("タイトル:");
         video.setTitle(reader.readLine());
         reader.close();
     }

このmainメソッドでは、標準入力からビデオIDとタイトルを入力してVideoオブ
ジェクトを作るという一見普通のソースです。
ここで違うのはVideoのインスタンスを作るのにcreateAndRegisterNewObjectメ
ソッドを使うことです。Cayenneでは新しいオブジェクトを生成するにはnewで
なくこのメソッドを使ってオブジェクトを生成します。
次に見慣れないのがsetObjectIdというメソッド。Cayenneでは主キーに設定し
た列のget/setメソッドが自動生成されない事に気づいた方もいるかもしれませ
んが、主キーはあくまでデータをユニークに識別するためのもので、意味を持っ
ていないという思想に基づいて作られているためです。オブジェクト指向DBの
中には同様に主キーは自動生成される一種のシリアライズIDとして実現されて
いるものがあります。Cayenneはこの考え方に近く、主キーは自動生成が推奨さ
れています。またそのための仕組みも用意されています。
そこで主キーを自ら設定するにはちょっと工夫が必要になります。ObjectIdの
オブジェクトを生成してsetするのですが、パラメータは"Video"エンティティ
の主キーカラムVideo.ID_PK_COLUMN、値はreader.readLine()であるという定義
と理解してください。
最後にendメソッドですが、

     private void end() {
         context.commitChanges();
     }

これで終わりです。commitChangesメソッドはcreateDataContext以降でcontext
に加えられた変更を有効にするというオマジナイです。Connectionの取得は?
INSERT文は?などJDBCを使ってプログラミングをした人なら不思議に思うでしょ
う。何より動かしてみればわかります。早速ビデオ登録クラスを実行してみま
しょう。登録データはID「100」、タイトル「紅の豚」[*1]とします。

INFO  QueryLogger: Created connection pool: jdbc:mysql://localhost/sample
	Driver class: com.mysql.jdbc.Driver
	Min. connections in the pool: 1
	Max. connections in the pool: 1
ビデオID:100
タイトル:紅の豚
INFO  QueryLogger: Opening connection: jdbc:mysql://localhost/sample
	Login: ------
	Password: *******
INFO  QueryLogger: +++ Connecting: SUCCESS.
INFO  QueryLogger: Detected and installed adapter: org.objectstyle.cayenne.dba.mysql.MySQLAdapter
INFO  QueryLogger: --- will run 1 query.
INFO  QueryLogger: --- transaction started.
INFO  QueryLogger: INSERT INTO video (id, title) VALUES (?, ?)
INFO  QueryLogger: [bind: '100', '紅の豚']
INFO  QueryLogger: === updated 1 row.
INFO  QueryLogger: +++ transaction committed.

どうです?ちゃんと実行できていますね。このログからソースコードと実際に
マッピングして理解を深めたいと思います。
DataContext.createDataContext();は
INFO  QueryLogger: Created connection pool: jdbc:mysql://localhost/sample
の部分に対応しています。つまりcreateDataContextはコネクションプールを生
成していると思ってください。

次にcontext.commitChanges();が
INFO  QueryLogger: Opening connection: jdbc:mysql://localhost/sample
から最後までを実施しています。つまりコネクションを取得して、contextにあ
る変更されたオブジェクトを永続化する役割を持っています。
今までのJDBCプログラミングでは、私たちは以下のようなソースを書いてきま
した。

   Connecntion conn = datasource.getConnection();
   String sql = "INSERT INTO video (id, title) VALUES (?, ?)";
   PreparedStatement ps = conn.prepareStatement(sql);
   ps.setObject(1, "100");
   ps.setObject(2, "紅の豚");
   ps.executeUpdate();
   conn.commit();

あまり記述量に差はないように見えますが、SQL文とそれに対応する値をマジッ
クナンバーで記述しなければなりませんでした。テーブルの変更に伴うSQLの変
更は注意深く行う必要がありました。しかしO/Rマッパーを使ってプログラミン
グすることで、これらの注意はコンパイルエラーという形で「見える」ことに
なりました。例えば列名が変更になったとき、titleがnameに変わったとすると、
従来はコードでtitleが使われている所を探して文字列を変更する必要がありま
した。しかしO/Rマッパでは自動生成されたクラスが変わります。setTitleとい
うメソッドがなくなりコンパイルエラーとなるので、修正箇所を探す必要がな
く漏れもなくなります。また型が変わった時も同様に、setXXXXXメソッドの引
数が異なるためコンパイルエラーとなって「見える化」されます。

さらに単体テストという視点から捉えると、従来はSQL自体のテストや、それに
値が正しくマッピングできているか、JDBCのコーディングは正しいかなど様々
な確認を行う必要があったためDBに格納された値をSELECTし直して確認してい
ました。しかしO/RマッパではSQLやJDBCの部分は全てフレームワークが持って
いるので、この例で言えばmainメソッドの後でVideoオブジェクトの値を確認す
れば良いことになります。例えば

assertEquals("紅の豚", video.getTitle());

といった具合です。
さて話も長くなりましたので、今回はここまでとします。
次回はビデオを探すというサンプルに挑戦してみたいと思います。今回は紹介
できませんでしたが、宿題として会員データの登録クラスを作ってみてくださ
い。今回のビデオ登録クラスのmainの部分が少し変更になるだけですので、簡
単にできると思います。この宿題でより理解を深めておいてください。
(きしだ)

[*1]:紅の豚は、1992年の夏に公開されたスタジオ・ジブリのアニメーション映
     画です。「カッコイイとは、こういうことさ。」がキャッチコピーでした。
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E010-2&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E010-2&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E010-2&choice=2

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

今週は「PFのプラクティス、どれを一番実践してますか?」のホントのところ。
PF(プロジェクトファシリテーション)でも幾つかのプラクティスを紹介してい
ます。最近いろんなプロジェクトで「やってます!」という声を聞く機会が増
えました。さて、皆さんが一番実践されているプラクティスはどれでしょうか?
ぜひ、教えてください。

PFのプラクティスについては、下記のページの「プロジェクトファシリテー
ション プレゼンテーション[最新版]」のドキュメントをご覧ください。
http://www.objectclub.jp/community/pf/

  ふりかえり。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=120&choice=0
  朝会。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=120&choice=1
  バーンダウンチャート。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=120&choice=2
  タスクかんばん。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=120&choice=3
  ペアボード。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=120&choice=4
  にこにこカレンダー。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=120&choice=5
  ソフトウェアあんどん。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=120&choice=6
  だるま。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=120&choice=7
  やってません。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=120&choice=8
  それは秘密です。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=120&choice=9
  ちょっと語らせて!
     詳細をこのメールに返信ください!!

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

こんにちは、編集人です。
気がつけばもう9月。先日、脂の乗った秋刀魚を食べてとても幸せな気分になり
ました。早いですねぇ。プロジェクトマネジメントのシンポジウムに参加して、
時代はいよいよAgileなのか!?とドキドキでした。ソフトウェア開発現場での
取り組みが大多数らしいのですが、様々な業界からも注目されているプロセス
となりつつあるようです。洋書が読めれば今回の書評の本もチェックするのに
なぁ(涙)

今週の強引な一言
*** 曲がらねば世がわたられぬ(ことわざ)***
技術の話になると、つい自分の理想を相手に押し付けてしまうことはありませ
んか?良い意味での信念を通すのも大事なことですが、ただ単にぶつかってし
まう場合は、相手に合わせることも必要です。バラバラのものを作り上げても
意味がありませんよ。 
(上田雅美)

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