55
レガシープログラマ的に 未知のJava9について 少しだけ考えてみた。 fun-tech meetup #5 2017-11-10(金)

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

  • Upload
    -

  • View
    5.095

  • Download
    1

Embed Size (px)

Citation preview

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

レガシープログラマ的に未知のJava9について少しだけ考えてみた。

fun-tech meetup #5

2017-11-10(金)

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

この発表は、

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

この発表は、

ラムダ式(※1)どころかswitch文で文字列を扱えない環境(※2)で保守開発をしていたレガシープログラマが、zJava9新機能の嬉しい度を測ったりしていろいろと考えてみた。

(※1) Java8からの機能。気合を入れないと読めない。

(※2) Java7からString型が利用可能に。嬉しかった。

・・・という内容です。

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

自己紹介

※ 背景は2017年5月23日の横浜スタジアムの様子

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

自己紹介

@meguro_nfacebook.com/megurono

目黒 のぞみ(Meguro Nozomi)

● 都内SIer勤務(7年半くらい)

● 北海道出身(鍛高譚の生産地)

● 趣味は野球観戦(来年こそ\横浜優勝/)

● 業務でJavaや.NET系を扱う程度の能力

※ 背景は2017年5月23日の横浜スタジアムの様子

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

Java のリリースの歴史

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

↑JDK1.0

Java発表↓

JDK1.1↓

↑J2SE1.2

Playground

J2SE1.3

Kestrel

↑J2SE1.4

Merlin

J2SE5.0Tiger

↑JavaSE 6

Mustang

JavaSE 7Dolphin

↑JavaSE 8

JavaSE9

Java のリリースの歴史

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

↑JDK1.0

Java発表↓

JDK1.1↓

↑J2SE1.2

Playground

J2SE1.3

Kestrel

↑J2SE1.4

Merlin

J2SE5.0Tiger

↑JavaSE 6

Mustang

JavaSE 7Dolphin

↑JavaSE 8

JavaSE9

Java のリリースの歴史

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

↑JDK1.0

Java発表↓

JDK1.1↓

↑J2SE1.2

Playground

J2SE1.3

Kestrel

↑J2SE1.4

Merlin

J2SE5.0Tiger

↑JavaSE 6

Mustang

JavaSE 7Dolphin

↑JavaSE 8

JavaSE9

Java のリリースの歴史

名称が微妙に変わっている・・・?

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

↑JDK1.0

Java発表↓

JDK1.1↓

↑J2SE1.2

Playground

J2SE1.3

Kestrel

↑J2SE1.4

Merlin

J2SE5.0Tiger

↑JavaSE 6

Mustang

JavaSE 7Dolphin

↑JavaSE 8

JavaSE9

Java のリリースの歴史

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

↑JDK1.0

Java発表↓

JDK1.1↓

↑J2SE1.2

Playground

J2SE1.3

Kestrel

↑J2SE1.4

Merlin

J2SE5.0Tiger

↑JavaSE 6

Mustang

JavaSE 7Dolphin

↑JavaSE 8

JavaSE9

Java のリリースの歴史

コードネームがあったり無かったり・・・?

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

バージョン名の移り変わり

1.0 ~ 1.1 ・・・ JDK(Java Development Kit)

● Javaの実装のこと

● 実装=仕様という事でこう呼んでいた

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

バージョン名の移り変わり

1.2 ~ 5.0 ・・・ J2SE(Java 2 Platform, Standard Edition)

● JDKから数えて第2版という意味

● マーケティング上の理由からこう呼んでいた

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

バージョン名の移り変わり

6 ~ 現在 ・・・ Java SE(Java Platform, Standard Edition)

● 現在の呼び方。

● Java生誕15年の際に命名規則を見直し

● ついでに番号の「.0」も廃止

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

Javaのコードネーム

たくさんある

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

Javaのコードネーム

1.2.2以降の命名規則

● メジャーリリース ⇒ 動物

● マイナーリリース ⇒ 昆虫 (バグ修正だから)

Java8から廃止。※海外のWikipediaには 『Spider』との表記あり

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

Java9の次は・・・?

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

Java9の次は・・・?

Java SE 10

Java SE 11

・・・

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

Java9の次は・・・?

Java SE 10

Java SE 11

・・・

・・・ではないです。

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

Java9の次は・・・?

今後はタイムベースのアップデート

● 新機能は半年ごと(3月/9月)

● セキュリティフィックスは3ヶ月ごと

● 長期サポート対象は3年ごと※ OracleJDKのみ。有償。

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

閑 話 休 題 。

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

Java9の新機能と言えば

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

Java9の新機能と言えば

【 Module機能 】

● いわゆる Project Jigsaw というやつ

● 脱・依存性地獄。

● 「クラスパス多過ぎ!あああ!」というのを何とかしてくれる

● 実は2008年位から延期していた

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

Java9の新機能と言えば

【 Module機能 】

具体的には、

○ module-info.java(名称決め打ち)にクラスごとの依存関係を書く

○ アクセス範囲がちゃんと決められる

⇒ 変なところで変なクラスが呼ばれたり  謎の衝突とかが起こらなくなって良い

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

Java9の新機能と言えば

【 Module機能 】

レガシープログラマ的には、

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

Java9の新機能と言えば

【 Module機能 】

レガシープログラマ的には、

○ Java8以前と互換性が無い!

○ しかもJava8は2018年9月にEOL

○ 移行の諸々コストが半端ない予感

⇒ 想像すると辛い。

嬉しい度:★☆☆☆☆

 

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

Java9 いろんな新機能 (1)

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

Java9 いろんな新機能 (1)

【 JShell 】

● JavaのREPL機能Read-Eval-Print-Loop 読んで評価して表示して繰返す

● コマンドプロンプトでサクッと実行できる

Tabキーで入力補完もできる

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

Java9 いろんな新機能 (1)

【 JShell 】

レガシープログラマ的には、

 

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

Java9 いろんな新機能 (1)

【 JShell 】

レガシープログラマ的には、

○ メソッドを試したいけど、ローカルのEclipse(Lunaとか)重いし…

って言うのが解消されそう?

○ しかし実はWebのREPL環境は割と在る

嬉しい度:★★☆☆☆

 

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

Java9 いろんな新機能 (2)

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

Java9 いろんな新機能 (2)

【 Interfaceにprivateメソッド 】

● Java8からメソッドの実装が記述可能に(defaultメソッド・staticメソッド)

● privateなので継承しても呼び出し不可⇒ 多分defaultメソッド等から使う目的

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

Java9 いろんな新機能 (2)

【 Interfaceにprivateメソッド 】

レガシープログラマ的には、

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

Java9 いろんな新機能 (2)

【 Interfaceにprivateメソッド 】

レガシープログラマ的には、

○ 現場でInterface設計をあまりしない

○ まずInterfaceを使っていない場合も…

○ でも多重継承が安全に出来たら便利そう

※厳密には多重継承ではないらしい 要勉強

嬉しい度:★★☆☆☆

 

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

Java9 いろんな新機能 (3)

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

Java9 いろんな新機能 (3)

【 try-with-resources文の改善 】

● Java7から追加された「リソースを自動開放する」機能がより読みやすくなった。

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

Java9 いろんな新機能 (3)

【 try-with-resources文の改善 】

リソースをココで定義する必要があり ちょっと見にくかった

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

Java9 いろんな新機能 (3)

【 try-with-resources文の改善 】

try句の前に finalで定義すれば良くなり 見やすくなった

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

Java9 いろんな新機能 (3)

【 try-with-resources文の改善 】

レガシープログラマ的には、

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

Java9 いろんな新機能 (3)

【 try-with-resources文の改善 】

レガシープログラマ的には、

○ リソース自動開放というだけで大変ありがたい!!!!でもそれ自体はJava7の追加機能だし…

嬉しい度:★★★☆☆

 

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

Java9 いろんな新機能 (4)

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

Java9 いろんな新機能 (4)

【 @Deprecatedアノテーション強化 】

● 非推奨のクラス・メソッドに記述するアノテーションの表現力UP

● 廃止予定なのか(forRemoval)

● いつから廃止するのか(since)

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

Java9 いろんな新機能 (4)

【 @Deprecatedアノテーション強化 】

レガシープログラマ的には、

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

Java9 いろんな新機能 (4)

【 @Deprecatedアノテーション強化 】

レガシープログラマ的には、

○ CommonやUtil(よくあるクラス名)をリファクタしたが消すのは忍びない…そんな時によく利用したアノテーション※アンチパターンな気が。。。

○ 廃止したい意思表示が出来るのは良い

嬉しい度:★★☆☆☆

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

Java9 いろんな新機能 (5)

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

Java9 いろんな新機能 (5)

【 JavaDocの劇的改善 】

● HTML5で記述可能に

● 検索機能の追加

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

Java9 いろんな新機能 (5)

【 JavaDocの劇的改善 】

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

Java9 いろんな新機能 (5)

【 JavaDocの劇的改善 】

超便利!!!!

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

Java9 いろんな新機能 (5)

【 JavaDocの劇的改善 】

レガシープログラマ的には、

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

Java9 いろんな新機能 (5)

【 JavaDocの劇的改善 】

レガシープログラマ的には、

言葉はいらない。

ずっと待ってた。

嬉しい度:★★★★★★★

 

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

まとめとか感想とか

レガシープログラマ的には、

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

まとめとか感想とか

module機能以外は目新しいものはない

⇒ Java8の強化版、という印象 ⇒ Java8を知らないとキツい

module機能は互換性が無いのがネック

⇒ 既存システムが在る現場での導入は…※ module未使用なら互換性アリ…が、学習コストを考えると…

レガシープログラマ的には、

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

まとめとか感想とか

イチ開発者的には、

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

まとめとか感想とか

Javaってすごく進化してる!!!!

⇒ Java8以降がとてもモダン ⇒ しかもJava9でより改良されている

何だかワクワクするし、「個人的にJava勉強し直したいな」と素直に思えました

イチ開発者的には、

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

ご清聴

 ありがとう

ございました!!