見出し画像

JJUG CCC 2024 Fallに参加 & エンジニア大橋の登壇レポート


スマートラウンドでエンジニアをしている福本です!
10月は大きめのカンファレンスが多くて誠に忙しい。

さて本日は、10/27(日)に開催されたJavaコミュニティ”JJUG(Japan Java User Group)”のカンファレンス『JJUG CCC 2024 Fall』に参加してきたので、そのレポートを公開します!

ちなみに、スマートラウンドからはエンジニアの大橋さんが登壇しています🎉 そちらの様子と合わせてお届けできればと思います。


セッション内容

福本が参加したセッションのメモとなります👇️

Javaエンジニアのための低コストKotlin入門

Daiki Hirabayashi
KotlinはJVM言語の一つであり、Javaで培った知見を活かせる点や、Javaでおなじみの開発ツールをそのまま活用できる点も魅力です。このセッションではJavaの知識がある方向けに、IntelliJ IDEAの補完機能を活用してできるだけ少ない労力でKotlinに入門することを目指します。

一方、それだけだとハマりがちな落とし穴も存在しますので、そういった点についても説明します。

なお、このセッションではいわゆるサーバサイドKotlinを想定しており、Android開発に特有の内容は含まれていません。

IntelliJ IDEAを使って、Javaから徐々にKotlinを書いていく流れで両者の違いを理解しつつ、Kotlinへの理解を深めるセッションでした。

IntelliJ IDEAでalt + Enterでかなりの部分の置き換えや補完が済んでいて、IDEとしての優秀さを改めて実感しました。いつもお世話になっています。

ハマりどころとして、Java<>Kotlin間でコードを呼ぶ際に想定外となりそうなケースも紹介されてました。ぬるぽとかチェック例外の話ですね。

詳細については、以下の記事で解説をしていただいているみたいです。ありがたい!

オニオンアーキテクチャで実現した本質課題を解決するインフラ移行の実例

Hiroto Ryushima
オニオンアーキテクチャを採用してドメイン駆動設計を実践しているプロダクトにおいて、オニオンアーキテクチャの恩恵を受けつつ、インフラを移行し本質的課題を解決した実例を紹介し、アーキテクチャに対する理解を深めます。

RDBMSを用いたアプリケーションで集計処理におけるパフォーマンス問題が顕在化。オニオンアーキテクチャを採用していたことや層の切れ目で厚めなテストが整備されていたことにより、1ヶ月という短期間でDWHへの参照の切り替えを実装することができました。

この実例を元にオニオンアーキテクチャに適用されている依存性逆転の原則がどのような効果をもたらすのか、またそれがプロダクトの本質的な課題解決にどのようにつながるのかについて考察します。

ログラスさんのオニオンアーキテクチャの話!
ちなみに、スマートラウンドは基本的にレイヤードアーキテクチャで、一部オニオンアーキテクチャなコードがあったりするので、個人的に気になるセッションでした。

まず本題に入る前に、レイヤード/オニオンアーキテクチャのおさらいと、それらの差異(Infrastructureを外に出す)を整理していただきました。ありがてえ。

次に、今回RDB->DWH(BigQuery)に移行された背景を説明されてました。一部の参照系のパフォーマンスが劣化していたので、それをBigQueryに問い合わせるようにしたかったとのこと。

その後、実際にデータソースを切り替える際に、アプリケーション自体の改修の時間を短くできた..という「課題との向き合い方」について話をされてました。

「どの対応が本質的な課題解決なのか、どの対応は本質的でないのか」と、作業の内容を整理して、理想の状態から改善活動を振り返っているのが印象的でした👇️

スライドp.31より抜粋

ちなみに、BigQueryに移行しての具体的なパフォーマンス面の話については、以下の記事で解説いただいているみたいです👇️

プロジェクト新規参入者のリードタイム短縮の観点から見る、品質の高いコードとアーキテクチャを保つメリット

Daisuke Endo
プロジェクトが成長して参画するメンバーが増えるに従い、その個々人の既存仕様や実装のキャッチアップにかかる時間とコストは比例して大きくなっていきます。

プロダクトの大きさやドメインの複雑さにもよりますが1エンジニアが担当する領域をちゃんと理解できるようになるだけでも3〜6ヶ月はかかることが多いのではないでしょうか。

本セッションでは、ドメイン駆動設計(DDD)やオニオンアーキテクチャを用いて品質高く保たれているプロダクトコードが、リードタイム短縮にどのように寄与するのかを実体験をもとにお話しします。

セッションの主な内容は以下の通りです。(少し変わる可能性があります)
・複雑なドメインにおけるドメインモデル図の重要性
・責務がレイヤーごとにきちんと分離されていることによる恩恵
・「読まなくても良い」と信頼して取捨選択できるコード
このセッションでは以下の内容には触れません。
・ドメイン駆動設計(DDD)やアーキテクチャ自体の解説

次のログラスさんの登壇!
新入社員のコードやアーキテクチャに対するキャッチアップに関する話です。

まず冒頭に、「開発のリードタイムに、新入社員のキャッチアップの時間も実は含まれるよね?」という問題提起が。はい…。

その後、コードに対する学びを四象限で整理した上で、「どの学びを会社としてサポートできるか?」を整理して、それぞれに対するアプローチを紹介されていました。

スライドp.12より抜粋

自分が特に良いなと思ったのは、入社者にアンケートをきちんと取って、課題の理解やアプローチを決めている点ですね。エラすぎる…。

具体的なアプローチ内容については、「設計標準のドキュメント整備」や「DDD/オニオンアーキテクチャを徹底して、どこに何のコードがあるかなんとなくわかる状態を作る」などがありました。

上記のような個別のアプローチはもちろんですが、そもそもそういった活動を全社で徹底できるログラスさんの組織文化の強さを感じたセッションでした。

現場で役立つモデリング超入門

masuda220
要件定義や設計の基本スキルであるモデリングの実践技法を初学者向けにわかりやすく紹介

- なぜモデリングをするか
- 模型づくりと実物づくりの関係
- 初歩的なモデリング
- より実践的なモデリング

スマートラウンド社内でも話題だった『現場で役立つシステム設計の原則』の著者、増田さんのセッション!個人的に一番楽しみにしていました。

最初に、「そもそもモデリングとは」をたくさん話していただきました。「モデリングはモデルを作る活動であり、何かを理解したり伝えたりするための手段。キレイな図が作れたけど、結局なにかよく分からない…というのは良くない」という話は、とても腑に落ちました。

次に、「具体的にモデリングをどう進めていくか」という話。

「モデリングは”言葉探し”と”言葉選び”」とおっしゃっていたのがすべてを表していて、モデルをうまく表現するためにどう言葉を使うか・探すか…という話をされていました。言葉は脳の連想ゲームなので、それを逆手に取るとうまい進め方が見つかりそう。

モデリングを進める話の後、「モデルを接地させる」という話がありました。言葉選びのセンスがすごい…。モデルはある対象をある側面から簡略化したものに過ぎないので、本質的にモデルは実態とかけ離れている(= モデル設置問題)とおっしゃってました。

他のモデルと比較/一般化されたモデルうまく使って整合性を検証していくなど、じっくりモデルと現実と向き合うことで改善を進めていく、その数を増やすのが重要みたいです。

スライドp.24から抜粋

内容が言葉でなかなか伝わらない部分もあるので、ぜひ登壇資料をご覧くださいー!増田さんありがとうございました👏

LangChain4j を使った 生成AIシステム設計パターン - Java で構築する最新アーキテクチャ

鏡味秀行
ChatGPTなどの生成AIツールは体験済みでも、今後実際にシステムに組み込むとなると、何をおさえておけば良いか心配ではありませんか? 生成AI技術の進化は速く、必要な機能やアーキテクチャを掴むのが大変と感じる方も多いでしょう。

このセッションでは、Javaによる生成AIライブラリ`LangChain4j`を例に、生成AIシステムを構成する要素を分かりやすく解説します。Spring AIやSemantic Kernelなど類似ライブラリとの比較も交えながら、LLMモデルの選択、データパイプラインの構築、エージェント設計など、エンタープライズシステムへの導入に必要な知識を説明します。

対象者:
- Javaの基礎知識があり、生成AIシステムに興味がある方
- ChatGPT等は使ったことがあるが、生成AIシステム開発の経験はない方
- 今後、プロジェクトに生成AIを取り入れる可能性がある方
このセッションで得られること:
- LangChain4jを通じて、Java言語による生成AIシステムの構築方法を理解できます。
- 生成AIシステムの設計パターンを習得し、今後の開発に活かせます。

今LLMの話をしたな…??
というわけで、生成AI系のセッションです🤖

まずはJavaに関するLangChainのフレームワークであるLangChain4jの大まかなアーキテクチャについて説明があり、その後は抽象化されたAI Services / Function Callingについて話をしていただきました。

その後はRAG(Retrieval-Augmented Generation)に関する技術の解説と、それをLangChain4jでの扱う方法について解説がありました。AgentEmbeddingなどもLangChain4jで実装されてて使えるみたいで、必要十分な感じがあります👇️

スライドp.42から抜粋

LLMやAIといえばPythonなイメージがありますが、Javaもかなり環境が整っていることが理解できました。やってみたい!

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

lagenorhynque(大橋さん)
プログラミングにおいてデータの集合を扱うというのは最も基本的で日常的なことのひとつであり、JVM言語においても多種多様なコレクションとそれらに対する共通の関数/メソッドが標準提供されています。

コレクションに対する代表的な汎用関数mapの内部実装を読むことを通して、複数のJVM言語のコレクションの設計を比較しながら探ってみましょう。

既存のコレクションを扱う新たな関数/メソッドや独自のコレクションを実装するヒントが見つかるはずです。

いよいよスマートラウンド大橋さんの登壇👏
この人ずっとmapの話してます。会場は立ち見も出るほどの超満員でした 🎉

まず、Javaのmap関数について大まかに解説した後に、Scala/Kotlin/Clojureの3つの言語でのmapおよびコレクションについての実装や考え方を見ていきました。なんてマニアックなんだ…。

スライドp.26より抜粋

その後、その差異からいろいろな示唆をまとめてくれていました。Clojureのターンで何も分からない人になっていたのでありがたい。

同じJVM言語でも、各言語で思想が全然違うのと、内部実装でそれらが読み解けるの非常に面白かったです!お疲れ様でした👏

ちなみに、 サーバサイドKotlinの勉強会であるServer-Side Kotlin Meetupで、別観点でJVM言語の比較を大橋さんがやってくれています。興味のある方はぜひ👇️

ブース🏪

おまけです。
空いた時間で企業さんのブースにも立ち寄らせていただきました🙌

私がノベルティオタクなので、色々と目移りしながら色んな方と交流させていただきました。私のお相手をしていただいた方ありがとうございました!

ノベルティオタクにはたまらないサムライズムさんのブース

夕方に行ったら、Oracleさんの期間限定バッグがギリギリで貰えたりなど…。運が良い…。

こんな感じで、全力でJJUGを楽しむことができました!お疲れさまでした🙌

その他の資料

自分は参加できませんでしたが、TLに流れてきた資料をこちらに置いておきます👇️後から見つけたら随時追加していきます。

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

テストが正しいかテストする?Mutation Testing入門!

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

Java x Spring Boot製アプリケーションのコールドスタートに立ち向かう!〜暖機運転のアプローチいろいろやってみた〜

マイクロサービス時代のワークフローシステムについて

EventSourcingの理想と現実

シールドクラスをはじめよう


Googleのテストサイズを活用したテスト環境の構築

SpringBoot x MyBatis x TestContainersでSQLテストを行う

先輩社員がどうやって不具合を解決しているのか

ソースコードの読み方を理解してコーディングを楽しむ

モダンJava再入門ハンズオン - Java in Education For JUGs -

新卒2年目エンジニアが LINEギフトの保守性を 高めるために取り組んだこと

クレディセゾンにおける内製開発の取り組み

Jakarta Concurrencyによる並行処理プログラミングの始め方

端末が簡単にリモートから操作されるデモを通じて ソフトウェアサプライチェーン攻撃対策の重要性を理解しよう

Java Agent経由で簡単に混沌を注入しよう

JJUG_CCC_2024 プロダクトが変われば、テストも変わる

CI/CDやテスト自動化の開発プロジェクトへの適用

Java Webフレームワークの現状

開発効率向上のためのリファクタリングの一歩目の選択肢 ~コード分割~

詳細解説! ArrayListの仕組みと実装

Boost Performance and Developer Productivity with Jakarta EE 11

最近のSpring Bootの便利機能を復習!

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

失敗しないOpenJDKの非互換調査

役立つログに取り組もう

Java ジェネリクス入門 2024

外部システム連携先が10を超えるシステムでのアーキテクチャ設計・実装事例

Vavrのすすめ

【ブースLT】ソフトウェア産業は進化しているのか? -Javaの想い出とともに


おわりに

ここまで読んでいただいた皆さま、ありがとうございました!

今さらですが、私自身はKotlinでプロダクト開発を1年半ほど経験しており、Javaでお仕事をした経験自体はまだありません。大学でJavaをやっていた程度の知識で、楽しめるのか少し不安がありましたが、セッションのほとんどがKotlinと通ずる箇所があり(互換あるので当然ですが)、とても楽しむことができました🙌

改めてですが、運営の方々や登壇者の方々、本当にありがとうございました & お疲れ様でした!

スマートラウンドでもKotlinでサーバサイドを頑張っているので、もし興味のある方はぜひお話しましょう🤝

この記事が参加している募集