BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース MinecraftのJDK 16マイグレーションから今年を振り返る - MojangチームとのQ&A

MinecraftのJDK 16マイグレーションから今年を振り返る - MojangチームとのQ&A

ブックマーク

原文(投稿日:2021/12/29)へのリンク

今年も間もなく終わりを迎えて、好むと好まざるに関わらず、2021年を振り返ることになる。特にJavaの世界において、言及すべき出来事のひとつとして挙げられるのが、switchのパターンマッチング、新たなベクタAPIsealedクラスなどの機能を備えたLTSバージョンであるJDK 17がリリースされたことだ。このリリースでは、新機能のひとつであるAppCDS(Application and Class Data Sharing)と、パフォーマンスの向上した新たなG1ガベージコレクタがよって、ノーマル状態におけるパフォーマンスの向上を約束している。Java 17のリリース日が明確になる中、Minecraftのチームは、それに先行してJDK 16にマイグレーションする決定をした。Minecraftが現在はMicrosoftの一部であり、新たに開発されるJREを使用するであろうことを考えると、この決定はさらに興味深いものになる。InfoQは今回、Java 16を先行して製品投入しようというMojangチームに、彼らの経験と得られたメリットをより深く理解すべく話を聞くことにした。

InfoQ: Java 17のリリースが間近に迫る状況の下で、あえてJava 16に移行した理由は何だったのでしょう?Java 17へは移行したのでしょうか、あるいはその予定はありますか?どのバージョンから移行したのでしょうか?

Mojangチーム:

私たちは以前から、Javaのリリースバージョンが出る毎に(メインブランチとは別のブランチで)対応を行ってきました。Java 16は私たちに、起動時間やメモリ管理、コード実行に関して、すぐに使用可能な状態での大幅な性能向上をもたらしてくれたのです。varやswitch式、テキストブロックといった新機能によって、開発者の生産性も大きく向上しました!

Java 17に関しては、現在Microsoftが評価を進めています。LTSリリースなので、将来的に対応版をロールアウトするのはもちろんですが、明確な期日は現時点では確約できません。

InfoQ: マイグレーションプロセスについて教えてください。作業はスムーズに進んだのでしょうか、どれ位の時間を要しましたか?

Mojangチーム:

メジャーバージョン毎に最新の状態を保つことによって、ビッグバンマイグレーションを回避していたので、それほどの困難はありませんでした。マイグレーションで苦労したのはJava 8からJava 11への移行の時でした。モジュールシステムの導入によって、JDK内部へのアクセスに関するセキュリティ管理が強化されたことで、当時それを使用していたサードパーティ製の依存関係が影響を受けたためです。
本格的にJavaを運用しているサイトには、各メジャーリリースに対応するように、CI/CDをセットアップしておくことをお勧めします。そうすることで、依存関係とコードを段階的にアップデートして、新機能を活用できるようになります。こうした対応を常に行っておけば、リリース毎に、比較的小さなアップデートコストで大きなメリットを得られますよ!

InfoQ: JDK 16を実稼働させてからしばらく経ちますが、それまでのセットアップと比較して、どのような点が改善されましたか?

Mojangチーム:

AppCDSによる起動時間の短縮によって、最初から大幅なパフォーマンスの向上が実現できました。G1ガベージコレクタの文字列重複排除機能によるメモリ効率の向上や、長時間のGC停止が少なくなったことによるエクスペリエンスの向上などの他にも、小さな改善点がたくさんあります。運用面からも、アップグレードの価値はありますね!

InfoQ: Java 16を使ってみて、期待外れだったことは何かありますか?

Mojangチーム:

期待に反した部分は特にありませんでした — とてもうまくいっています。ひとつ興味深かったのは、modコミュニティが新しい言語機能を取り入れる早さです。彼らの反応はほとんどが肯定的なものでした。最新の機能にアクセスできるということは、開発者の生産性にとって非常に重要なのです!

InfoQ: どのJavaビルドを使用しているのでしょう、Microsoftのものですか?そうでしたら、使った感想を教えてください。

Mojangチーム:

Microsoft BuildのOpenJDKです。Microsoftは長期にわたって、Javaに多大な投資をしています(2019年のjClarity買収など)。Microsoftには非常にレベルの高いエンジニアリンググループがあって、これまでにもJava自体に対して多大な貢献をしています(Windows ARMへの移植など)。彼らとはMinecraft愛も共有しています。本当によい仲間を持ったと思いますね。

InfoQ: マイグレーションに取り組む中で、技術的に最も難しかった課題は何でしたか?

Mojangチーム:

大きな課題が3つありました。

  1. まずひとつは、LWGL(Lighweight Java Gaming Library)などのサードパーティ製の依存関係を、すべてJava 16をサポートするバージョンにアップデートすることでした。
  2. 変更したUIツールキットやフォント、サウンドなどの互換性を確認する必要があったのです。
  3. 新たな変更を最大限に活用するように、新しいガベージコレクタや他のJVMチューニングパラメータを再設定することも必要でした。

InfoQ: マイグレーションを行う前に知っておきたかった、と思ったことは何でしたか?

Mojangチーム:

ガイドやブログ記事はいくつかありますが、バージョン毎のマイグレーションに関する正式なソースがありませんでした。障害というほどではないにせよ、情報をかき集めてつなぎ合わせなくてはなりませんでした。MicrosoftのJava 8から11への移行ガイドが役に立ちましたね。

InfoQ: 今後の予定を教えてください。

Mojangチーム:

Javaに関してのみ言えば、今後もMicrosoftのJava Engineering Groupと協力して、新たなJavaバージョンのリリース毎にテストを続ける予定です。安定性、パフォーマンス向上、開発者の生産性向上に満足が行けば、間違いなく導入することになるでしょう!

現時点で具体的なロードマップについて話すことはできませんが、OpenJDKベンダに提案されている2年間というLTSサイクルをMicrosoftがサポートしてくれることで、以前よりも定期的にアップグレードを行うことができる、という自信を持てるようになりました。

大半の企業がLTSリリースのアップグレードをターゲットにする中で、現在はMicrosoftカンパニーであるMinecraftは、Java 16へのアップグレードをあえて実施した。AppCDSによる起動時間の短縮、G1ガベージコレクタの文字列重複排除によるメモリ効率の向上、GCに起因する長時間停止の減少によってスムーズさを増したエクスペリエンスなど、性能面における期待からだ。

さらには、新たな言語の追加が、modコミュニティからも歓迎されている — "彼らの反応はほとんどが肯定的なものでした。最新の機能にアクセスできるということは、開発者の生産性にとって非常に重要なのです!" これまでよりもエレガントなコードを、より速く書くことができるようになるのは間違いない。

作者について

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT