レガシープログラマ的に
未知のJava9について
少しだけ考えてみた。
fun-tech meetup #5
2017-11-10(金)
この発表は、
この発表は、
ラムダ式(※1)どころか
switch文で文字列を扱えない環境(※2)で
保守開発をしていたレガシープログラマが、
zJava9新機能の嬉しい度を測ったりして
いろいろと考えてみた。
(※1) Java8からの機能。気合を入れないと読めない。
(※2) Java7からString型が利用可能に。嬉しかった。
・・・という内容です。
自己紹介
※ 背景は2017年5月23日の横浜スタジアムの様子
自己紹介
@meguro_n
facebook.com/megurono
目黒 のぞみ(Meguro Nozomi)
● 都内SIer勤務(7年半くらい)
● 北海道出身(鍛高譚の生産地)
● 趣味は野球観戦(来年こそ\横浜優勝/)
● 業務でJavaや.NET系を扱う程度の能力
※ 背景は2017年5月23日の横浜スタジアムの様子
Java のリリースの歴史
↑
JDK
1.0
Java
発表
↓
JDK
1.1
↓
↑
J2SE
1.2
Playground
J2SE
1.3
Kestrel
↓
↑
J2SE
1.4
Merlin
J2SE
5.0
Tiger
↓
↑
Java
SE 6
Mustang
Java
SE 7
Dolphin
↓
↑
Java
SE 8
Java
SE9
Java のリリースの歴史
↑
JDK
1.0
Java
発表
↓
JDK
1.1
↓
↑
J2SE
1.2
Playground
J2SE
1.3
Kestrel
↓
↑
J2SE
1.4
Merlin
J2SE
5.0
Tiger
↓
↑
Java
SE 6
Mustang
Java
SE 7
Dolphin
↓
↑
Java
SE 8
Java
SE9
Java のリリースの歴史
↑
JDK
1.0
Java
発表
↓
JDK
1.1
↓
↑
J2SE
1.2
Playground
J2SE
1.3
Kestrel
↓
↑
J2SE
1.4
Merlin
J2SE
5.0
Tiger
↓
↑
Java
SE 6
Mustang
Java
SE 7
Dolphin
↓
↑
Java
SE 8
Java
SE9
Java のリリースの歴史
名称が微妙に
変わっている・・・?
↑
JDK
1.0
Java
発表
↓
JDK
1.1
↓
↑
J2SE
1.2
Playground
J2SE
1.3
Kestrel
↓
↑
J2SE
1.4
Merlin
J2SE
5.0
Tiger
↓
↑
Java
SE 6
Mustang
Java
SE 7
Dolphin
↓
↑
Java
SE 8
Java
SE9
Java のリリースの歴史
↑
JDK
1.0
Java
発表
↓
JDK
1.1
↓
↑
J2SE
1.2
Playground
J2SE
1.3
Kestrel
↓
↑
J2SE
1.4
Merlin
J2SE
5.0
Tiger
↓
↑
Java
SE 6
Mustang
Java
SE 7
Dolphin
↓
↑
Java
SE 8
Java
SE9
Java のリリースの歴史
コードネームが
あったり無かったり・・・?
バージョン名の移り変わり
1.0 ~ 1.1 ・・・ JDK
(Java Development Kit)
● Javaの実装のこと
● 実装=仕様という事でこう呼んでいた
バージョン名の移り変わり
1.2 ~ 5.0 ・・・ J2SE
(Java 2 Platform, Standard Edition)
● JDKから数えて第2版という意味
● マーケティング上の理由から
こう呼んでいた
バージョン名の移り変わり
6 ~ 現在 ・・・ Java SE
(Java Platform, Standard Edition)
● 現在の呼び方。
● Java生誕15年の際に命名規則を見直し
● ついでに番号の「.0」も廃止
Javaのコードネーム
たくさんある
Javaのコードネーム
1.2.2以降の命名規則
● メジャーリリース
⇒ 動物
● マイナーリリース
⇒ 昆虫
(バグ修正だから)
Java8から廃止。
※海外のWikipediaには
『Spider』との表記あり
Java9の次は・・・?
Java9の次は・・・?
Java SE 10
Java SE 11
・・・
Java9の次は・・・?
Java SE 10
Java SE 11
・・・
・・・ではないです。
Java9の次は・・・?
今後はタイムベースのアップデート
● 新機能は半年ごと(3月/9月)
● セキュリティフィックスは3ヶ月ごと
● 長期サポート対象は3年ごと
※ OracleJDKのみ。有償。
閑 話 休 題 。
Java9の新機能と言えば
Java9の新機能と言えば
【 Module機能 】
● いわゆる Project Jigsaw というやつ
● 脱・依存性地獄。
● 「クラスパス多過ぎ!あああ!」
というのを何とかしてくれる
● 実は2008年位から延期していた
Java9の新機能と言えば
【 Module機能 】
具体的には、
○ module-info.java(名称決め打ち)に
クラスごとの依存関係を書く
○ アクセス範囲がちゃんと決められる
⇒ 変なところで変なクラスが呼ばれたり
  謎の衝突とかが起こらなくなって良い
Java9の新機能と言えば
【 Module機能 】
レガシープログラマ的には、
Java9の新機能と言えば
【 Module機能 】
レガシープログラマ的には、
○ Java8以前と互換性が無い!
○ しかもJava8は2018年9月にEOL
○ 移行の諸々コストが半端ない予感
⇒ 想像すると辛い。
嬉しい度:★☆☆☆☆
Java9 いろんな新機能 (1)
Java9 いろんな新機能 (1)
【 JShell 】
● JavaのREPL機能
Read-Eval-Print-Loop 読んで評価して表示して繰返す
● コマンドプロンプトでサクッと実行できる
Tabキーで
入力補完もできる
Java9 いろんな新機能 (1)
【 JShell 】
レガシープログラマ的には、
 
Java9 いろんな新機能 (1)
【 JShell 】
レガシープログラマ的には、
○ メソッドを試したいけど、
ローカルのEclipse(Lunaとか)重いし…
って言うのが解消されそう?
○ しかし実はWebのREPL環境は割と在る
嬉しい度:★★☆☆☆
Java9 いろんな新機能 (2)
Java9 いろんな新機能 (2)
【 Interfaceにprivateメソッド 】
● Java8からメソッドの実装が記述可能に
(defaultメソッド・staticメソッド)
● privateなので継承しても呼び出し不可
⇒ 多分defaultメソッド等から使う目的
Java9 いろんな新機能 (2)
【 Interfaceにprivateメソッド 】
レガシープログラマ的には、
Java9 いろんな新機能 (2)
【 Interfaceにprivateメソッド 】
レガシープログラマ的には、
○ 現場でInterface設計をあまりしない
○ まずInterfaceを使っていない場合も…
○ でも多重継承が安全に出来たら便利そう
※厳密には多重継承ではないらしい 要勉強
嬉しい度:★★☆☆☆
Java9 いろんな新機能 (3)
Java9 いろんな新機能 (3)
【 try-with-resources文の改善 】
● Java7から追加された
「リソースを自動開放する」機能が
より読みやすくなった。
Java9 いろんな新機能 (3)
【 try-with-resources文の改善 】
リソースをココで定義する必要があり
ちょっと見にくかった
Java9 いろんな新機能 (3)
【 try-with-resources文の改善 】
try句の前に
finalで定義すれば良くなり
見やすくなった
Java9 いろんな新機能 (3)
【 try-with-resources文の改善 】
レガシープログラマ的には、
Java9 いろんな新機能 (3)
【 try-with-resources文の改善 】
レガシープログラマ的には、
○ リソース自動開放というだけで
大変ありがたい!!!!
でもそれ自体はJava7の追加機能だし…
嬉しい度:★★★☆☆
 
Java9 いろんな新機能 (4)
Java9 いろんな新機能 (4)
【 @Deprecatedアノテーション強化 】
● 非推奨のクラス・メソッドに
記述するアノテーションの表現力UP
● 廃止予定なのか(forRemoval)
● いつから廃止するのか(since)
Java9 いろんな新機能 (4)
【 @Deprecatedアノテーション強化 】
レガシープログラマ的には、
Java9 いろんな新機能 (4)
【 @Deprecatedアノテーション強化 】
レガシープログラマ的には、
○ CommonやUtil(よくあるクラス名)を
リファクタしたが消すのは忍びない…
そんな時によく利用したアノテーション
※アンチパターンな気が。。。
○ 廃止したい意思表示が出来るのは良い
嬉しい度:★★☆☆☆
Java9 いろんな新機能 (5)
Java9 いろんな新機能 (5)
【 JavaDocの劇的改善 】
● HTML5で記述可能に
● 検索機能の追加
Java9 いろんな新機能 (5)
【 JavaDocの劇的改善 】
Java9 いろんな新機能 (5)
【 JavaDocの劇的改善 】
超
便
利
!!!!
Java9 いろんな新機能 (5)
【 JavaDocの劇的改善 】
レガシープログラマ的には、
Java9 いろんな新機能 (5)
【 JavaDocの劇的改善 】
レガシープログラマ的には、
言葉はいらない。
ずっと待ってた。
嬉しい度:★★★★★★★
 
まとめとか感想とか
レガシープログラマ的には、
まとめとか感想とか
module機能以外は目新しいものはない
⇒ Java8の強化版、という印象
⇒ Java8を知らないとキツい
module機能は互換性が無いのがネック
⇒ 既存システムが在る現場での導入は…
※ module未使用なら互換性アリ…が、学習コストを考えると…
レガシープログラマ的には、
まとめとか感想とか
イチ開発者的には、
まとめとか感想とか
Javaってすごく進化してる!!!!
⇒ Java8以降がとてもモダン
⇒ しかもJava9でより改良されている
何だかワクワクするし、
「個人的にJava勉強し直したいな」
と素直に思えました
イチ開発者的には、
ご清聴
 ありがとう
ございました!!

【fun-tech #5】レガシープログラマ的に未知のjava9について少しだけ考えてみた。