タイトル倉橋浩一のWebObjects Practice》今月は短期納品をこなすカテゴリーWebObjects, 倉橋浩一のWebObjects Practice
作成日2001/9/25 19:23:8作成者新居雅行
8月の終わりごろ、急遽システムを一本立ち上げなければならないことになりました。それも期限は9月一杯。先方はいろいろと事情があって、どうしても9月末までに立ち上げなければならないとのこと。まず、他のクライアントと延期することが可能かどうかについて交渉しました。一番大きい仕事についてご快諾いただいたのですが、自社製品のリリースを含めて、延び延びになっている仕事については延ばすことができませんでした。これらの処理で9月の上旬は身動きが取れませんでした。

開発するシステムの規模は、コンポーネント数約60(メイン50+メンテナンス用10)、テーブル数10、リレーション30本程度ですから、通常ならば2ヶ月でβというところではないでしょうか。それを実質3週間くらいで少なくともα版程度に仕上げなくてはならないというのですから、大変です。

ので、まず、最初に仕様を完全にFIXして、途中での変更は一切認めないことを確認しました。そのために集中的に会議を行い、細部に至るまで完全に決定していきました。そして、それに基づいてデザイナ氏はhtmlとビットマップ作り、私はデータベース関係の設計に取り掛かりました。

データベース仕様が完全に固まって、htmlとビットマップがそろったのが9月12日。

当初はプロトタイプとして以前作ったプロジェクトに手を加える形で進めるつもりだったのですが、微妙な変更個所が多く、それを拾っていくよりも新規にプロジェクトを作って、使える部品を前のプロジェクトからコピーしてきて使う、という形式にしました。結果的にこれが正解でした。

開発をスタートしたものの、この時期は何かと忙しくて、データベースメンテナンスのための画面がすべて動くようになって動作確認が終わったのが9月22日でした。この日から、html素材をWOコンポーネントに作り替えていく作業を開始しました。

基本的には、WOBuilderをhtml表示モードにしておいて、別のエディタで開いたhtmlソースをそのままcopy & pasteし、再び画面編集モードに戻してから、Hyperlinkなどのエレメントをダイナミックエレメントにしていきます。また、一覧表などは、テーブルの<TR>タグをWORepetitionで覆ったりしていくことも必要です。さらに、action関数を追加し、eoとダイナミックエレメントをバインドし、一通りGUI側の作業が終わったところでProjectBuilderに戻ってコーディングをします。

生産性をあげるために、コンポーネントの再利用とWOComopentクラスのサブクラス作成をフル活用しました。

前者は、html素材であちこちで使われている要素、たとえばバナー表示、ページ切り替えのためのUI、ツールバーなどを、埋め込み用コンポーネントとして作って、再利用しました。APIパネルでコンポーネントに渡すパラメータを設定すれば、あたかも既成のダイナミックエレメントと同様にして使うことができるので、単純な一覧表示画面などは15分程度で実装を完了してしまったものもあります。また、バナーなどシステムのあちこちで使われる部分に仕様の変更があったとしても、一つのコンポーネントを変更するだけですべてに反映されます。今回、バナーの情報もデータベースに埋め込んでおき、ランダムにバナーを呼び出したり、特定のデータには特定のバナーのグループが表示されるようにしたり、という仕様になっていますが、バナーの出現順を変えたい場合にも一括して管理することができます。また、バナーの情報はWOApplicationのsharedEditingContextから取り出して、Applicationで管理するようにしていますので、システム全体としてどのバナーを何回仕様したか、というようなことを完全に把握できるようになっていまぁ?。

さらに後者ですが、たとえば「データの新規作成から確認まで」のような同様のデータを用いる一連のコンポーネントや、ファイルメンテナンス画面のように決まり切った処理で構成される画面については、各コンポーネントを直接WOComponentのサブクラスとして生成するのではなく、WOComponentからサブクラスを作ってそこに共通する処理をコーディングし、このサブクラスから各コンポーネントを派生するようにしました。こうすることによって、ファイルメンテナンスのための各コンポーネントでは、ほとんどコーディングしていません。save, revert, insert, delete, paging....これらの処理はすべて共通のサブクラスがインプリメントしていますので、個々のコンポーネントでコーディングする必要がないのです。

ここしばらく、腱鞘炎は痛いは、不眠症で毎日2時間くらいしか眠れないわで体調が悪かったのですが、稚内や八丈島で寿司を食べたり温泉に入ったりして何とか乗り切ってます(八丈島では「あそこ寿司」という店が有名らしいんですが、ここは最悪でした。お勧めは「銀八」....カンパチとシマアジ、最高でした)。実は私ら夫婦はマイレージをためるのが趣味でして、9月になってからも、全日空の超割で2日間に沖縄を3往復したり、稚内を日帰りしたりしているのですが....飛行機に乗っていると、なぜかデータベースの設計や仕様がきれいにまとまります。9月に発売したHomework 1.5 for WebObject 5.0の原稿加筆分のかなりの部分は沖縄3往復の間に書いたものですし、稚内往復では今回のシステムのコンポーネント再利用のための設計などをじっくり見直すことができ、その後、ほとんど手を加える必要がありませんでした。

と、余談が長くてすみません。

そんなこんなで22日から開始したインプリメントは、25日の早朝、ほぼ完了しました。この原稿のために記録していたのですが、今回の開発作業の実働時間は125時間ほどでした(飛行機やトイレや風呂の中で考えている時間や、仕様定義のために打合せしたりメールを書いたりしている時間を除きます....ちなみに私は中で雑誌読んだりしているのでトイレ長いんですが、システム設計をしている時期は特に長く、1日合計2時間を越えます)。n対nのリレーションなどそれなりに複雑なリレーションを含むデータベースシステムの開発時間としては、悪くない記録ですよね。WebObjcetsは本当に凄いなぁと思います。

そうやって集中して開発していると、大きな穴がドカーンと空いているのに気づかなかったりしますので、今日はペースを落として、テストとデバッグをしています。予定より早く顧客にリリースできるでしょう。
[倉橋浩一/テクニカル・ピット]
関連リンクWebObjectsのページ