Money Forward Developers Blog

株式会社マネーフォワード公式開発者向けブログです。技術や開発手法、イベント登壇などを発信します。サービスに関するご質問は、各サービス窓口までご連絡ください。

20230215130734

JJUG CCC 2024 Fallに参加しました!

こんにちは、大阪開発拠点でマネーフォワード クラウド連結会計を開発しているTaskです。 今回、JavaのカンファレンスであるJJUG CCC 2024 Fallに参加したので、聴講したセッションを紹介したいと思います!

JJUG CCC

JJUG (Japan Java User Group) CCCは年2回、春と秋に開催される国内最大級のJavaカンファレンスです。 日本全国のJavaユーザーが一堂に会し、Javaに関する良質なセッションが提供されるイベントです。

僕たちのチームではバックエンドにKotlinとSpring Bootを使っています。 一方で、JJUG CCCではJavaに限らず、Kotlinを含むJVM言語や周辺ライブラリ・フレームワークに関するセッションが豊富に用意されています。 チームの技術的な成長と知見の拡大を目指し、今回の参加を決めました。

なお、JJUG CCCは参加費無料であるため、気軽に参加できるのも良いところだと思っています1

リファクタリング耐性の高いモデルベースの統合テストの紹介

簡単に内容をまとめると「統合テストは内部実装に依存しないためリファクタリング耐性が高いこと、そして、その統合テストを効果的かつ効率的に記述するために、データ投入と検証をドメインモデルを用いて行おう」という内容でした。

データ投入に関しては、僕たちのチームでもドメインモデルをベースに事前データを準備したり、デフォルト値を用いてデータ作成を簡略化したりしています。 一方で、検証に関しては、僕たちのチームではデータベースに依存したテストコードを書いているため「確かに今後テーブルの変更を行うとテストに影響があるな」と参考になりました。

統合テストの改善の参考になる、良いセッションでした。

Spring ModulithによるDDDとEvent-driven Architectureの実践

モノリス、モジュラモノリス、マイクロサービスそれぞれの特徴や利点、欠点を説明し、Springプロジェクトの1つであるSpring Modulithを用いたモジュラモノリスの導入例を紹介するセッションでした。

僕たちのチームでも、メンバー数の増加からモジュラモノリスやマイクロサービスを検討したことがあったのですが、今回のセッションでは具体的なメリット、デメリットが説明されていたので、とても参考になりました。

Spring Modulithを使ったコード例も紹介されており、僕たちが現在使っているSpring Bootとの親和性が高いと感じました。 将来的にモジュラモノリスに移行する際には、Spring Modulithの採用を検討したいと思います。

役立つログに取り組もう

これまでログを漠然としか扱ってこなかったので、ログに関する知識を深めたいと思いこのセッションを聴講しました。

初心者向けのセッションであり、とにかくログを出力する、という基本的な部分から始まったのですが、後半に進むにつれて中級者向けの内容も取り上げられ、非常に参考になる知見を得ることができました。

特に、「ログを開発対象として認識する」ことや「読む状況を考慮する」ことは僕自身も徹底できていないので、効率的なプロダクト運用のために、改めて意識したいなと思いました。

静かに変わってきたクラスファイルを詳細に調べて楽しむ

Javaファイルのコンパイル時に生成される.classファイルの仕様変更に関するセッションでした。

クラスファイルの変更があった例として、Java 8以前とJava 9以降の文字列結合を取り上げ、Java 8以前はコンパイル時に文字列結合はStringBuilderに置換されていたこと、Java 9以降はinvokedynamic命令に置き換わったこと、その結果パフォーマンス影響が出たことを紹介いただきました。

普段、言語のバージョンアップ時には言語仕様の変更にのみ注意を向けがちなので、このような言語の裏側の話は非常に興味深かったです。

また、スピーカーの方が「クラスファイルの仕様変更については、業務に関連しないが技術的に面白いから追っている」という話をされていたのも非常に魅力的でした。

map関数の内部実装から探るJVM言語のコレクション: Scala, Kotlin, Clojureコレクションの基本的な設計を理解しよう

Scala、Kotlin、Clojureの3つのJVM言語のコレクション実装から、それぞれの言語の設計思想を考察するというセッションでした。

Kotlinは業務で、Scalaは趣味で使っており、Clojureはまったく使ったことがないという状況で臨んだのですが、イミュータブルや関数型プログラミングを重視しているKotlinとScalaが、コレクションの実装ではミュータブルな配列を多用しているのが意外でした。 (Clojureの実装は、まったくコードが読めず理解できませんでした...)

使っているデータ構造は似ているのに、設計や実装方針が異なるという事実が面白かったです。

で、ValhallaのValue Classってどうなったの?

Javaに今後追加される予定であるvalue class(Project Valhalla)の概念と現在の進捗の紹介でした。

value classの導入により、JVMがJavaの参照型をプリミティブ型と同じ方法でメモリ管理するようになり、その結果パフォーマンスの向上が期待できます。

value class導入の現在の進捗とその周辺情報(JavaへのNon-null Typeの導入)は、なかなか自分でキャッチアップできないため、このようなセッションはとても参考になりました。 今すぐにでも欲しい機能なのですが、スピーカーの方の予想だと導入はJava 30(つまり3年後)以降とのことで、少し残念な気持ちになるとともに、一日でも早く導入されることを願わずにはいられませんでした。

Project ValhallaはKotlinにも無関係ではなく、Java(JVM)へのvalue classの導入でKotlinのvalue classも同じくパフォーマンスが向上されるため、個人的にもとても期待しています。

まとめ

今回はJavaのカンファレンスであるJJUG CCCに参加したことを踏まえて、聴講したセッションと所感を紹介しました。

普段はKotlinを書いているのですが、Javaの裏側からソフトウェアアーキテクチャまで、聴講したセッションから学べることが非常に多かったと感じています。 素敵な発表を行なってくださったスピーカーの方々に、この場を借りてお礼を申し上げます。

JJUG CCCは年2回開催されているので、来年も春か秋のどちらかのイベントに参加することを今から楽しみにしています!

また、マネーフォワードではJVM言語(主にKotlin)に精通したエンジニアを積極的に募集しています! 興味がある方はカジュアル面談からお気軽にご応募ください。

hrmos.co


  1. 余談ですが、会社の制度のおかげで東京への交通費及び宿泊費は会社に負担していただけました。