2005-05-24
目次
「WebObjects Dev Report」 第7回 田畑 英和
Tigerに合わせてWebObjects 5.2.4がリリースされたことは前々回にレポートしましたが、Mac OS X版から少し遅れてWindows版もリリースされました。
ですが、いったんWeb上で公開された5.2.4のJavaDoc(5.2.3からの変更点含む)がなぜかすぐに参照できなくなり、現在も参照できない状態が続いています。どういういきさつでこのようなことになったのかは分かりませんが、正確な情報を適切なタイミングで提供してもらいたいものです。
さて、本題に戻りまして、今回はプロジェクトの大まかな方針をレポートしておきたいと思います。WebObjectsでアプリケーションの開発をおこなう場合は、いくつかの種類のファイルを作成していくことになりますが、まずはプロジェクトの構成と、各種開発ツールについて確認しておきたいと思います。プロジェクトを構成する主なファイルと、それぞれのファイルを扱う開発ツールとの関連づけは以下のようになっています。他にもWebObjectsが扱うファイルやツールが何種類かありますが、基本的なものはこの3種類になります。
・Xcode(Project Builder, WOLips/Eclipse)
-> Javaファイル、プロジェクトファイル
・WebObjects Builder
-> WOコンポーネント
・EOModeler
-> モデルファイル
Javaファイルに実際のコードを実装していくわけですが、Javaファイルは用途別に何種類かに分類できます。
・プロジェクト生成時に自動生成されるファイル
-> Application.java, Session.java, DirectAction.java, Main.java
WebObjectsアプリケーションの基本となるクラス
・DirectAction(WODirectActionのサブクラス)
-> セッションレスの処理を実装、DirectAction.javaはこのタイプ
・WOComponent(WOComponentクラスのサブクラス)
-> 各Web画面の状態とふるまいを実装
・カスタムEO(EOGenericRecordのサブクラス)
-> データ操作のロジック、データの正当性検証処理などを実装
・その他のJavaクラス
-> 任意のJavaクラス、ユーティリティクラスなど
WebObjectsはフレームワークに基づいており、データベースアクセスを含めWebアプリケーションに必要な基本的な機能はすでにフレームワーク側で実装されています。あとは必要に応じてWebObjectsが提供するクラスを継承したサブクラスを作成し、そこにアプリケーション独自の処理を組み込んでいくことにより、実際のアプリケーションを開発することができます。WebObjectsは完全にJava化されていますので、もちろん任意のJavaクラスを組み合わせて使用することもできます。
Webアプリケーションでは実行時にWebページを動的に作成することになりますが、動的に生成するWebページをWOコンポーネントとして実装します。WOコンポーネントは複数のファイルから構成されており、その構成は以下のとおりです。
・APIファイル
-> 再利用可能なコンポーネントの場合に使用
他のコンポーネントとデータをやりとりするインターフェイスを定義
・WOファイル
-> 動的に生成するHTMLのテンプレート
さらに複数のファイルから構成される
・Javaファイル
-> WOファイルと1対1に作成し、Web画面の状態とふるまいを実装
このようにWOコンポーネントを実装するには複数のファイルを扱うことになりますが、WebObjectsの開発環境に含まれるツール「WebObjects Builder」を用いることにより、ファイルの構造をあまり意識せず、HTMLのテンプレートはGUI上で作成することができます。
また、WebObjectsのテンプレートは標準的なHTMLを用いて作成しますが、動的に処理をおこなう部分については独自タグ(
最後にモデルファイルですが、WebObjectsはEOF(Enterprise Objects Frame work)と呼ばれるオブジェクト永続化フレームワーク(ORマッパー)を搭載しています。このようなフレームワークでは通常オブジェクトとデータベースとをマッピングすることになりますが、WebObjectsではモデルファイルでマッピング情報を定義していきます。
モデルファイルを作成するツールにEOModelerを用いますが、モデルファイルの作成には2つのアプローチがあります。1つ目はまずデータベースを先に構築しておき、そこからEOModelerを用いてモデルファイルを自動生成させるやり方です。自動生成したモデルファイルは必要に応じてカスタマイズすることもできます。
2つ目の方法としては、まずモデルファイルを作成しておき、EOModelerにモデル情報に基づいてSQL文を自動生成させ、データベース上にテーブルを自動作成することもできます。実際にどちらのアプローチをとるかは状況次第ですが、データベースとモデルファイルを両方構築した後、どちらかに変更を加えた場合、それぞれの内容は同期をとる必要もでてきます。
以上WebObjectsでのプロジェクトの構成を簡単に説明しましたが、この連載で紹介するプロジェクトではまずモデルファイルから作成を始めていきたいと思います。おおまかな手順としては、まずアプリケーション(業務)で必要となるデータを分析してモデリングし、その結果をもとにモデルファイルの作成をおこなっていきたいと思います。そして、そのモデルファイルを用いてまずはデータのメンテナンス用のアプリケーション作成を最初の目標にしたいと思います。というわけで次回はモデルファイルの作成方法についてレポートいたします。
藤本裕之のプログラミング夜話 #69
NSViewの話3回目。前回は、NSViewがそれ自身入れ子にできる構造で、大本はそれが所属するウィンドウのコンテンツ・ビューであるというトコロまでであった。このスーパービューとサブビューに絡んでは、リサイズやアクティベーションなどいろいろ興味深い仕組みがあるんだが、まぁそれは置いておき今回は drawRect: の話をしたい。前々回も指摘した通り、Interface BuilderでNSViewのサブクラスを作ってソースファイルを生成させると自動的に宣言されるという、NSViewの屋台骨というか大黒柱的存在、ヒトに例えれば……まぁ例えなくてもいいか(笑)。
-(void) drawRect:(NSRect) rect;
その機能は読んで字のごとく、自身(NSView)内の指定された矩形領域を描画することである。が、ではこいつがどういうタイミングでコールされるのか、ということに関して正確に知っているヒトは意外と少ない。オレも昔そうだったからわかるんだが(あはは)、これ知らないとやたらコードの中に[self display]; とか [self setNeedsDisplay:YES]; とかが増えるんだよね。実は簡単な仕組みなんで、この機会にしっかり理解していただきたい。
ここに一個のNSViewがある……、NSViewぢゃあんまりトリトメもないんでそのサブクラスのNSButtonにしよう。ダイアログボックスとかに普通に出てくるあの「OK」とかのボタンである。あ、「OK」ボタンはたいていデフォルトになってて色がついてるな。「キャンセル」ボタン……うーん、「キャンセル」ボタンでも押されるとそれでウィンドウが閉じてしまうか。よし、話を簡単にするためにチェックボックスにしよう(クラスは同じNSButtonである)。ここに、
「□ モサ伝の原稿を書き終わった。」
というチェックボックスがある、あります、いいですね?
ユーザーが「□」の上にマウスカーソルを持ってきてマウスのボタンをクリックすると、□の色が青く変わってそこに……機種依存文字にしかないけどあのお馴染みの「レ」に似たあれが表示される。そこまでの処理を時間的に微分してみようというわけだ。まずユーザーがマウスボタンを押す、と……これはNSViewのスーパークラスであるNSResponderの領域だけど、mouseDown: というメッセージが NSButtonに届く。NSButtonは自分のタイプがチェックボックス型であり(ここ、いろいろと細かいアトリビュートがごちょごちょあるんだけど割愛する。つまりはInterface BuiderでNSButtonを作ると情報ウィンドウに表示されるあれこれを斟酌するわけだ)現在の状態がオフであることを認知、状態をオンにして、[self setNeedsDisplay:YES]; を呼ぶ。そのココロは「ワシは描き直される必要があるからね」であり、ここまででこいつのmouseDown: はおしまいである。
呼び出し側(この場合、それはいわゆる「イベント・ディスパッチャー」であり、Cocoaの世界では隠蔽されている)は、マウスクリックによって発生した mouseDown: から制御が戻ると、その対象になったオブジェクト(mouseDown: はNSResponderのメソッドだが、実際にこいつに応えるのはNSViewあるいはNSCellとそのサブクラスのみである)に対してメッセージdisplayIfNeeded を送る。オブジェクトは自身が再描画を必要としているかどうかをチェックし、その必要があれば、lockFocus、drawRect: 、unlockFocusを呼び出す。ここで初めてチェックボックスは青くなりチェックマークがつくわけね。……次回はこのあたりをもっと詳しく追ってみたい。さてこれでワタシも「□ モサ伝の原稿を書き終わった。」をオンにできる、と(笑)。
(2005_05_21)
ニュース・解説
今週の解説担当:小池邦人
【開発環境】
Tiger(Mac OS X 10.4)販売開始から2週間ほどしか経っていませんが、もう10.4.1へのアップデータが登場しました。いくつもの大きなバグがフィックスされているようですが、皆さんのマシン環境での調子はいかがでしょうか? まだまだバグは沢山残っているようですが、少しはましになったようですね。ところで、10.4.1から利用できるようになるのではないかと期待されていた「Quartz 2D Extreme」という新機能があります。
Mac OS X 10.2から搭載されているQuartz Extremeと名称が似ているのですが、Quartz 2D Extremeの方は、Quartz 2D APIによるライン、矩形、円、ベジェ曲線などの描画をビデオカードのGPUの能力を使い高速化してやろうという機能です。仕組み的には「Core Image」と大変よく似ています。機能自体は10.4の時点ですでに搭載されていたようですが、何らかの理由(まだバグがあるのでしょう…)でOFFの状態のままでした。そして残念なことに、期待に反して10.4.1でもQuartz 2D ExtremeはOFFのままです(涙)。
この機能、Terminalからコマンドを打ち込み強制的にONにすることも可能なのですが、試してみる一番簡単な方法は、Xcode Toolsをインストールすると利用できる「Quartz Debug」でONにすることです(/Developer/Applications/Paformance Tools/)。アプリケーションを終了すると自動でOFFになってしまいますが、ONの状態にしたまま描画テストを実行し、その性能を調べることができます。うちのPowerMac G5で試してみたところ、図形描画の速度がほぼ2倍になることを確認することができました。図形描画が高速になると言うことは、そのAPIを多用しているユーザインターフェース描画なども高速になるわけでして、ユーザの体感速度の向上に大きな効果があることが理解できます。
マシンの種類によっては画面表示に問題が発生するようですので、確認は自己責任でお願いします。まあ、本当はTiger登場時に完成しているはずの機能だったと思われますが…正式に利用できるようになるまでもう少し待つ必要があるようです。Quartz 2D Extremeに関しては、以下のサイトに詳しい技術的な解説が載っていますので、興味ある方は参考にしてみてください。
http://arstechnica.com/reviews/os/macosx-10.4.ars/14
【テクニカルドキュメント】
前回から5月20日の期間中、Apple社のDocumentationサイトには新規ドキュメントがひとつも登録されませんでした。前回、Tiger関連のドキュメントが大量に登録された反動でしょうね。やはり休暇も必要です(笑)。
http://developer.apple.com/documentation/index-rev-date.html
前回から5月20日の期間中、テクニカルノートは2つ登録されました。TN2113の方は新版ですが、TN2065の方は、解説内容をMac OS X 10.4に対応させるための改訂版です。新規テクニカルQ&Aの方はひとつだけ登録されています。 内容は、Interface Builderで「HIMovieView」を作成してHIViewFindByID ()で呼び出しても、HIMovieViewCreate()でダイレクトで作成しようとしても、APIからエラーが返りうまくいかないというものです。これはQuickTime 7のバグだそうで、その回避方法がソースコード付きで解説されています。それにしても低レベルなひどいバグが残っているものです…(涙)。
TN2113「Using AudioDeviceRead in Mac OS 10.4」(新版)
TN2065「do shell script in AppleScript」(10.4用改訂版)
http://developer.apple.com/technicalnotes/index-rev-date.html
QA1417「How to work around HIMovieViewCreate failing」
http://developer.apple.com/technicalqas/index-rev-date.html
【サンプルソースコード】
前回から5月20日の期間中、Apple社のSample Codeサイトには、新しいサンプルソースコードが3つ登録されました。3つともJava関連のサンプルソースコードです。
「SwapLAF」(Java関連)
「HelpHook」(Java関連)
「BrideOfMungGrab」(QuickTime&Sequence Grabber関連)
http://developer.apple.com/samplecode/index-rev-date.html
【デベロップメント SDK】
前回から5月20日の期間中、Apple社のSDKサイトには新しいSDKが3つ登録されました。最初の2つは、Apple自社製品の「Motion」と「Final Cut Pro」の拡張用SDKです。詳しくは、前号の木下さんの解説を参考にしてみてください。
「Kernel Debug Kit 10.4.1」
は、最近登場したMac OS X 10.4.1に対応したバージョンとなっています。
「FxPlug SDK (DMG)」
「Final Cut Pro XML Interchange Format DTDs」
http://developer.apple.com/appleapplications/download/
「Kernel Debug Kit 10.4.1」
http://developer.apple.com/sdk/
MOSAからのお知らせと編集後記は割愛します