Date:  Wed, 12 Jul 2006 14:30:58 +0900
Subject:  【オブジェクト倶楽部: 2006-26号】
X-Mail-Count: 00153

       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
       ┃                         ■┃
      ●┃● ● オ ブ ジ ェ ク ト 倶 楽 部   ■ ┃
       ┃                       ■  ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
                          No.147 2006/07/12

■ I N D E X
┃
┣【Topics】オブラブ2006夏イベント、講演資料追加公開
┣【プログラミング】ゆるーいHaskell[3]
┣【プログラミング】新連載:Cayenneで始めるO/Rプログラミング[1]
┗【アンケート】気になるシステム業界 ホントのところ

〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
 〇 オブラブ2006夏イベント、講演資料追加公開
  〇 〇━━━━━━━━━━━━━ ━━・ 
オブジェクト倶楽部2006夏イベントの講演資料、牛尾氏の「オブジェクトゲー
ム」などを追加して、下記にて公開しています。

http://www.ObjectClub.jp/event/2006summer/session
※畳の画像上の各セッションをクリックしてください。セッション説明内に講
演資料のリンクがあります。

なお、参加レポートはまだまだ受付中です!6th-event-staff@ObjectClub.jp

トラックバックもぜひよろしくお願いします。
http://www.ObjectClub.jp/event/2006summer/comment

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━1 s t ■━
■
┗【プログラミング】ゆるーいHaskell[3]

西川です。いよいよ本格的に暑くなってきました。朝夕の通勤が残業で弱った
体にはツライです。
さて前回にお知らせしたとおり、今回はパターンマッチングとガード節につい
てお話します。まずはパターンマッチングを使ってリストの要素数を数え上げ
る関数listSizeを作ってみます。

- ListSize.hs
listSize [] = 0
listSize (x:xs) = 1 + listSize xs

「(x:xs)」はリストの先頭とそれ以外を表します。xがリストの先頭の要素でxs
がそれよりも後ろのリストです。この場合リストが[1,2,3]なら先頭の1がxにあ
たります。1より後ろの要素[2,3]がxsにあたります。文字列"abcde"ならxが'a'
でxsが"bcde"です。ちょっと分かりにくいでしょうか?ghciを起動して実際に
動かしてみるとすぐに理解できます。

> ghci
(プロンプトが表示されます)
Prelude> 1:[2,3]
[1,2,3]
Prelude> 'a':"bcde"
"abcde"

(:)は1つの要素とリストに取り込んで新しいリストを返す関数です。前回紹介
した(++)や(==)と同じように関数ですので前置することもできます。

Prelude> :t (:)
(:) :: a -> [a] -> [a]
Prelude> (:) 1 [2,3,4]
[1,2,3,4]
Prelude> (:) True []
[True]
Prelude> (:) 'A' ""
"A"

listSize関数の話に戻ります。listSize関数には定義が2つあることに気づきま
す。これがパターンマッチングです。パターンマッチングは上から順に評価さ
れます。1つめの定義では引数が空リストなので要素の数は0ですから、0を返し
ます。2つめの定義ではリストに要素が存在するので1を足して、2番目以降のリ
ストに対して関数listSizeを再帰させます。実行してみましょう。

*Main> listSize [1,2,3,4,5,6]
6
*Main> listSize []
0
*Main> listSize "ABCDEFG"
7
*Main> listSize [[1,2],[3,4,5],[6,7,8,9]]
3

ちなみにlistSizeと同じ振る舞いをするlengthという関数が存在します。パター
ンマッチングはHaskellでは頻出ですのでとても重要なのですが、逆に考えれば
いくらでも出会う機会があるので徐々に慣れていけばいいと思います。

つづいてガード節を紹介します。ガード節を使ってある数字が偶数か奇数かを
判定して結果を出力する関数checkNumberを作ってみます。なんとなくパターン
マッチングで書けそうな気がするんですが、ちょっと考えてみると、パターン
マッチングを使用してある数が偶数か奇数かを判定するのは非常に難しいこと
が分かります。

-CheckNumber.hs
checkNumber x
 | even x = putStrLn ((show x) ++ " is even")
 | otherwise = putStrLn ((show x) ++ " is odd")

このとき「even x」と「otherwise」を関数checkNumberに対するガード節とか
ガード条件とかガードとか呼びます。パターンマッチングと同じように上から
順に評価してガード節がTrueになる場合に右側の定義が使われます。ガード節
はパターンマッチングと一見似ていますが、ガード節では式を書くことができ
るのでパターンマッチングよりももうちょっと込み入った処理を記述すること
ができます。
また初めて見る関数がたくさんでてきましたので、すごく簡単に説明します。
evenは引数が偶数の場合Trueを返す関数です。奇数の場合にTrueを返すoddとい
う関数もあります。showは数字やBoolの文字列表現を返す関数です。otherwise
は予約語でも何でもなくただTrueを返すだけの関数です。ghciで確認してみま
しょう。

Prelude> even 2
True
Prelude> odd 2
False
Prelude> show 2
"2"
Prelude> show False
"False"
Prelude> show otherwise
"True"

CheckNumber.hsをロードして関数checkNumberを実行してみます。

Prelude> :l CheckNumber
Compiling Main ( CheckNumber.hs, interpreted )
Ok, modules loaded: Main.
*Main> checkNumber 3
3 is odd
*Main> checkNumber 10
10 is even

パターンマッチングやガード節は上から順に評価されるのでどのパターンを上
にもっていくか、は非常に重要です。関数checkNumberのガード節を逆転してみ
るとどうなるでしょう?
Haskellには実はif式やcase式が存在しますので、パターンマッチングやガード
節を使わなくてもC言語やJavaなどで慣れ親しんだif文やswitch文に良く似た書
き方で条件分岐を記述することも出来ます。しかし出来るだけパターンマッチ
ングやガード節を使用した方が記述が簡潔になり(文脈にもよりますが)、より
Haskellらしいコードを書くことができると思います。次回はリストについて
お話します。(西川)

_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-2&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-2&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-2&choice=2

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

間もなくWWDC[*1]ですね。ジョブスの基調講演でLeopard[*2]のデモがあるよう
で、夏休みでも利用して行きたい!!と思っていたのですが、キンツー[*3]で
行っても30万円オーバー・・・それならMacBook Pro買えるな、と思い決心がで
きなかった、きしだです。また日本でも昔のようにJDC[*4]やって欲しいですね。

さて、今回から数回に渡ってWebObjectsのEOFに影響を受けたプロダクトでも紹
介したCayenneについて、具体的なプログラム例を使って解説していきたいと思
います。今さらO/Rマッピングかよ!というツッコミもあるかと思いますが、こ
れからJavaでプログラミングする方や、O/Rマッピングに触れる機会がなかった
方、XMLの設定に泣いてきた方に是非とも読んで欲しいです。
Cayenneの最新バージョンは1.2ですが、ネットでの紹介記事は1.0のものがほと
んどです。今回は最新の1.2を使って解説しますので、うまく1.1や1.2へ移行で
きなかった方もご期待ください。

本連載では、少しでもCayenneに興味を持ってもらえれば良いと思っています。
Cayenneについてもう少し触れておくと、呼び方は「カイエン」です。ネットで
名前を検索するとポルシェの車に同じ名前のものがあるため、ポルシェのサイ
トがいっぱいひっかかりますので、情報を探すのは一苦労かもしれません(笑)。
なお日本語訳では「唐辛子」です。山椒は小粒でもピリリと辛いと言いますが、
キレがありそうで良い名前!と勝手に感動しています。最初のアルファリリー
スが2002年、それから4年、着実に進んできています。

さて今回は初回という事で、O/Rマッピングについてご存じない方もいるかもし
れません。O/Rマッピングとは何ぞや?という事を解説したいと思います。

これは文字通り、オブジェクトとRDBをマッピングする技術を指します。なぜこ
のような技術が生まれてきたか?という疑問があるかもしれませんが、まずあ
なたがシステム開発をする際に、どのようなデータベースを使っているか考え
てみてください。

・オブジェクト指向DBを使っている
・XMLDBを使っている
・リレーショナルDB(以降RDB)を使っている

実際のところ、ほとんどの方がRDBなのではないかと思います。つまり永続化す
る先はRDBなのです。しかしプログラム上での扱いは、JavaやC++といった言語
のオブジェクトです。このように異なる構造を扱っている現場がほとんどです。

例えばJavaではオブジェクトを生成するにはnewするだけですが、これを永続化
しようとするとINSERTやUPDATEといったSQLを書かなければなりません。一方DB
から値を取得する際にはSELECT文を書いて検索結果をJavaのオブジェクトにセッ
トしたりとテーブル毎に似たような処理を何度も書き、非常に手間がかかりま
す。もちろんEJBといった技術を使えば別ですが、小規模なシステムで永続化の
ためだけにEJBを採用するということはほとんどないでしょう。そこでアプリケー
ションサーバベンダや開発現場ではフレームワークとして永続化の仕組みを作
成して工数の削減・品質の向上に努めてきました。その成果が今日におけるO/R
マッピングとなったのです。

開発者はJavaやC++のオブジェクトに値をセットするだけで、SQL文を意識(記述)
することなく、永続化や照会ができるようになりました。つまりO/Rマッピング
フレームワークを使うことで、永続先がRDBという事を意識せずに、オブジェク
ト指向DBを使っているかのように、プログラムを記述することができるように
なったのです。また、オープンソースや商用の著名なフレームワークともなる
と経験者も多く、開発作業がスムーズに進む事が期待できるものも多数ありま
す。日本で有名なO/RマッパーはHibernateでしょう。名前だけ聞いたことがあ
る、実際に使ったことがあるという人をあわせると、かなりの人数になると思
います。ただ失敗談をよく耳にするのも事実です[*5]。その多くがXMLによる設
定であると聞きます。

今回紹介するCayenneは、XMLの設定はすべてGUIのモデラーによって実現されて
います。RDBのマネージャアプリケーションを使っているのと同じ操作性で、RDB
とオブジェクトのリレーションから、クラスの生成まで自動化されます。この
ため、初めてO/Rマッピングに挑戦する開発者に理解を深めてもらうのには最適
と考えています。また、Cayenneが他のO/Rマッパーと違う大きなポイントをあ
えてあげるのなら、多対多の関連(リレーション)をマッピングできることです。
意外ですが、多対多の関連をサポートしているO/Rマッパーは非常に少ないので
す。

聞きなれないフレームワークはちょっとな・・・と思われる方もいるかもしれ
ませんが、実際にCayenneを使ってみると病みつきになります。現に私は、現在
担当しているプロジェクトで使っているのですが、もはやCayenneなしの開発は
考えられないと思うぐらいハマっています。

今回はここで終了ですが、次回以降プログラムを交えて解説します。本シリー
ズはCayenneが他のO/Rマッパーと比べてこんなに凄い!とかいう趣旨ではなく、
あくまで初めてのO/Rマッピングです。他のO/Rマッパーとのコード比較などの
予定はありませんが、既に何か使ったことがある方なら、どちらが良いか判断
できるのではないかと思います。なお連載に興味を持っていただいた方は、あ
なたのPCにRDBのソフト[*6]、J2SE[*7]、エディタかSDK、そしてCayenne[*8]を
インストールして楽しみに待っていて下さい。(きしだ)

[1]:Worldwide Developers Conferenceの略。Appleが主催する世界開発者会議
     です。

[2]:Mac OSX 10.5のコードネーム。2006年末か2007年初に出ると言われていま
     す。

[3]:近畿日本ツーリストの略。一部地域では「キンツリ」とも呼ばれているら
     しいのですが、皆様の周りではどんな略称を使っているのでしょうか?

[4]:Japan Developers Conferenceの略。1997年まで日本版として開催されて
     いました。JDCが終了した1998年から、WWDCで唯一日本語への同時通訳が
     あったのですが、2005年より英語のみの開催となっています。

[5]:もちろん多くの成功例も聞くからこそ、著名になったことは間違いありま
     せん。決して批判的な目的ではありませんのでご了承ください。

[6]:CayenneはJDBCドライバにより、ほとんどのデータベースに対応しますが、
     DB2,Firebird,HSQLDB,MySQL,OpenBase,Oracle,PostgeSQL,SQLserver,Sybase
     のいずれかの利用が推奨されます。

[7]:今回の連載ではJ2SE 5.0のコードスタイルでサンプルを記述しますので
     J2SE 5.0のインストールをお勧めいたします。

[8]:http://objectstyle.org/cayenne/
     がオフィシャルサイトになります。1.2のドキュメントはHP上から辿るの
     はわかりにくいのですが、
     http://objectstyle.org/cayenne/download.html
     からCayenne 1.2RC2をダウンロードすると1.2のドキュメントが含まれて
     います。
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E010-0&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E010-0&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E010-0&choice=2

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

今週は「海外、プライベートで何ヶ国行ったことがありますか?」のホントの
ところ。そろそろ夏休みシーズンが近づいてきました。毎年長い休みにはたく
さんの人が海外に出かけるのをテレビなどで見かけますが、この業界、みなさ
んどれくらい出かけてるのでしょうか?仕事で出張なら、という人もいると思
うので、ここではプライベート限定でお聞きしたいと思います。プライベート
の基準は...基本は自分でお金を出していること。ただし社員旅行は微妙な
ラインなので、含んでOKです。数は行った当時の国家で数えてくださいね。

  31ヶ国以上。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=113&choice=0
  21〜30ヶ国。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=113&choice=1
  11〜20ヶ国。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=113&choice=2
  8〜10ヶ国。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=113&choice=3
  6〜7ヶ国。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=113&choice=4
  4〜5ヶ国。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=113&choice=5
  2〜3ヶ国。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=113&choice=6
  1ヶ国。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=113&choice=7
  0ヶ国。日本から出たことはありません。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=113&choice=8
  それは秘密です。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=113&choice=9
  ちょっと語らせて!
     editors@ObjectClub.jp まで詳細を!!

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

こんにちは、編集人です。イベントもサッカーのワールドカップも終わり、な
んだかすっかり燃え尽きた気分です。でも、そうこうしているうちにもうすぐ
梅雨明け、暑さに備えてスタミナを蓄えないとですね。
イベントでは参加者のみなさんに、各プログラムごとやイベント全体のKPT(Keep,
Problem,Try)を、ふせんに書いて貼っていただきました。それは現在、このオ
フィスの「和ジャスペース」と呼ばれる畳スペースの壁にそのまま貼りだして
います。その内容を眺めつつ、先週スタッフによるふりかえりを早速実施しま
した。和ジャスペースといえば、イベントでライトニングトークスのベストトー
カー賞を選ぶのに使用した、碁石のセットがさりげなく置かれています。誰か
がそのうち碁盤を持ってきて、囲碁倶楽部を始めたりしないか、ひそかに期待
している今日この頃です。

今週の強引な一言
*** 風の中で育った木は根が強い(ことわざ)***
アジャイルやりたい、オブジェクト指向で開発したいといっても、なかなか自
分の望む状況にはならないかもしれません。でも逆風の中で頑張っていればい
るほど、あなたの意思や技術の足元をしっかり固めることができるかもしれま
せんよ。
(まにわ)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
● ご意見、ご感想は         ⇒このメールに返信ください
〇 配信中止、アドレス変更は ⇒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.