Slide 1

Slide 1 text

Java 2021 Javaコミュ@福岡 きしだ なおき 2021/4/24 FUKUOKA Engineers Day 2021

Slide 2

Slide 2 text

自己紹介 • きしだ なおき • LINE Fukuoka • Twitter: @kis

Slide 3

Slide 3 text

Javaコミュ@福岡について • 年に何回か勉強会やってます(ました) • ほとぼりさめたらやりたい • 2006年に始まったっぽい

Slide 4

Slide 4 text

今日の話 • Java 17 LTSが出るよ • Java 8からどう変わってるの • Java EE? 知らない子ですね • デスクトップやモバイルは? • Java 23 LTSはどうなるの?

Slide 5

Slide 5 text

Java 17 LTSが出るよ • 2021/9にリリース予定 • 次の長期メンテナンスバージョン

Slide 6

Slide 6 text

Java 17 LTSの目玉機能(Java 11比) • Records • Text Blocks • GitHubへの移行

Slide 7

Slide 7 text

Records • Java 16で正式機能 • 構造体 • 名前付きタプル • イミュータブル record Student(int code, String name, double score) {} var s = new Student(1, "田中", 8.5); var message = "%sさんのスコアは%.1fです" .formatted(s.name(), s.score()); System.out.println(message);

Slide 8

Slide 8 text

Text Blocks • Java 15で正式機能 • 複数行文字列 var s = new Student(1, "田中", 8.5); var message = """ %s %.1f """.formatted(s.name(), s.score() ); System.out.println(message);

Slide 9

Slide 9 text

GitHubへの移行 • いままではMercurialでメーリングリストベースの開発 • Gitに移行、同時にGitHubでのPRベースの開発 https://github.com/openjdk/jdk/

Slide 10

Slide 10 text

Java 8から11でどう変わってるの? • リリースサイクルの変更 • 試用機能の導入 • GitHubへの移行 • ディストリビューションの活性化 • モジュールシステム • javacしなくても実行可

Slide 11

Slide 11 text

リリースサイクルの変更 • 6カ月ごとのリリース • 3月と9月にその時点でできてる機能をリリース • 春分の日と秋分の日 • 機能が完成してからリリースだと結局どんどん遅延 • 小さい改善を行うモチベーションが低くなる • たとえば ぬるぽのメッセージ改善 • 6バージョンごとに長期メンテナンスバージョン(LTS)を設定 • Java 11(2018.9)が最初のLTS • 次はJava 17(2021.9) • その次はJava 23(2024)

Slide 12

Slide 12 text

試用機能の導入 • 多くの人に使ってもらってフィードバックを得るために試用機 能を導入 • 言語 • preview • API • incubator • JVM • experimental • 多くのフィードバックが得られるようになった

Slide 13

Slide 13 text

ディストリビューションの活性化 • OracleのJDKは商用有償に • OpenJDKをベースにしたディストリビューションの活性化 • AdoptOpenJDK • Oracle • Oracle OpenJDK • Oracle JDK • Amazon • Corretto • Azul • Zulu • BellSoft • Liberica JDK

Slide 14

Slide 14 text

javacしなくても実行可 • 単一ソースのJavaソースはjavaコマンドで直接実行可 public class Hello { public static void main(String... args) { System.out.println("Hello!"); } } sample.java

Slide 15

Slide 15 text

Java EE? 知らない子ですね • Java SEからJava EE APIの削除 • Micro Profile • Java EEもオープンソース化

Slide 16

Slide 16 text

Java SEからJava EE APIの削除 • JAXB(XML機能)などが削除 • 外部ライブラリとして組み込む • Java 9で既存のライブラリやフレームワークが動かない 場合がある

Slide 17

Slide 17 text

MicroProfile • Java EEの開発が滞る • MicroProfile登場 • マイクロサービス用API • 対応フレームワーク • Helidon MP • Quarkus • Payara Micro • WildFly • TomEE https://microprofile.io/

Slide 18

Slide 18 text

Java EEのオープンソース化 • Jakarta EEへ • パッケージ名の変更 • javax -> Jakarta • Java EE 8 -> Jakarta EE 9 • 機能の変更なくパッケージ名のみ変更

Slide 19

Slide 19 text

デスクトップやモバイルは? • JavaFXのオープンソース化 • OpenJDKには含まれない • GraalVM • Native ImageでJavaコードをネイティブバイナリに • Gluon Mobile • JavaFXベースでモバイルアプリケーションの開発 • GraalVM Native ImageでiOS用ネイティブアプリ生成 • https://gluonhq.com/products/mobile/

Slide 20

Slide 20 text

Java 23はどうなるの? • パターンマッチング • Loom • Valhalla

Slide 21

Slide 21 text

パターンマッチング • 他の言語にあるようなパターンマッチングの導入 • すでに簡単なものは導入済み • instanceof var message = switch(s) { case Student(_, "田中", var score) -> """ 田中様のスコアは%.1f!!! """.formatted(score); case Student(_, var name, var score) -> """ %s %.1f """.formatted(name, score); System.out.println(message);

Slide 22

Slide 22 text

Loom • グリーンスレッド(JVM管理スレッド)の導入 • 通信処理を効率よく • いまはRxJavaやKotlin Coroutineを使っている

Slide 23

Slide 23 text

Valhalla • Listができるようになる • value typeの導入 • ユーザー定義の基本型 • メモリ効率がよくなる • Stream/IntStreamやOptional/OptionalIntのようなクラス不要

Slide 24

Slide 24 text

まとめ • Javaもがんばってます!