タイトル倉橋浩一のWebObjects Practice》WebObjectsでハマりそうなところカテゴリーWebObjects, 倉橋浩一、じつはWebObjectsで飯食っています
作成日2001/11/6 10:44:50作成者新居雅行
私の会社では、WebObjects開発や運用に関するご相談を承っています。そこで、ミスというほどではないものの、多くの方が陥りがちな注意点についてお話します。

1.大文字小文字
アプリケーション名、クラス名、Entity名、WOComponent名を、必ず大文字で始めなければいけません。これはどちらかといえば慣例なのですが、慣例に従っていないソースは読みにくくなってしまうことが多いです。クラス名を大文字で始めるのは他の環境でも慣例となっていると思いますが、Cocoaの場合Entity名とWOComponent名はクラス名として使われますので、これらに関しても慣例が適用されるわけです。

なお、メソッドやメンバは、小文字で始めます。EOModelのAttributeもメンバとして使われますので、小文字で始めます。

また、他の言語から入ってこられた方は、app_nameのように、変数名を"_"で区切る癖をお持ちのようですが、これはあまりCocoaっぽくないですね(笑)。Cocoaは伝統的に単語の切れ目を大文字にしてつなぐという慣例があります。前記の場合ですとappNameと書きます。EOF/WOFなどのAPI名もこのようになっているものが多いと思います。クラス名は比較的短めですが、メンバは長いのが多いですね。また、appと略したりしないでapplicationとフルスペルで書きますし、まるで文章のように長いメソッド名も少なくないです。馴れてしまえば、こっちの方が使いやすいし忘れにくいと思います。

....慣れれば、ですが。

これらはコンパイラを問題なく通ってしまいますが、他の人と一緒に仕事をする場合には特に気をつけた方がいいと思います。

2.Entity名とWOComponent名
ごくまれに、WOBuilderでWOComponentを開いても、クラスブラウザの部分に正しくメンバが表示されないことがあります。特に、Session/Applicationが表示されないため、何か悪いことが起こっているのではないかと再起動したりしてみますが、それでも直りません。

プロジェクトの中に、同じ名前のEntityとWOComponentがある場合に、このような現象が起きます。

前述の通り、Entity名もWOComponent名もクラス名として扱われます。WOComponentはjavaソースが必ず生成されますので、クラスがあるということは明確に意識できるのですが、Entityではcustom eoを作らない限り、それがクラスとして扱われるということを時として忘れてしまいます(私だけでしょうか)。

ので、これは好みだと思いますが、私はEntityは、そのままの名前を付けますが、WOComponentには"Page"、"Box"などの接頭/接尾語を付けて、それがコンポーネントであることを明示します。普通のページは"Page"、再利用コンポーネントには"Box"を使っています。

あと、これも私だけのアヤマチかもしれませんが、ついうっかりEntity名を"Members"というように複数型にしてしまいます。が、これをやるとto manyリレーションの名前を付けるときに悩まなければなりません。気をつけましょう。

3.パス
Projectのパスに日本語が含まれてはいけません。ProjectBuilderが落ちたり、WOBuilderでコンポーネントを開いてみてもクラス表示が出なかったりします。実はこれちょっと有名な症状で、homeworkユーザ会MLでも話題になったことがあるのですが、私自身が見事にはまってしまいました。ままままままだまだ修行が足りません。

また、パスに関してはもう一つ問題があります。それは"WO Support"のように、間にスペースの含まれるパスです。問題なくビルドできるし、WOBuilderでも開くことができるのですが、いざアプリケーションをLaunchしようとすると、タイプ1エラーが出てしまいます。

これはMac OS XでもWindowsでも起こります。特にWindowsでは、ユーザのホームディレクトリのすぐ上にスペースが含まれていて、見てもすぐにはわからないようになっていますので、なかなか発見できません。『パスが間違っているならそう言ってくれよお』、てなもんです。

些細な点ですが、見落としがちなので注意してください。

4.リレーション名
ついでに、リレーション名ですが、私はto manyには"array"、to oneでは"eo"を接頭語として使っています。別に何でもいいんですが、同じ接頭語を付けるとWOBuilderの上でソートされた時に同じところに固まりますので、何かと便利です。EOModel上でAdd Relationshipすると、Entity名が使われますが、これはそのままにしないで、ちゃんと意味をもった名前を付けましょう。WOBuilder上で操作する場合には、マウスカーソルをあわせればEntity名が表示されますので、あえてEntity名を名前に含める必然性は低いと思います。

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
WebObjectsが初めての開発環境、という方は少ないと思います。ので、他の環境での慣れた書き方があれば、そちらを優先してかまわないと思います。ですが、WebObjectsはモジュールを再利用しやすい造りになっています。そのためには、WebObjectsの慣例に基づいた書き方をした方が、「市場」が大きくなり、チームとして開発する場合の効率も向上します。

私の場合? 私は意識して書き方をかえた訳ではなくて、WOF/EOFを使っているうちに今のスタイルに変わってしまいました。毎日のようにremoveObjectFromBothSidesOfRelationshipWithKey()とかsetPageRefreshOnBacktrackEnabled()なんてメソッドを書いていれば、嫌でもスタイル変わっちゃいますよね(笑)。

ただ腱鞘炎には良くないですね....私はとうとう慢性化してしまったようです。皆さんはご注意ください。もっとも、今のご時世、腱鞘炎になるほど忙しいのは感謝すべきことなのでしょう....それで私の手首の痛みが収まるわけではありませんが。ご時世柄、現金よりも売り掛け金だけが増えて行きます。これから年末へむけて、ウチのような零細企業には何かとしんどい季節ですが....WebObjectsで稼ぎましょう。you can do it!!
[倉橋浩一/テクニカル・ピット]
関連リンクWebObjectsのページ