Macintosh Developer Online (MDOnline)


2001年12月1日発行号 - Cocoa本、もう1冊



今日は、倉橋さん特集ですね。本日より、MacWIREさんへの独占配信ではなくなりますが、一部の記事については、MDOnlineの宣伝にもなると言うこともありますので、配信させていただきます。MacWIREへ配信される記事は、タイトルに【MacWIRE配信予定】という文字が入っています。
それから、以前はPOWERBOOK NEWSさんに配信していましたけど、MacWIREさんへの独占配信に伴って配信を中止させていただいていました。しかしながら、今月より、POWERBOOK NEWSさんへの配信を再開します。
さて、ちょっと紹介が遅くなってしまいましたが、ローカスから出ているCocoa本の紹介を記事でお届けします。当然(笑)、MacWIREさんへは配信OKになっていますね。また、もちろん、読者プレゼントとしては潤沢に用意いたしました。以下の要領でお申し込みください。広文社さんの書籍と期間的にバッティングしますが、締め切り日を注意してください。それで、広文社さんの方もものすごい応募がありますが、ローカスの本も同様だと思うので、後になっての宣言で申し訳ないのですが、「両方に当選することはない」というルールを適用させてください。従って、広文社さんの本を先に抽選するので、結果的に広文社本の当選者は、ローカス本は当選しないというルールにしたいと思います。もちろん、両方応募するのはかまいませんけど、必ず「別メール」でお願いします。

===============================プレゼント
はじめてのMacOS X Cocoaプログラミング(10冊、ローカス提供)
――――――――――――――――――――――――――――――――――――


(新居雅行 msyk@mdonline.jp


【MacWIRE配信予定】倉橋浩一、じつはWebObjectsで飯食ってます》番外編:セミナーやります

来年1月下旬から2月上旬にかけて、東京と京都でセミナーを開催します。今回のセミナーに関しましては、アップルコンピュータ株式会社のご支援により開催することができました。会場についても株式会社システム情報(東京)とウイングネット(京都)にご協力いただいています(敬称略)。東京でのセミナー「WebObjects実戦セミナー」は中上級者向けで講師はプラネットコンピュータの田畑氏と私こと倉橋が、京都でのセミナー「WebObjectsトレーニングin京都」は初心者向けで私が担当します。

京都でのトレーニングは以下のような方を対象としています。


東京でのセミナーは、座学+実習の部分と、Q&A部分と、コンサルテーション部分とにわかれています。

座学+実習では、WebObjectsで見落としがちなWebの基礎的な部分や、WebObjectsでの生産性をもっと引き上げるための様々なテクニックを身に付けていただきます。例えばWebObjectsではあまりhtml/http、それにjavaを意識しないでアプリケーションが書けてしまいますが、講師のひとりであるタバタ氏いわく「もっとhttpやJavaを知っていれば簡単に対処できることなのに回り道をして苦労している人が多すぎる」とのことです。
Q&Aは事前に質問事項をWebかe-mailで送っていただき、それをテーマにして講義を行うというものです(もちろん、どなたからいただいた質問かということは公表しません)。他の人がつまずいた問題は自分がいつかつまずく問題でもありますので、それを共有すること
によりWebObjects開発者としてのスキルを向上させます。
コンサルテーションは、お使いのPowerBookなどを持ち込んでいただき、その場で問題解決のお手伝いをします。ただし、こちらは先着順にて対応させていただきます。
いずれのセミナーも、お支払は、銀行振込の他に佐川急便Eコレクトを用いたクレジットカードによる決済も可能です。

どちらのセミナーに関しても、少なくとも座学/講義での内容はオーム社の「WebObjectsアプリケーション開発ガイド」などを熟読すれば身に付くかもしれません。ただ、この500ページを超える本を読みこなすには数週間かかると思いますが、セミナーは2日または3日間で終わります。何よりも書籍などが「この技術をこう使う」という観点で書かれているのに比べ、私どものセミナーでは「こうしたいときには、こうする」という構成になっています。

何より、私どもには実績があります。アップルのサイトにある「WebObjectsパートナー」のページには、WebObjectsデベロッパがパートナーとして多数紹介されていますが、ここに掲載されている会社の多くは私どもの教材、コンサルテーション、講習によってWebObjectsを修得されました。Aさんは独立して会社を作ったし、Bさんは今度MOSAで講師をやるし、Cさんはメルツェデスを買ったし....華道や茶道のように家元制度を導入して、上納金を収めてもらうようにすればよかった、と後悔しています(笑)。

◇WebObjectsパートナー
 http://www.apple.co.jp/webobjects/wo_partner.html

セミナーの詳細については、こちらをご参照ください。
 http://www.techpit.co.jp/cgi-bin/WebObjects/SemiApp.woa/

なお、これはセミナー受付のために組み立てたWOアプリです。セミナー参加者には、ソースを含めて配付します。

さて、次の「WebObjectsで飯食ってます」では電子掲示板を仕上げます。大変お待たせして申し訳ありませんでした。前にも書いたと思いますが、9月はめちゃくちゃ忙しくて月間労働時間が400時間を超えました。仕事をしながら、「10月になったら休むぞ....原稿かいたりしながらのんびり暮らすぞ....」と思っていたものでした。が、10月も11月も、結局400時間以上労働してしまいました。12月はすでに仕事が数本....正月休みを取れるか、今から心配です。WebObjects屋さんはみんなこんな状態で、顔をあわせると「誰かいい人いない?」って話になります。いたら自分の所で雇うってーの(笑)。また、これはWebObjects屋だけに限らず、Webアプリケーション関係の開発をしているシステムハウスはこんな状況のところが多いようです。Webアプリケーションの利用が企業のTOCなどの低減に効果がある、と認知されてきたからでしょう。実際、うちの会社でも、いわゆる「Webアプリケーション」という言葉から想起されるような「世間様に広く公開されたWebサービス」よりも、イントラネットで利用されるようなシステムの方が売り上げが多いです。WebObjectsの良さは、なんと言っても「データベースの高度な扱いが簡単かつ確実に実装できてしまう」という点にあります。「データベースを簡単に扱える」とうたっている製品は少なくありませんが、「簡単に扱える」のと「高度な取り扱いを簡単かつ確実に実装できる」のとでは、大きな違いがあります。単純なデータの検索や更新が簡単にできるのは当たり前で、WebObjectsでは高度なリレーション処理であっても簡単に書くことができます。他のWebアプリ製品を用いた開発で実績のあるデベロッパにWebObjectsをデモすると、必ずと言っていいほど「おおおおお俺が今まで2週間かかっていたことが15分で....俺が今までやってきたことは何だったんだあ」と頭を掻きむしり始めますからね(いや、大げさでなく)。

WebObjectsへの投資は必ずあなたの人生を変えます。他人が2週間かかることを15分で片付けてしまえば、そりゃ元のままではいられませんよね。
[倉橋浩一/テクニカル・ピット]

関連リンク:WebObjectsのページ
カテゴリ:WebObjects, 倉橋浩一、じつはWebObjectsで飯食っています, イベント


【MacWIRE配信予定】Cocoaのプログラミングを初歩から徹底的に詳しく解説した書籍が発売

ローカスから出版されたCocoaのプログラミング本である「はじめてのMacOS X Cocoaプログラミング」は、ダイナミックバインド社の中村正弘氏によって執筆されたものだ。中村氏は札幌医科大学に在籍のころから、NeXTでのプログラミング経験があり、最近ではMac OS X関連のプログラミングに関していくつかのセミナーで講演もしている。価格は4,800円で、500ページを超えるちょっと分厚い書籍である。Objective-Cの初歩、アプリケーションのひな形の解説、ビューやデリゲート、オブジェクト生成などの基本的なユーザインタフェースを含めたCocoaのアプリケーション開発の基本から説明をしている。そして、マルチドキュメントやローカライズ、クライアントサーバアプリケーション、ノティフィケーション、ドキュメントクラス、サービス、ツールバーといった話題も取り上げられており、ユーザインタフェースを構築する場面から、内部的な処理の構築方法まで幅広く解説されている。解説も単に操作を説明しているのではなく、ポイントになる部分やつまづきそうな部分を詳細に解説するなど、初心者からスキルアップをしたい人までにも配慮されたものとなっている。もちろん、Interface Builderでの実際の操作を含めた部分は図入りで詳細に解説されている。プログラムも、1行1行が丁寧に解説されているなど、念入りに執筆されたという印象を持つ内容だ。すべての解説は、Mac OS X 10.1でのProject BuilderおよびInterface Builderでのものとなっており、最新のMac OS Xでの開発環境でのプログラミングを学習することができる。いずれにしても、Cocoaのプログラミングを行う人にとっての必携本であることは確かだろう。

関連リンク:はじめてのMacOS X Cocoaプログラミング
カテゴリ:雑誌、書籍, Cocoa


KBase》Mac OS X 10.1でのAppleTalkでのトラブルについて

Mac OS X 10.1でAppleTalkを利用するようにしても、正しく機能しない場合の対処について、Knowledge Baseで公開された。別のマシンからたとえばセレクタなどでの参照ができないとか、AppleTalkベースのプリンタをPrintCenterで登録できないとか、AppleTalkのゾーンが参照できないといった場合が発生するとしている。AppleTalkが使用するようになっているかを確認し、それでも直らない場合の手順について記載がある。

関連リンク:Mac OS X 10.1: AppleTalk Does Not Work After Being Enabled
カテゴリ:Knowledge Base(旧TIL), ネットワーク管理, ネットワーク


KBase》AirPort 2.0 Ver.1.1 for Mac OS Xがリリース

AirPort 2.0のVer.1.1がリリースされている。Mac OS X向けのワイアレスネットワークであるAirPort(日本ではAirMac)利用に必要なソフトウエアで、カーネル機能拡張や設定ユーティリティ、メニュー用の機能拡張、ヘルプファイルなどとなっている。インストーラでは必要なファイルについては置き換えをするようではあるが、設定ユーティリティのバージョン表記は2.0のままになるようだ。Ver.1.1での変更点については情報がない。また、ソフトウエアアップデートによる更新リストには入っていないようであり、大きな問題を解消するアップデートではなさそうである。

関連リンク:Airport 2.0 for Mac OS X: Information and Download
カテゴリ:OS関連ソフトウエア, ネットワーク


KBase》AppleWorks 6.2.2のアップデータの英語版がリリース

AppleWorks 6.2.2へのアップデータが英語版のみであるが、リリースされている。Mac OS X 10.1利用者向けのものである。Mac OS 9向けには、Ver.6.1.2へのアップデートはできるが、バージョン番号はすでにリリースされているものである。詳細な修正点については不明である。

関連リンク:AppleWorks 6.2.2 Update: Document and Software
カテゴリ:Knowledge Base(旧TIL), 文書作成アプリケーション


KBase》特定の機種でのDVD Player 3.0.1の問題について

Blue & WhiteのPower Macintosh G3で、DVD Player 3.0.1を使う場合、出荷時に搭載されていたビデオカードではないカードを使用しているとき、256色モードにしているとDVD Playerが終了してしまうという問題がある。ディスプレイの色数を32000色ないしは1600万色の設定にして使えば、問題は発生しない。

関連リンク:DVD Player 3.0.1: Unexpectedly Quits When You Use 256 Colors
カテゴリ:Knowledge Base(旧TIL), メディアプレイヤ


【MacWIRE配信予定】倉橋浩一、じつはWebObjectsで飯食ってます》掲示板にコメント機能を追加してを仕上げる(1)

―――最終回
ずいぶん長く引っ張ってしまいましたが、今回がWebObjectsによる電子掲示板の最終回です。残っているコメント機能を片付けてしまいましょう。

えー、前回の記事で、「あれから8か月」などと書いてしまいましたが、実はあの部分を書いたのは9月でして....それからさらに2か月経ってしまったんですね...申し訳ありませぬ。商売柄、あちこちのWebObjectsサイトを拝見させていただいているのですが、時々、この連載の電子掲示板をベースにしたアプリケーションをお見かけすることがあります。ここで作っているのは電子掲示板なんですけども、画面のデザインやタイトルを変えたり、フィールドを増やしたりすれば、スケジュール帳や顧客問合せページ、ニュースリリースページなどに応用することもできます。今回追加するコメント機能と、それを実現するためのコンポーネント再利用技術は、他のツールと比べても格段に簡単に利用できて、かつ非常に有用なものです。皆さんのお役に立てば幸いです。

―――その前に....
前回リリースしたバージョンにバグがありました。えー、メッセージ一覧から削除を選んで、メッセージ画面で「一覧に戻る」を選ぶと、メッセージ一覧に戻っても何も表示されなくなってしまうという現象です。これは、MessagePage.javaのlsetMessageForDeleteが呼び出されたときに、boardの設定を忘れていたのが原因です。同様にMessageListPageから呼び出されるsetNewMessageでは


board = (EOEnterpriseObject)newMessage.valurForKey("board");

という処理が入っているのですが。というわけで、setMessageForDelete(EOEnterpriseObject value)の最後、newMessage = value;の次に、

board = (EOEnterpriseObject)newMessage.valueForKey("board");

を追加してやります。

いやはや....。

―――概要
コメントとは、一つのメッセージに対して書かれたメッセージです。一つのメッセージは複数のコメントを持つことができます。コメントもまたメッセージですから、コメントがさらに複数のコメントを持つこともできます。
一つのレコードから他のレコードを指す、あるいは一つのレコードが複数のレコードを指すのは、まさにリレーションです。前者がto one、後者がto manyリレーションと呼ばれます。説明が前後してしまいましたが、前回作った「掲示板(Board)が複数のメッセージ(Message)を持っている」というのも、まさにこの構造です。
WebObjectsのデータベース環境は非常に柔軟なので、自分自身に対してリレーションを張ることもできます。今回のメッセージ―》コメントの構造はまさにこの特性を利用しています。

コンピュータ技術(より正確には数学)の世界には、昔から「再帰」というテクニックがあります。例えば、樹木のように「幹が枝にわかれ、枝がさらに細い枝にわかれていて、細い枝はさらに細い枝にわかれていて....」というような構造を定義する場合に、「枝は複数の"子"枝に分かれている」という定義をしてあとは自分自身を参照していくことで全体を表現してしまおう、というものです。
今回は、これをWebObjectsのGUI上で使ってみました。実は、WebObjectsで使ってみるのは初めてだったのですが、やってみたらうまく行ったので、ちょっと感動してます^^;。

―――再帰のための準備
再帰を使うためには、一つのメッセージ表示のための部分が、他のメッセージ表示部分を所持する、という構造を用意する必要があります。通常であれば、一つのメッセージを表示するためにWOStringを並べて、その下にメッセージのto manyリレーションであるcommentsをlistにバインドしたWORepetitonを用意し、その中でまたメッセージを表示する、というのが一般的だと思います。ただ、この場合、階層が1つか二つならいいですが、何階層あるかわからないような場合に対応できません。そこで前述の再帰を使って、一つのメッセージとそのコメントを表示するコンポーネントを作ります。ここで、コメント表示部分に、コンポーネント自分自身を埋め込むのがミソです。
これにはコンポーネント再利用と呼ばれるテクニックを用います。WebObjectsには、プログラマが定義したコンポーネントをあたかも既成のエレメントのようにして他のコンポーネントに埋め込むことができる、という機能があります。ので、一つのメッセージを表示するためのOneMessageBoxというコンポーネントを作り、メッセージの内容を表示するTABLE一つと、その下にcommentsを表示するためのWORepetitionを設け、WORepetitionの内側にOneMessageBoxを配置します。

では、実際にやってみましょう。まず、ProjectBuilder上でWOComponentsグループを選び、cmd+Nで新しいコンポーネントを作り、OneMessageBoxとします。前回まで新しいコンポーネントを作る場合には、名前を「〜Page」にしていましたが、ここでは「Box」にしています。これは、これが埋め込みコンポーネントであることを明示するために私が使っているルールで、他の名前でももちろん構いません。
次に、WOBuilderでOneMessageBox.woを開きます。Page Inspectorを見ると、まん中へんのポップアップメニューに"Full Document"とありますが、これを"Partial Document"に切り替えてください。すると、次のようなダイアログが出ます。

 

「部分コンポーネントに切り替えると、BODYとその外側のタグを全部消しちまいますぜ。もしそういうタグのどれかを消したいだけだったら、Source Viewモードで直接編集した方がいいです。続けますか?これはundoできないですよ」てな意味ですが、そもそもそのためにPartial Documentに切り替えたのですから、"Continue"をクリックします。すると画面が灰色になります。これは背景色の設定が無効になったことによるものです。
(続く)
[倉橋浩一/テクニカル・ピット]

関連リンク:WebObjectsのページ
カテゴリ:WebObjects, 倉橋浩一、じつはWebObjectsで飯食っています


【MacWIRE配信予定】倉橋浩一、じつはWebObjectsで飯食ってます》掲示板にコメント機能を追加してを仕上げる(2)

コンポーネントの用意が出来たので、作り込みに入ります。

(1) MessageListPage.woで、WORepetitionの内側にあるTABLE(タイトル、メッセージなどを表示するためのもの)を選択し、cutします。
(2) OneMessageBox.woにpasteします。
(3) pasteしたTABLEの下にWORepetitionを配置し、その内側に1行2列、幅100%のTABLEを配置します。
(4) TABLEの左側のセルの"Cell"の文字を消し、幅を20pixelsに設定します。
(5) 左側のセルの"Cell"の文字を選択し、WebObjectsメニューから"Custom WebObject"を選択します。"Custom WebObject"ダイアログが開きますので、"WebObject class to use:"に"OneMessageBox"と入力します。
(6) "Edit Source..."から"Add Key..."を選び、MessageクラスのaMessageと、MessageクラスのaCommentと、WODisplayGroupクラスのdgMessageを追加します。
(7) "Show API Editor"アイコンをクリックし、"API Editor"ダイアログを開きます。
(8) "Add Keys From Class"をクリックします。aMessage, aComment, dgMessageが表示されますが、aCommentを選択してから右上の「プラスマイナス」アイコンから"Delete binding"を選び、削除します。そして、Requied欄をチェックします。通常のエレメントにはいくつかのアトリビュートがあり、オブジェクトなどをバインドしたり値を設定したりすることができるようになっていますね。これと同様にして、埋め込みコンポーネントに対して、アトリビュートを作ってやるための作業です。ここでは、一つのメッセージを表示するのでそれをaMessageを通して受け渡しします。また、このメッセージに対してコメントを書きますので、WODisplayGroupのdgMessageを渡してもらいます。

 

(9) WORepetitionのlistとaMessage.comments, itemとaCommentをバインドします。
(10) OneMessageBox上のOneMessageBoxにオブジェクトをバインドします。OneMessageBoxのaMessageとaComment, dgMessageとdgMessageをそれぞれバインドしてください。

 

(11) "Edit Source"の"Add Action..."を用いて、MessagePageを返すactionCommentを追加します。
(12) メッセージ表示部分の適当な場所に、WOHyperlinkを配置し、タイトルに"このメッセージにコメント"と設定します。
(13) このWOHyperlinkのactionと、actionCommentをバインドします。コンポーネントを保存します。

この時点で、OneMessageBoxは以下のような状態になっているはずです。

 

(14) MessageListPage.woを開きます。
(15) 先ほど(1番)で一つのメッセージを表示するために使用していたTABLEを削除しましたが、ここにOneMessageBoxを配置します。WebObjectsメニューから"Custom WebObject"を選び、OneMessageBoxを指定します。
(16) OneMessageBoxのaMessageとaMessage、dgMessageとdgMessageをバインドします。コンポーネントを保存します。

 

さて、これでWOBuilder上の作業は終わりです。整理すると、メッセージ表示部分をOneMessageBoxに写し、OneMessageBoxでコメントを表示するための機能を付加し、コメントを書き込むためのリンクを用意し、メッセージ一覧表示にメッセージ表示boxを埋め込む、という作業でした。

"Edit Source"から"View Source File"を選び、ProjectBuilderに戻ります。

(1)MessageListPage.javaのactionDeleteをcutし、OneMessageBox.javaにpasteします。これは、メッセージを削除するための処理が、従来はメッセージ一覧ページ上にありましたが、これがOneMessageBox上に移ったことに伴う処置です。
(2)MessageListPage.javaのsetBoard関数の


board = newBoard;

の次の後に、

ddgMessage.setQualifier(EOQualifier.qualifierWithQualifierFormat("rootMessage = nil", null)));

を追加します。これは、メッセージ一覧を表示する際に、rootとなるメッセージのみを表示するための処理です。rootとなるメッセージは自分自身の親を持たないのでrootMessageがnullになりますので、display groupに対してrootを持たないメッセージだけ表示するように指示しているわけです。
(3) OneMessageBox.javaのactionCommentに必要な処理を書きます。詳細はソースをご覧いただくことにして、やっていることは以下の通りです。やや長い処理になっていますが、大部分は"re :"や" > "を付け加えるための処理で、リレーションのための特別な処理は一行だけ(addObjectToBothSidesOfRelationshipWithKey関数一つ)で済んでます。
 1.元のメッセージのタイトルとメッセージを取り出して"Re: "や" > "を追加して、コメントに設定する。
 2.元のメッセージのリレーションとして、コメントを追加する(addObjet....)。
 3.用意したコメントをメッセージを書き込むためのページ(MessagePage)に渡す。

では、ビルドして実行してみます。"このメッセージにコメント"をクリックしてメッセージを書き込むと、ちゃんと少し右にずれた形でコメントが表示されるのがおわかりいただけますでしょうか。

 

これで、当初目標にしていた掲示板の機能をすべて実装できました。登録も検索もスレッド表示もできて、一応掲示板としての基本機能が揃いました。でも、以前も書きましたが、例によってデザイン最悪ですね(泣)。

◇掲示板アプリケーションのプロジェクト一式
 http://mdonline.jp/figs/01/0045/SimpleBoard.tgz

MacWIRE上の「WebObjectsで飯食ってます」はこれで一区切りとなります。連載開始からほぼ1年たつわりに、サンプル2本だけで、あとは雑談だけで終わってしまって申し訳ありません。新居さんに付けていただいた「WebObjectsで飯食ってます」っていうタイトルは妙に気に行っておりますので、またどこかでお目にかかれるといいのですが。

なお、MDOnlineでは、「WebObjectsで飯食ってます」の他に、"WebObjects Practice"という記事を連載しています。MDOnlineの読者の方々しか購読はできません。こちらは、WebObjects 5を中心にすでにWebObjectsでお仕事をされている方に向けた実践的なネタを扱っています。ちなみに次回の記事では今回の電子掲示板にエラーチェックなどを組み込み、よる実用的なものに仕上げてご紹介します。そちらも今後ともよろしくお願い致します。
(この項、以上)
[倉橋浩一/テクニカル・ピット]

関連リンク:WebObjectsのページ
カテゴリ:WebObjects, 倉橋浩一、じつはWebObjectsで飯食っています