2021/4/24に開催されたFUKUOKA Engineer Day 2021での登壇資料です
Java 2021Javaコミュ@福岡 きしだ なおき2021/4/24 FUKUOKA Engineers Day 2021
View Slide
自己紹介• きしだ なおき• LINE Fukuoka• Twitter: @kis
Javaコミュ@福岡について• 年に何回か勉強会やってます(ました)• ほとぼりさめたらやりたい• 2006年に始まったっぽい
今日の話• Java 17 LTSが出るよ• Java 8からどう変わってるの• Java EE? 知らない子ですね• デスクトップやモバイルは?• Java 23 LTSはどうなるの?
Java 17 LTSが出るよ• 2021/9にリリース予定• 次の長期メンテナンスバージョン
Java 17 LTSの目玉機能(Java 11比)• Records• Text Blocks• GitHubへの移行
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);
Text Blocks• Java 15で正式機能• 複数行文字列var s = new Student(1, "田中", 8.5);var message = """%s%.1f""".formatted(s.name(), s.score());System.out.println(message);
GitHubへの移行• いままではMercurialでメーリングリストベースの開発• Gitに移行、同時にGitHubでのPRベースの開発https://github.com/openjdk/jdk/
Java 8から11でどう変わってるの?• リリースサイクルの変更• 試用機能の導入• GitHubへの移行• ディストリビューションの活性化• モジュールシステム• javacしなくても実行可
リリースサイクルの変更• 6カ月ごとのリリース• 3月と9月にその時点でできてる機能をリリース• 春分の日と秋分の日• 機能が完成してからリリースだと結局どんどん遅延• 小さい改善を行うモチベーションが低くなる• たとえば ぬるぽのメッセージ改善• 6バージョンごとに長期メンテナンスバージョン(LTS)を設定• Java 11(2018.9)が最初のLTS• 次はJava 17(2021.9)• その次はJava 23(2024)
試用機能の導入• 多くの人に使ってもらってフィードバックを得るために試用機能を導入• 言語• preview• API• incubator• JVM• experimental• 多くのフィードバックが得られるようになった
ディストリビューションの活性化• OracleのJDKは商用有償に• OpenJDKをベースにしたディストリビューションの活性化• AdoptOpenJDK• Oracle• Oracle OpenJDK• Oracle JDK• Amazon• Corretto• Azul• Zulu• BellSoft• Liberica JDK
javacしなくても実行可• 単一ソースのJavaソースはjavaコマンドで直接実行可public class Hello {public static void main(String... args) {System.out.println("Hello!");}}sample.java
Java EE? 知らない子ですね• Java SEからJava EE APIの削除• Micro Profile• Java EEもオープンソース化
Java SEからJava EE APIの削除• JAXB(XML機能)などが削除• 外部ライブラリとして組み込む• Java 9で既存のライブラリやフレームワークが動かない場合がある
MicroProfile• Java EEの開発が滞る• MicroProfile登場• マイクロサービス用API• 対応フレームワーク• Helidon MP• Quarkus• Payara Micro• WildFly• TomEEhttps://microprofile.io/
Java EEのオープンソース化• Jakarta EEへ• パッケージ名の変更• javax -> Jakarta• Java EE 8 -> Jakarta EE 9• 機能の変更なくパッケージ名のみ変更
デスクトップやモバイルは?• JavaFXのオープンソース化• OpenJDKには含まれない• GraalVM• Native ImageでJavaコードをネイティブバイナリに• Gluon Mobile• JavaFXベースでモバイルアプリケーションの開発• GraalVM Native ImageでiOS用ネイティブアプリ生成• https://gluonhq.com/products/mobile/
Java 23はどうなるの?• パターンマッチング• Loom• Valhalla
パターンマッチング• 他の言語にあるようなパターンマッチングの導入• すでに簡単なものは導入済み• instanceofvar 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);
Loom• グリーンスレッド(JVM管理スレッド)の導入• 通信処理を効率よく• いまはRxJavaやKotlin Coroutineを使っている
Valhalla• Listができるようになる• value typeの導入• ユーザー定義の基本型• メモリ効率がよくなる• Stream/IntStreamやOptional/OptionalIntのようなクラス不要
まとめ• Javaもがんばってます!