entry-header-eye-catch.html
entry-title-container.html

entry-header-author-info.html
Article by

2年目エンジニアが行った技術選定のプロセスを公開します!

はじめましての方ははじめまして。ピクシブで Scala エンジニアとして働いている Javakky です。

突然ですが、ピクシブのエンジニア職組織で行っている「プロセス評価」とはご存知でしょうか?

現在では少し異なりますが、過去の活動についての記事はこちら ↓↓↓

inside.pixiv.blog

ピクシブのエンジニア職組織、「エンジニアギルド」では全エンジニアがチームの垣根を越えて開発や意思決定のプロセスを交換しあう「ギルド 1on1 面談」というものがあります。

この面談は毎月の初週ごろに、所属している全エンジニアによって行われます。

内容としては、前月に行ったプロジェクトのうち、特に意思決定のプロセスに関与したものなどについて背景・課題・取り組み・理由・内容などをまとめた資料を用意し、それぞれ 30分程度で紹介するというものです。

発表が終わったらお互いにフィードバックを行い、それぞれ数行程度評価コメントを記入します。

ここで話された内容やフィードバックは、エンジニアとしての評価にも反映されていきます。

エンジニアギルド面談資料

せっかくなので、今回の記事では過去に弊チームで行った JDK のディストリビューション移行についての資料を読みやすくしたものを用意しました。

実際の資料はもう少し箇条書きが多かったり、章割りが固定されていたりしますが、「こういうプロセスで技術選定をしてるんだな〜」「こういう内容をエンジニア間で交換しているのか〜」くらいに読んでいただけると幸いです。

また、もう1つ注意事項として、以下の内容は弊チームが技術選定に用いたプロセスや資料をまとめたものになりますので、実際に移行を行う際にはチーム内で要検討ください。

JDK って何?

JDK は Java Development Kit の略で、開発用の Java 環境です。ここにはコンパイラや実行コマンド、各種ツールなどが同梱されています。

以前は JRE (Java Runtime Edition) というユーザー向け実行環境が配布されていましたが、JDKの新しいリリース・モデルになってからはアプリケーションに JRE がバンドルされるようになったため、現在では Java をダウンロード といえば JDK を指すことが多いでしょう。

Oracle JDK (8~16) 有償化

前項でも軽く触れましたが、JDKの新しいリリース・モデルが適用されたことにより、 Oracle JDK (これまで Oracle 社が提供していた JDK バイナリ) が有償化され、 GPLv2 ライセンスにて Oracle Open JDK が配布されるようになりました。

https://www.oracle.com/jp/technical-resources/article/java/ja-topics/jdk-release-model.htmwww.oracle.com

これにより、Oracle JDK を利用するにはアプリケーションの開発や JDK そのものの開発など一部の用途を除き Oracle 系の JDK (8~16) は有償サポートの利用が必要になりました。

www.oracle.com

JDK 17〜

ここで1つ補足ですが、 Oracle JDK 17 以降はふたたび無償ライセンスによる提供が行われています。弊チームでは諸般の事情から JDK 8 を利用する必要がありましたのでディストリビューションの移行を行いましたが、最新の JDK を利用する場合には Oracle JDK も視野に入れた方が良いと思います。

www.oracle.com

www.publickey1.jp

Open JDK

Open JDK はオープンソースな Java の共同実装です。

github.com

しかし、 Open JDK のページにあるバイナリは JDK 実装者向けリファレンスとしての利用のみに限定されています。

These binaries are provided for use by implementers of the Java SE 8 Platform Specification and are for reference purposes only.

そこで、各社がこれをビルド・サポートしているものが Open JDK ディストリビューションと呼ばれるものになります。

英語版 Wikipedia に早見表があります。

en.wikipedia.org

当時の Oracle JDK 利用状況

Oracle JDK 8 の有償サポートは Oracle JDK 8u211 (2019年4月) 以降のバージョンが対象となっているため、 8u131 以前のバージョン利用はライセンス上問題ありませんでしたが、年単位で過去のバージョンを利用している状況でした。

本番環境:

java.runtime.name: Java(TM) SE Runtime Environment
java.vm.version: 25.131-b11
java.vm.vendor: Oracle Corporation

開発環境:

java.runtime.name: Java(TM) SE Runtime Environment
java.vm.version: 25.51-b03
java.vm.vendor: Oracle Corporation

その間にも JDK の脆弱性は報告されており、現在直接のインシデントが発生していないにせよ最新でないバージョンを利用することには大きなリスクが懸念されていました。

www.ipa.go.jp

Adoptium vs Corretto

そこで、いくつかの無償で利用できる Open JDK へ各種環境を移行することにしました。

検討した条件としては、

  • JDK 8 のサポート期間が長い (4〜5年)
  • 無償で商用利用可能なこと
  • Open JDK の認証を受けていること

が挙げられます。

この中で、特に使い勝手のよさそうな JDK として Amazon社の提供している CorrettoEclipse財団などによって提供されている Adoptium が候補として絞られました。

aws.amazon.com

adoptium.net

ところで、 AdoptOpenJDK というディストリビューションに聞き覚えがある方もいるのではないでしょうか?実は、弊チームでも一部ローカルの開発環境ではこちらの JDK を利用していました。 2021年 7月 24日より、 AdoptOpenJDK は Eclipse 財団に移行され、 Adoptim となりました。

adoptopenjdk.net

閑話休題。

結論から言うと弊チームでは Amazon Corretto 8 を採用することになりました。

元々 AdoptOpenJDK を利用していたこともあり、当初は Adoptium の採用を中心に移行を検討していたのですが、当時は移行直後で deb/apt 系のリリースが公開されていなかったなど先行きに不安があったため Corretto の採用に決まりました。

ちなみに、この記事執筆時点で確認したところ、バッチリ公開されていたので、これからの移行を検討している場合にはこの懸念は払拭されたと言えそうです。

adoptium.net

Azul Zulu

Azul Zulu Community Edition も候補として検討しましたが、 Community Edition (Zulu) のサポート期間が明示されていなかったため上記 2つの JDK を検討することにしました。

Azul Platform Core の JDK 8 は 2030年までサポートするとのことだったので、そちらに準拠しているのであれば使ってみてもいいかもしれないです。

www.azul.com www.azul.com www.azul.com

移行作業

各種サーバーに JDK をインストールし、 JAVA_HOME の指定を変更しました。 (実際には直接コマンドを実行しているわけではないです)

sudo apt-get install -y java-1.8.0-amazon-corretto-jdk
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-amazon-corretto"

前項で少し触れたとおり、各メンバーのローカル環境では AdoptOpenJDK が利用されていたため、各メンバーへの移行依頼も行いました。

docs.aws.amazon.com

CVE-2022-21449

今年 4月に重大な JDK の脆弱性が発見されたことでニュースになったことは記憶に新しいと思います。こちらの問題に対しても、 Corretto 移行プロジェクトが完了していたことで、速やかにアップデート対応を行うことができました。

www.itmedia.co.jp

www.ipa.go.jp

結果・学び

JDK 8 のディストリビューションを Oracle JDK から Amazon Corretto に移行したことで、ライセンス違反などをせずに最新のバージョン を利用できるようになりました。

また、各種ベンダーの JDK やオラクルのライセンスについて改めて調べたことで、 Open JDK がどのように運営されているかを学ぶことができました。

まとめ

いかがでしたか?このブログでは、今後もエンジニアギルドの取り組みやそこで発表された技術的なプロセスについて投稿していく予定です!

また、エンジニア組織としてのピクシブに興味を持っていただけた方は、ぜひ一緒に働いてみませんか?

www.pixiv.co.jp

icon
javakky
決済周りの改善を中心に働いている2021年入社エンジニア。その名の通りJavaが好きなことで有名(?)で、最近はScalaを使える部署へ入ったらしい。