Metadataとは

一般に、「Meta(メタ)」という言葉は、それに続く言葉の上位概念を意味する。
したがって、Metadataは、dataの上位概念いう意味だが、「上位概念」という言葉はわかりずらい。
ITに関する限り、(誤解を恐れずに書くとすれば)「上位概念」は「属性」を意味していると考えていいだろう。
たとえば、「データのMetadata」といえば、ファイル名、テーブル名、フィールド名、保存場所といった「属性名」を表すのが普通だ。

Java5で導入されたMetadataは、プログラムの要素(クラス、インターフェイス、メソッド、フィールド)の「属性」なのだが、「注釈(Annotation)」といった意味合いが強い。Metadataというより、Annotation(アノテーション)と呼ばれることの方が多いのはそのためである。
近年、EoD(Ease of Development)という言葉がよく登場するが、「アノテーションを中心において、開発を簡単にしよう」という意味合いを強く持っている(それが、「本当にEoDであるか」は議論の多いところでもある。昨年、サーブレット3.0のJSR-315(リンク)がpublic reviewとなったが、活発な議論が行われている)。

MetadataはJSR-175(リンク)としてリクエストが起こされている。
「なんで、こんなことしてるの」というのは、JSR-175(上のリンク)の「Section 2: Request」に「2.1 Please describe the proposed Specification:」というサブセクションがあるので、そこを読めばよい。

ここを読むかぎり、

  • EJBWebServiceに付随する煩雑なプログラミング(特に、当時EJBは厳しい批判の対象となっていた)を楽にする
  • これらについて、コードGeneratorの利用によるスタブ(中身はないが、形式としては正しいプログラム。スケルトンと同義)生成

といったことが目的とされている。

当時から今に至るJavaの歴史を考えると、近年公開されてきた言語仕様は、「他言語からの移植(Java5で導入された仕様の多くがC++C#などからの移植である)」か、「OSSとして実装されていることの取り込み」であるように思う。
Metadataは、OSSXDocletホームはこちら)などから影響を受けた仕様と思われる。

Java5のMetadataには、

  • Staticな利用
  • Dynamicな利用

の2つの利用形態が用意されている。

「スタブ生成」は、Staticな利用の代表で、旧来のJavadocの記述に近い。
わざわざ、「Javaの言語仕様にアノテーションを取り込んだ」とされているのは、後者をさしている。
Dynamicな利用では、(reflection APIを用いて)クラス内に定義されたAnnotationへのアクセスが可能になった。