2015/05/28 このエントリーをはてなブックマークに追加 はてなブックマーク - Java SEのパッケージを独断と偏見だけで断捨離する

Java SEのパッケージを独断と偏見だけで断捨離する









Javaの歴史も20年。
脈々と後方互換が守られてバージョンが上がってるわけですが、
ライブラリも豊富になっていき、覚えることも増えてきている気がします。

だけど、逆に今さら覚えなくても良いものもたくさんあるんじゃないか。
という疑問が浮かんできました。


それに加えて、個人的なことだけど、
Javaの色々を調べるうちにだんだんJavaが分からなくなった。
ので、全体図を俯瞰してみたくなりました。

ということで、Java SE のパッケージを眺めるのが良いかと思い、
それぞれ見ていくことにします。



とりあえず、JDKの中身をあさってみます。







Oracleのjdk 1.8.0_40





javadocで提供されているのは

・orgパッケージ
・javaパッケージ
・javaxパッケージ

http://docs.oracle.com/javase/jp/8/docs/api/



src.zipに含まれているのは

・comパッケージ
・javaパッケージ
・javaxパッケージ
・launcherパッケージ
・orgパッケージ



rt.jarに含まれているのは

・comパッケージ
・javaパッケージ
・javaxパッケージ
・jdkパッケージ
・orgパッケージ
・sunパッケージ
(あとMETA-INF)







基本的にはjavadocで提供されているものを使えって感じで良いと思います。





src.zipとrt.jarでsunパッケージがあったり無かったりするのは
ソースコード(.javaや.h)ファイルをどこまで提供するかって話だと思います。
runtimeではinternalに使ってるのかな。

と思ったけど、Oracleのサイトにsrc.zipについて説明があった

src.zipはJavaプログラミング言語のソースのJavaコアAPIを構成するすべてのクラス用のファイル
(つまり、 Java用のソース。java.*、javax。およびいくつかのorg.*。com.sun.*を除いた) 。
このソースコードは、開発者がJavaを学ぶのとJavaを利用するのを補助する目的のみです。
これらのファイルは、プラットフォーム固有の実装コードは含まれていませんし、
クラスライブラリを再構築するために使用することはできません。
http://www.oracle.com/technetwork/java/javase/jdk-7-readme-429198.html

ただ、com.sunもsrc.zipにちょっと含まれているので謎だ。。

ちなみにsrc.zipに含まれているlaunchにはjavaの実行時に使われているC言語っぽいものがあった。
.hファイルとかだし、多分。








ということで、
・orgパッケージ
・javaパッケージ
・javaxパッケージ
を知ってればまぁ良い気がします。


各パッケージを眺めた結果も書いておきます。
※長いので、最下部に掲載。





最終的に必須と判断したのは


・java.io
・java.lang
・java.lang.reflect
・java.math
・java.nio
・java.nio.charset
・java.nio.charset.spi
・java.nio.file
・java.nio.file.attribute
・java.nio.file.spi
・java.text
・java.time
・java.time.format
・java.util
・java.util.function
・java.util.regex
・java.util.stream
・javax.annotation



それ以外も、もちろん捨てがたいというか知っておくべきものもたくさんあるけど、
JavaのAPIを最小限必要なものに絞ってみるとこんな感じな気がする。
あと、単純にパッケージで区切れるものでもないし、OSSライブラリ使ったり
することに確実になるので、微妙なところではあります。


また、パッケージ単位でしか見てないので、
パッケージの中にはdeperecatedなクラスも混ざってたり…、
とかそこら辺は全然ノーチェックです。。。




思い切って削ったのはアプレット、awt、swing、RMI、CORBA。
アプレットはJava登場した初期こそもてはやされたけど、
現在だと脆弱性見つかったりとか、そもそも使わないと思います。
デスクトップアプリケーションはawtやswingとか使わず、JavaFXでやろう(で良いと思う。)






ご意見いただきました。








java.awtをアプレットを使わないからという理由で
バッサリ切るのは違うみたいですね。
awtパッケージにはアプレット関連以外でも色々なライブラリがあります。
そこらへんJavaFXで全部網羅されてないかなぁとか
テキトーなことを思ってたんですが、そういうわけでもなく。
そもそも「アプレットはもう使わない」から「java.awtパッケージは使わない」ってのは
論理的ではないですね_(:3」∠)_


JavaFXがヘッドレスで動かない。ヘッドレスというのはキーボードとかマウスとかを
接続しないでマウス操作、キーボード操作をするってことですね、おそらく。

確かに、java.awtパッケージにはマウス操作とかキーボード操作用のAPIがあります。


(追記その1ここまで)


・・・・・・・・・・・・・・



またまた、きしださんにコメントいただきました。
ヘッドレスはグラフィックカードが無い状態をイメージすると良いと。
なるほど、なんとなく分かってきました笑
グラフィックとかがJavaFXでは生成出来ないってかんじですかね。。

java.awtではヘッドレスモードみたいなものがあって設定で選択出来るようです。

櫻庭さんが以前に書いていたみたいですね。

Features of Java2 SDK, Standard Edition, v1.4 - Java in the Box







RMI、CORBAに関してもJavaのサーバーサイドだとEJBがその代りをするのではないでしょうか。
古いシステムとかで言語関係なくシステム連携するという縛りがあれば使うかもしれないけど。



CORBA関連のJava技術について - 達人プログラマーを目指して




Concurrency Utilities、XML操作(DOM、SAX、StAX)、JAX-WS、SOAP、JAXB、
セキュリティ関連、暗号化、ImageI/Oなどなどは要件によっては使う必要が出てくるので、
必要に応じて。






JDBC部分もあまり触らないとは思うけど、解析したり
するとき当然根幹になるから知っとくべきだと思います。


MIDIとかSound系とかはなかなか使わんだろうなぁ。




しんさんがこの辺りに対してコメントくれてるんですけど、
面白いなぁと思います。


動くアプリケーションとかゲームとか目線でお話されてるんだと思います。
僕はエンプラっていうかサーバーサイドのJavaとかなんかところを起点に
優先順位を考えてるので、取捨選択も違うなぁと。
こんな記事書いてますが、そんな簡単に捨てられるものでもないしなぁ…笑




(追記その2ここまで)


・・・・・・・・・・・・・・



Java技術最前線
Reader/Writer/InputStream/OutputStream - 裏紙
JJUGのエキスパートが語るエンタープライズ・アーキテクチャの過去、現在、未来──SOAP・RESTからIoT・ウェアラブルまで
Javaメモ目次(Hishidama's Java Memo)




ホントに個人的に分類してみました。
今後、ツッコミがあったりとか必要性を感じたら修正していきます。多分。

2015/05/31にツッコミを受けて、java.awtのところを修正してます。
かなりざっくりな修正。知識なくてスミマセン…。



個人的な指標値
1.必須
2.知っておくべき
3.必要に応じて
4.古い技術だが必要に応じて
5.特殊な機能
6.今後使わないだろうもの






 javaパッケージ





番号javaパッケージ備考 since 優先度
1 java.ioIO操作の基本1.0 1
2 java.lang javaの基本1.0 1
3 java.lang.reflectリフレクション1.1 1
4 java.math算術計算 1.1 1
5 java.nio Buffer処理 1.4 1
6 java.nio.charset charset関連1.4 1
7 java.nio.charset.spi charset関連1.4 1
8 java.nio.fileNew I/O 2 1.7 1
9 java.nio.file.attribute New I/O 2 1.7 1
10java.nio.file.spi New I/O 2 1.7 1
11java.textテキスト操作 1.1 1
12java.time Date and Time1.8 1
13java.time.format Date and Time1.8 1
14java.utilユーティリティ1.0 1
15java.util.function関数インターフェース 1.8 1
16java.util.regex正規表現 1.4 1
17java.util.stream Stream API1.8 1
18java.nio.channelsチャネル操作1.4 2
19java.nio.channels.spi NIO1.4 2
20java.text.spiテキスト操作 1.6 2
21java.time.chrono Date and Time1.8 2
22java.time.temporalDate and Time1.8 2
23java.time.zone Date and Time1.8 2
24java.util.concurrent Concurrency Utilities1.5 2
25java.util.concurrent.atomic Concurrency Utilities1.5 2
26java.util.concurrent.locksConcurrency Utilities1.5 2
27java.util.loggingロギング 1.4 2
28java.util.spi ユーティリティのサービスプロバイダ 1.6 2
29java.net ネットワーク関連 1.0 3
30java.securityセキュリティ関連 1.1 3
31java.security.acl セキュリティ関連 1.1 3
32java.security.certセキュリティ関連1.2 3
33java.security.interfaces RSA 1.1 3
34java.security.specセキュリティ関連1.2 3
35java.util.zipzip1.1 3
36java.lang.annotation アノテーション関連の定義 1.5 4
37java.lang.instrument JVMの計測 1.5 4
38java.lang.management JMXとか1.5 4
39java.sql SQL 1.1 4
40java.util.prefs KVS(キーバリューストア) 1.4 4
41java.lang.invoke invoke dynamic関連 1.7 5
42java.lang.refGCと対話するとき。1.2 5
43java.util.jarJAR操作1.2 5
44java.applet アプレットは今後使わない 1.0 6
45java.awt ヘッドレス環境での操作などJavaFXで賄えないものは使う 1.0 4
46java.awt.color JavaFXで賄えないものは使う 1.2 4
47java.awt.datatransferJavaFXで賄えないものは使う 1.1 4
48java.awt.dnd JavaFXで賄えないものは使う 1.2 4
49java.awt.event JavaFXで賄えないものは使う 1.1 4
50java.awt.fontJavaFXで賄えないものは使う 1.2 4
51java.awt.geomJavaFXではJava2Dは大体出来ないので使う 1.2 4
52java.awt.im JavaFXで賄えないものは使う 1.2 4
53java.awt.im.spi JavaFXで賄えないものは使う 1.3 4
54java.awt.image JavaFXで賄えないものは使う 1.2 4
55java.awt.image.renderable JavaFXで賄えないものは使う 1.2
56java.awt.print JavaFXで賄えないものは使う 1.2 4
57java.beansJavaBeansの死活管理?でもあんまり使わないと思う 1.2 5
58java.beans.beancontext JavaBeansの死活管理?でもあんまり使わないと思う 1.2 5
59java.rmi RMI 1.1 6
60java.rmi.activation RMI起動1.2 6
61java.rmi.dgc RMIのGC 1.1 6
62java.rmi.registry RMIレジストリ 1.1 6
63java.rmi.server RMIのサーバ側 1.1 6


 javaxパッケージ





番号javaxパッケージ備考since優先度
64javax.imageioImageI/O 1.4 2
65javax.imageio.event ImageI/O 1.4 2
66javax.imageio.metadata ImageI/O 1.4 2
67javax.imageio.plugins.bmp ImageI/O 1.5 2
68javax.imageio.plugins.jpegImageI/O 1.4 2
69javax.imageio.spi ImageI/O 1.4 2
70javax.imageio.stream ImageI/O 1.4 2
71javax.crypto 暗号化関連1.4 3
72javax.crypto.interfaces 暗号化関連1.4 3
73javax.crypto.spec 暗号化関連1.4 3
74javax.naming JNDI関連 1.3 3
75javax.naming.directory JNDI関連 1.3 3
76javax.naming.eventJNDI関連 1.3 3
77javax.naming.ldap JNDI関連 1.3 3
78javax.naming.spi JNDI関連 1.3 3
79javax.net ネットワーク(ソケット通信) 1.4 3
80javax.net.sslネットワーク(ソケット通信) 1.4 3
81javax.security.auth セキュリティ関連 1.4 3
82javax.security.auth.callback 認証コールバック 1.4 3
83javax.security.auth.kerberos ケルベロス認証 1.4 3
84javax.security.auth.login ログイン認証 1.4 3
85javax.security.auth.spi サービスインターフェース 1.4 3
86javax.security.auth.x500 x500プリンシパル1.4 3
87javax.security.cert 公開鍵 1.4 3
88javax.security.sasl SASL 1.5 3
89javax.transaction.xa JTAトランザクション 1.4 3
90javax.xml.namespace XML関連不明3
91javax.xml.parsers DOMとSAX 不明3
92javax.xml.stream XML関連不明3
93javax.xml.stream.events XML関連不明3
94javax.xml.stream.utilXML関連不明3
95javax.xml.transform XML関連不明3
96javax.xml.transform.dom XML関連不明3
97javax.xml.transform.sax XML関連不明3
98javax.xml.transform.stax StAX 1.6 3
99javax.xml.transform.streamXML関連不明3
100 javax.xml.validation XML関連不明3
101 javax.accessibility アクセスルール 1.2 4
102 javax.activation SOAP 不明4
103 javax.jws SOAP 1.6 4
104 javax.jws.soap SOAP 1.6 4
105 javax.lang.model SOAP 1.6 4
106 javax.lang.model.element SOAP 不明4
107 javax.lang.model.typeSOAP 1.6 4
108 javax.lang.model.utilJMX 1.5 4
109 javax.management JMX 1.5 4
110 javax.management.loading JMX 1.5 4
111 javax.management.modelmbean JMX 1.5 4
112 javax.management.monitor JMX 1.5 4
113 javax.management.openmbeanJMX 1.5 4
114 javax.management.relation JMX 1.5 4
115 javax.management.remote JMX 1.5 4
116 javax.management.remote.rmi JMX 1.5 4
117 javax.management.timer JMX 1.5 4
118 javax.print 印刷API1.4 4
119 javax.print.attribute印刷API1.4 4
120 javax.print.attribute.standard 印刷API1.4 4
121 javax.print.event 印刷API1.4 4
122 javax.sql SQL 1.4 4
123 javax.sql.rowset SQL 不明4
124 javax.sql.rowset.serial SQL 不明4
125 javax.sql.rowset.spi SQL 不明4
126 javax.xml JAXB 不明4
127 javax.xml.bind JAXB 不明4
128 javax.xml.bind.annotation JAXB 不明4
129 javax.xml.bind.annotation.adaptersJAXB 不明4
130 javax.xml.bind.attachment JAXB 不明4
131 javax.xml.bind.helpers JAXB 不明4
132 javax.xml.bind.util JAXB 不明4
133 javax.xml.crypto XML暗号化 1.6 4
134 javax.xml.crypto.dom XML暗号化 1.6 4
135 javax.xml.crypto.dsigXML暗号化 1.6 4
136 javax.xml.crypto.dsig.dom XML暗号化 1.6 4
137 javax.xml.crypto.dsig.keyinfoXML暗号化 1.6 4
138 javax.xml.crypto.dsig.specXML暗号化 1.6 4
139 javax.xml.datatypeXML関連不明4
140 javax.xml.soap SOAP 不明4
141 javax.xml.ws JAX-WS 不明4
142 javax.xml.ws.handler JAX-WS 不明4
143 javax.xml.ws.handler.soap JAX-WS 不明4
144 javax.xml.ws.http JAX-WS 不明4
145 javax.xml.ws.soap JAX-WS 不明4
146 javax.xml.ws.spi JAX-WS 不明4
147 javax.xml.ws.spi.httpJAX-WS 不明4
148 javax.xml.ws.wsaddressing JAX-WS 不明4
149 javax.xml.xpath JAX-WS 1.5 4
150 javax.annotation PostConstructとか 不明5
151 javax.annotation.processing Pluggable Annotation Processing API 1.6 5
152 javax.script スクリプトエンジン 1.6 5
153 javax.sound.midi MIDI 1.3 5
154 javax.sound.midi.spi MIDI 1.3 5
155 javax.sound.sampled サウンド 1.3 5
156 javax.sound.sampled.spi サウンド 1.3 5
157 javax.tools Compiler操作など 1.6 5
158 javax.activity ORBの例外 1.5 6
159 javax.rmi RMI IIOP 不明6
160 javax.rmi.CORBA RMI CORBA 不明6
161 javax.rmi.sslSSL 1.5 6
162 javax.swing Swingは今後使わない 1.2 6
163 javax.swing.border同上 1.2 6
164 javax.swing.colorchooser 同上 1.2 6
165 javax.swing.event 同上 1.2 6
166 javax.swing.filechooser同上 1.2 6
167 javax.swing.plaf 同上 1.2 6
168 javax.swing.plaf.basic 同上 1.2 6
169 javax.swing.plaf.metal 同上 1.2 6
170 javax.swing.plaf.multi 同上 1.2 6
171 javax.swing.plaf.nimbus 同上 1.7 6
172 javax.swing.plaf.synth 同上 1.2 6
173 javax.swing.table 同上 1.2 6
174 javax.swing.text 同上 1.2 6
175 javax.swing.text.html同上 1.2 6
176 javax.swing.text.html.parser 同上 1.2 6
177 javax.swing.text.rtf 同上 1.2 6
178 javax.swing.tree 同上 1.2 6
179 javax.swing.undo 同上 1.2 6
180 javax.transaction ORBトランザクション 1,3 6


 orgパッケージ






番号orgパッケージ備考since優先度
181 org.w3c.dom DOM 不明3
182 org.w3c.dom.bootstrapDOM 不明3
183 org.w3c.dom.eventsDOM 不明3
184 org.w3c.dom.ls DOM 不明3
185 org.w3c.dom.views DOM 不明3
186 org.xml.sax SAX 不明3
187 org.xml.sax.ext SAX 不明3
188 org.xml.sax.helpers SAX 不明3
189 org.ietf.jgssセキュリティ関連 1.4 5
190 org.omg.CORBA古いシステムでもない限りは不要。 1.2 6
191 org.omg.CORBA.DynAnyPackage 同上 1.2 6
192 org.omg.CORBA.ORBPackage 同上 1.2 6
193 org.omg.CORBA.portable 同上 1.2 6
194 org.omg.CORBA.TypeCodePackage 同上 1.2 6
195 org.omg.CORBA_2_3 同上 1.3 6
196 org.omg.CORBA_2_3.portable 同上 1.3 6
197 org.omg.CosNaming 同上 1.3 6
198 org.omg.CosNaming.NamingContextExtPackage 同上 1.4 6
199 org.omg.CosNaming.NamingContextPackage 同上 1.4 6
200 org.omg.Dynamic 同上 1.4 6
201 org.omg.DynamicAny 同上 1.4 6
202 org.omg.DynamicAny.DynAnyFactoryPackage 同上 1.4 6
203 org.omg.DynamicAny.DynAnyPackage 同上 1.4 6
204 org.omg.IOP 同上 1.4 6
205 org.omg.IOP.CodecFactoryPackage 同上 1.4 6
206 org.omg.IOP.CodecPackage 同上 1.4 6
207 org.omg.Messaging 同上 1.4 6
208 org.omg.PortableInterceptor 同上 1.4 6
209 org.omg.PortableInterceptor.ORBInitInfoPackage 同上 1.4 6
210 org.omg.PortableServer 同上 1.4 6
211 org.omg.PortableServer.CurrentPackage同上 1.4 6
212 org.omg.PortableServer.POAManagerPackage 同上 1.4 6
213 org.omg.PortableServer.POAPackage 同上 1.4 6
214 org.omg.PortableServer.portable 同上 1.4 6
215 org.omg.PortableServer.ServantLocatorPackage 同上 1.4 6
216 org.omg.SendingContext 同上 1.3 6
217 org.omg.stub.java.rmi同上 1.3 6







今回はJavaのパッケージの中で必要なもの、必要でないものを考えてみました。
また、必要なものに関しても優先度の指標値を個人的につけてみました。
なにか具体的に根拠のあるものでもなく、完全に主観です。

なので、ツッコミしてもらえれば考え直すこともいっぱい出てくるだろうなぁ。。

こういう、暇人な作業してたおかげで、ちょっとだけどこに何があるかとか
こんなクラスがあるんだ〜とか勉強になりました!





4 件のコメント:

  1. headlessな描画やるのに、JavaFXでは無理で、java.awtが必要になるのよねー

    返信削除
    返信
    1. >きしださん

      コメント有難うございます!普通に嬉しいです笑

      そうですね、色々考えなおして仰るとおりだと思います。
      今日記事の見直しをさせていただきました。

      内容がまだ雑ですが。。

      削除
  2. ヘッドレス、簡単にいうと、グラフィックカードがささってない状態をいいます。

    返信削除
    返信
    1. >きしださん
      うっ…(^^;
      また、追記しました。多分認識は正しくなってきたはず!です!

      削除