2015/05/22 このエントリーをはてなブックマークに追加 はてなブックマーク - [Java]いまだにAPTって言葉使ってるの日本人だけっぽい

[Java]いまだにAPTって言葉使ってるの日本人だけっぽい

カテゴリ:










皆さんはAPTって言葉聞いたことありませんか?

Dagger2、Android Annotations、Lombokとかああいったものを使う時に
一緒に使われるシーンがあるようです。


APTって何気なく使っている方が多くて、なんとなくひっかかりました。
APTそのものをちゃんと説明している人は少ないなーって。



APTってAnnotation Processing Toolを略したものなんですが、
この用語を使ってるのってどうやら日本人だけっぽいです。

もう少し具体的に言うと、英語圏では使われていない。
試しに、Googleで「APT Java」で検索してみましょう。出てくるのは日本人の記事ばかりです。

検索するLocaleを英語だけにするとAPT Javaでは何も出てこない。
というか、今その言葉を使っている人はいないようです。



「Annotation Processing Java」とかで英語記事だけ検索して
100サイトの内容を確認しましたが、その中でAPTって使っているのは7記事ぐらいでした。
つまり、「アノテーションでコンパイル時にええ感じにしてくれるやつ」を
APTって言ってるのは7%(僕調べ)。。


ってことで、言いたいのは古い言葉使うのやめませんか?ってことです。
…といいつつ、僕も何も考えず使ってたんですけどね(- -;)






そう、Java SE 5です。しかも非標準でした。
そもそも、APTって大文字表記もなんかおかしい感じで、
aptってコマンドが由来で、aptというツールだったようです。
コマンドを実現させるAnnotation ProcessingのAPIがcom.sun.mirrorというパッケージの
Mirror APIというものでした。



普段新しいもの追いかけて、「Java 1.5とかw」って言ってるのに
APTって言葉使い続けるのダッサイなと個人的には思います(ブーメラン)。


参考
注釈処理ツール (apt) 入門





Mirror APIのjavadocにもさりげなく
「apt ツールとそれに関連する API は、将来の J2SE リリースで変更または置き換えられる可能性があります。」
と書いてありましたが、あっさりJava SE 6で更に高機能のAPIが提供されるようになりました。


そして、javacコマンドでAnnotation Processingは出来るようになり、
「aptコマンドとは一体何だったのか」という状態になりました。
これが今主流のPluggable Annotation Processing API(JSR 269)です。


さらにJava SE 7でMirror APIは非推奨となりました。
Java SE 8では削除されています。


ココらへんに書いてあります。

http://www.wakhok.ac.jp/~tatsuo/summer2006/6th/
http://docs.oracle.com/javase/jp/7/technotes/guides/apt/index.html
http://www.oracle.com/technetwork/jp/java/javase/overview/8-compatibility-guide-2156366-ja.html




Pluggable Annotation Processing APIに関しては櫻庭さんの記事を呼んでおけば間違いないと思います笑
Java技術最前線ITpro -「Java SE 6完全攻略」第94回 アノテーションを処理する その1

Javaで注釈処理をするスタンダードとなるAPIとしてJSR 269で仕様が決定されました。





Java SE5で一瞬で消えてしまってAPTという言葉が広まったのが諸悪の根源な気がします。
そして、「Pluggable Annotation Processing」という言葉があまり認知されていないのかな…。
キャッチーさが足りなかったのか。

アノテーションプロセッサとか呼んでおくと間違いないと思います。

英語圏のサイトを100サイト眺めた個人的統計としては、Annotation Processorか
Annotation Processingって言葉がよく用いられています。


ということで、APTは使わずアノテーションプロセッサと呼びましょう、って感じで
一応結論は出たんですが、なんでAPTって言葉が出回っているのか
ちょっともやもやが残ります。

そもそもAPTは何でAnnotation Processorは何をするものなのか。

APTはaptというJavaの非標準ツールのコマンド。
今現在、Annotation Processorと呼ばれているのはPluggable Annotation Processing(JSR 269)で
aptのMirror APIに対して互換性を持って同等の機能を提供します。
Mirror APIはPluggable Annotation Processingに置き換わったという文言もありました。
詳しくはJSR呼んでみてください。


ってことはaptの2代目ってことでもあるのかな…とか思ったりもするわけですが、
aptコマンドが使われずにjavacコマンドに統合された今、プロセッサーAPIだけが残っている状態。
それはもはや「ツール」ではないのでやっぱ不自然ですよね。

「APTで動く」ではなくて「javacオプションで注釈処理が出来る」の方がしっくりきます。多分。





1つ気になったのは、Annotation Processorが結局のところ、何をやるものなのかというところです。
基本的な使われ方としてはボイラープレートコードの削減としてアノテーションを書き、
アノテーションプロセッサにコンパイル時に読み込ませてよしなにしてもらうということなんだと思います。

で、気になったのがJavaのソースコードを出力するものをAnnotation Processingとしているのか、どうなのか。
lombokに関してはソースコードを出力するわけではなく、AST(抽象構文木)をいじるので
クラスファイルをいじるということになります。

これってAnnotation Processing、古くはapt的な範疇なのかなぁという。


で、Annotation Processor関連のjavadocとかを調べると、
Javaのソースコードを出力することを想定して設計されているとのことです。

lombokはPluggable Annotaton Processing APIを内部で使っているのですが、
ちょっと微妙なところですねー。。。







APTという用語について色々と調べて書いてみました。


簡単にまとめると以下の様な感じです。


・APTって言ってるのは日本人だけ
・海外ではAnnotaton ProcessingとかAnnotation Processorとか言われてる
・Java SE 5 でaptは出来た
・Java SE 6 でPluggable Annotation Processingが出来てaptは使われなくなった
・Java SE7 でaptは非推奨になった
・Java SE8 でaptは削除された
・日本でもアノテーションプロセッサとか言っておこう


自分の使う言葉の定義は重要ですね!(ブーメラン)


ということで、自分のモヤモヤとか知識のなさはある程度
改善されました。


なんかアノテーションプロセッサでいい感じのもんを作りたいぞ!



3 件のコメント:

匿名 さんのコメント...

https://docs.oracle.com/javase/7/docs/technotes/guides/apt/GettingStarted.html

都内SE さんのコメント...

いまさらですがAPTって言ってたり(書いたり)していたうちの一人です、お恥ずかしい・・・
aptもAnnotation Processingもごちゃまぜにして
「Javaのソースコードを出力するもの」という理解でいました。
Javaで出来ることは広大ですね。これからも精進します。

匿名 さんのコメント...

知ってるよ。みんな知ってる。
けど、頭のAとPはannotation processingの略だし長くて面倒くさいし、代替できる略語もなくて。apt-getコマンドとかもあるから本当は色々ジレンマなんだけど、
そんな諸々を苦虫噛み潰しつつ「あぷと」って言っちゃってるのよwww
いちいち「じぇーえすあーるにーろくきゅー」って長いから。
PAPなんて略したらピコ太朗が頭に出てきそうだし。

コメントを投稿

GA