※このブログは ヌーラボブログリレー2023 for Tech Advent Calendar の17日目の記事です。
こんにちは、Apps課のgillaxです。
私が所属するチームでは、ヌーラボアカウントやNulab Passの開発や、弊社マーケティングチームが使うGoogle Analytics、MixpanelやSalesforceといったマーケティングツールとユーザーのアカウント情報や契約情報を連携させる部分の開発を行っています。
このブログでは、ヌーラボアカウントがリリースされてから現在に至るまで、どのようにJavaと関わってきたのかについて整理し、今後Javaとどうお付き合いしていくのかについてチームにアンケートをとった結果について書こうと思います。
なお、こちらはJJUG CCC 2023 Spring報告会 in 福岡のLTで話した内容に加筆修正したものになります。
目次
ヌーラボアカウントとJavaの歴史
リリースされてからJava 9まで
ヌーラボアカウントは「ヌーラボのサービスを一つのパスワードで。」というコンセプトのもと、2014年2月にヌーラボサービスのSSOサービス・認証基盤としてリリースされました。このとき開発言語として採用されたのがJava 7でした。
また、その1ヶ月後にはJava 8がGAとなったため、ヌーラボアカウントも早速2014年5月にはJava 8への移行を完了しています。
その後空白の3年間を経て、2017年9月にJava 9がGAとなることを受けて、ヌーラボアカウントもJava 9移行の検証を行いました。
この時点では、移行するメリットをあまり享受できないとの考えから、次期LTSであったJava 11を移行ターゲットとして、Java 9については見送る決断をしました。
Kotlinとの出会い
それから1年間、ヌーラボアカウントは全面デザインリニューアルという長期開発を行っており、その際に、せっかくリニューアルするならあたらしいことに挑戦したい、より簡潔にコードを書きたい、Null Safetyええやん!という欲求から、Javaと共存ができ、IDE(IntelliJ)でコーディングサポートもあるKotlinというJVM言語に心を奪われていきました。
ここから、Appsチームでは「新規実装はKotlinで。既存のJavaプログラムはゆるくKotlinへ移行していこう」という選択をします。
その後、2018年12月にAmazon Correttoが8のサポート期限を2026年5月まで延長するということを発表したため、Oracle JDKからCorrettoに移行し、そのまま現在に至っています。
また、2020年8月にリリースしたNulab Passについては、一部を除いてほぼほぼKotlinで開発しています。
Java 17対応の必要性
しかし、現時点でヌーラボアカウントが利用しているSpring Frameworkは6系においてベースラインがJava 17になったりとJavaのバージョンアップは避けようがないところまできてしまっています。そのため、2023年9月にGAとなったJava 21を目標に、まずはJava 17への移行を目指していこうというところで現在計画をすすめています。
Javaかい?Kotlinなのかい?どっちなんだい?
長いことJavaをさぼっていたわれわれですが、現在のJavaを見ると、例えばRecordクラスやSealedクラス、ローカル変数の型推論、Switch式、Switchでのパターンマッチングなど、「簡潔に書きたい」というだけならKotlinと大差なく書けるような気がします。
そこで、実際にKotlinのどこがいいの?また、何があればJavaに戻りたくなる?というのをチームにアンケートに答えてもらいました。
まずはKotlinのどこがいいの?という問いでは、全てのメンバーがJavaより簡潔に書けることに投票しました。
- 簡潔に書けるのでコードリーディングしやすい
- 書いていて楽しい
- 書き味が気持ちいいので仕事が快適
という意見もありました。
また、ほぼ全員がNull Safetyがよいと答えています。
逆にデメリットですが、コンパイルが遅いという他、Javaと併用したときの検査例外(@Throws忘れがち)、null許容型とジェネリクスの相性がイマイチというものがありました。
また、Javaにどういう機能やサポートが追加されたらKotlinをやめてJavaに戻るかというアンケートでは、Null Safety、拡張関数・拡張プロパティという意見がありました。
最後に、今後Appsチームで使用する言語はどれがよいか?という問いでは、概ねKotlinに軍配があがりました。
これから
ヌーラボアカウントは現在Java 17へ(そしてJava 21へ)の移行を計画中です。また、Appsチームの開発言語はしばらくはKotlinの予定ですが、執筆時点のAppsチームが管理しているファイル数の割合はJavaとKotlinで4:6となっており、完全にKotlinに移行するまでには至っていません。今後もJavaやJVM言語の動きに注目しながら検討していきたいと思います。