最近のキーワード

2006年05月27日

アノテーション(メタデータ)

Java(Tiger)、C#、ActionScripot3などで採用されるアノテーション(メタデータ)について、Rubyにも欲しいので実現方法をちょっと考えてみる。 アノテーションの定義方法はこんなものだろうか…
  • コメントをパースして、@module/@classなどのキーワードをベースにパースする。
  • @Foo = Class.new{} のように'@'と大文字で始まるものをアノテーションとする。
  • Rubyを拡張して@module/@classなどのキーワードを加える。
次に、アノテーションの利用方法はこんな感じ…
  • @Foo
  • @Foo("foo") または @Foo["foo"]
  • @Foo(:key=>"foo")
  • @Foo[ @SubFoo(:key=>"foo1"), @SubFoo(:key=>"foo2"), ... ]
本来は、プログラムに影響を与えない方法がいいが、Rubyで実行だけされるようにしておくと、いろいろ楽できそうだ。

さて、肝心なことは、Rubyではどんな目的でアノテーションを利用するかということだが、ここから先も個人的な妄想であり、同時に、(極端には)こうあって欲しいと思う私の理想である。間違ったことや見当外れのことを書いているかもしれない。問題点も明らかにせずに書きなぐっているだけとも言える。
一つはRailsの記述をアノテーションベースに変更することも可能かもしれない。 つまり、リフレクションを多用することにより実現されたDSLではなく、あくまでアノテーションを利用するのである。もちろん、アノテーションの実装がリフレクションによって行われるかもしれないが、アプリケーション毎に各自の方法でリフレクションを多用してDSLを作られるよりは、DSLの定義、DSLとDSLの連携、及び、DSLとコードの連携をメタデータで分離できる方が私は好きだ。一つのどうしようもない理想は、どのようなメタデータを付けることができ、どのオブジェクト同士が連携するかなどは、メタデータの定義を見れば分かるということであるが、できるかな…
とは書きなぐったものの、現実的に使えるものとなると厳しそうだ。結局、メタデータや制約記述がややこしくなるだけのような気もするが、簡潔さを許容できる範囲で犠牲にして、相互連携(モデルの共有ではなくて)をネタにすることはできないだろうか?

(例はあまり適当ではなかったので削除しました。)

posted by ttate at 22:29| ☔| Comment(0) | TrackBack(0) | Ruby | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。