![見出し画像](https://assets.st-note.com/production/uploads/images/159457172/rectangle_large_type_2_74fc7d535dc422752297bafba09c124a.png?width=1200)
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としての優秀さを改めて実感しました。いつもお世話になっています。
IntelliJ IDEA が優秀すぎるのでなあ #JJUG #jjug_ccc #jjug_ccc_l
— 福本 晃之/Teruhisa Fukumoto (@terry_i_) October 27, 2024
ハマりどころとして、Java<>Kotlin間でコードを呼ぶ際に想定外となりそうなケースも紹介されてました。ぬるぽとかチェック例外の話ですね。
詳細については、以下の記事で解説をしていただいているみたいです。ありがたい!
オニオンアーキテクチャで実現した本質課題を解決するインフラ移行の実例
Hiroto Ryushima
オニオンアーキテクチャを採用してドメイン駆動設計を実践しているプロダクトにおいて、オニオンアーキテクチャの恩恵を受けつつ、インフラを移行し本質的課題を解決した実例を紹介し、アーキテクチャに対する理解を深めます。
RDBMSを用いたアプリケーションで集計処理におけるパフォーマンス問題が顕在化。オニオンアーキテクチャを採用していたことや層の切れ目で厚めなテストが整備されていたことにより、1ヶ月という短期間でDWHへの参照の切り替えを実装することができました。
この実例を元にオニオンアーキテクチャに適用されている依存性逆転の原則がどのような効果をもたらすのか、またそれがプロダクトの本質的な課題解決にどのようにつながるのかについて考察します。
ログラスさんのオニオンアーキテクチャの話!
ちなみに、スマートラウンドは基本的にレイヤードアーキテクチャで、一部オニオンアーキテクチャなコードがあったりするので、個人的に気になるセッションでした。
まず本題に入る前に、レイヤード/オニオンアーキテクチャのおさらいと、それらの差異(Infrastructureを外に出す)を整理していただきました。ありがてえ。
「コアなものがコアでない(外部サービスなど)に依存している」わかりみある #JJUG #jjug_ccc #jjug_ccc_j
— 福本 晃之/Teruhisa Fukumoto (@terry_i_) October 27, 2024
次に、今回RDB->DWH(BigQuery)に移行された背景を説明されてました。一部の参照系のパフォーマンスが劣化していたので、それをBigQueryに問い合わせるようにしたかったとのこと。
参照系はQueryService、更新系はRepositoryで投げてる #JJUG #jjug_ccc #jjug_ccc_j pic.twitter.com/9l1n1Qa4sS
— 福本 晃之/Teruhisa Fukumoto (@terry_i_) October 27, 2024
その後、実際にデータソースを切り替える際に、アプリケーション自体の改修の時間を短くできた..という「課題との向き合い方」について話をされてました。
「どの対応が本質的な課題解決なのか、どの対応は本質的でないのか」と、作業の内容を整理して、理想の状態から改善活動を振り返っているのが印象的でした👇️
![](https://assets.st-note.com/img/1729995901-beGRsliC1OkFS9gI603Wj8Hh.png?width=1200)
ちなみに、BigQueryに移行しての具体的なパフォーマンス面の話については、以下の記事で解説いただいているみたいです👇️
プロジェクト新規参入者のリードタイム短縮の観点から見る、品質の高いコードとアーキテクチャを保つメリット
Daisuke Endo
プロジェクトが成長して参画するメンバーが増えるに従い、その個々人の既存仕様や実装のキャッチアップにかかる時間とコストは比例して大きくなっていきます。
プロダクトの大きさやドメインの複雑さにもよりますが1エンジニアが担当する領域をちゃんと理解できるようになるだけでも3〜6ヶ月はかかることが多いのではないでしょうか。
本セッションでは、ドメイン駆動設計(DDD)やオニオンアーキテクチャを用いて品質高く保たれているプロダクトコードが、リードタイム短縮にどのように寄与するのかを実体験をもとにお話しします。
セッションの主な内容は以下の通りです。(少し変わる可能性があります)
・複雑なドメインにおけるドメインモデル図の重要性
・責務がレイヤーごとにきちんと分離されていることによる恩恵
・「読まなくても良い」と信頼して取捨選択できるコード
このセッションでは以下の内容には触れません。
・ドメイン駆動設計(DDD)やアーキテクチャ自体の解説
次のログラスさんの登壇!
新入社員のコードやアーキテクチャに対するキャッチアップに関する話です。
まず冒頭に、「開発のリードタイムに、新入社員のキャッチアップの時間も実は含まれるよね?」という問題提起が。はい…。
その後、コードに対する学びを四象限で整理した上で、「どの学びを会社としてサポートできるか?」を整理して、それぞれに対するアプローチを紹介されていました。
![](https://assets.st-note.com/img/1729996463-UYFzEMeGZDkIVL4y2l13WXsH.png?width=1200)
自分が特に良いなと思ったのは、入社者にアンケートをきちんと取って、課題の理解やアプローチを決めている点ですね。エラすぎる…。
アンケート取ってるの偉い #jjug_ccc_c #jjug_ccc #jjug_ccc_j
— 福本 晃之/Teruhisa Fukumoto (@terry_i_) October 27, 2024
具体的なアプローチ内容については、「設計標準のドキュメント整備」や「DDD/オニオンアーキテクチャを徹底して、どこに何のコードがあるかなんとなくわかる状態を作る」などがありました。
上記のような個別のアプローチはもちろんですが、そもそもそういった活動を全社で徹底できるログラスさんの組織文化の強さを感じたセッションでした。
現場で役立つモデリング超入門
masuda220
要件定義や設計の基本スキルであるモデリングの実践技法を初学者向けにわかりやすく紹介
- なぜモデリングをするか
- 模型づくりと実物づくりの関係
- 初歩的なモデリング
- より実践的なモデリング
スマートラウンド社内でも話題だった『現場で役立つシステム設計の原則』の著者、増田さんのセッション!個人的に一番楽しみにしていました。
最初に、「そもそもモデリングとは」をたくさん話していただきました。「モデリングはモデルを作る活動であり、何かを理解したり伝えたりするための手段。キレイな図が作れたけど、結局なにかよく分からない…というのは良くない」という話は、とても腑に落ちました。
モデリングにはいかに簡略化するか、余計な詳細を持たないようにするかが重要 #jjug_ccc_c1 #jjug_ccc_g
— 福本 晃之/Teruhisa Fukumoto (@terry_i_) October 27, 2024
次に、「具体的にモデリングをどう進めていくか」という話。
「モデリングは”言葉探し”と”言葉選び”」とおっしゃっていたのがすべてを表していて、モデルをうまく表現するためにどう言葉を使うか・探すか…という話をされていました。言葉は脳の連想ゲームなので、それを逆手に取るとうまい進め方が見つかりそう。
言葉探し・選びが脳の連想ゲームと仮定すると、脳に履いている・入り得る知識によって状況が変わる。なので、その状況に合わせてモデリングの進め方を切り替えるのが大事なんだなあと。 #jjug_ccc #jjug_ccc_g
— 福本 晃之/Teruhisa Fukumoto (@terry_i_) October 27, 2024
モデリングを進める話の後、「モデルを接地させる」という話がありました。言葉選びのセンスがすごい…。モデルはある対象をある側面から簡略化したものに過ぎないので、本質的にモデルは実態とかけ離れている(= モデル設置問題)とおっしゃってました。
他のモデルと比較/一般化されたモデルうまく使って整合性を検証していくなど、じっくりモデルと現実と向き合うことで改善を進めていく、その数を増やすのが重要みたいです。
![](https://assets.st-note.com/img/1730031473-qND1FpaU5rGwYLnOxeoIgbBi.png?width=1200)
内容が言葉でなかなか伝わらない部分もあるので、ぜひ登壇資料をご覧くださいー!増田さんありがとうございました👏
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について話をしていただきました。
JSONモード、はやくClaudeでも実装されて欲しい。「他に何もわないでください」とか「AsssistantでJSONの開始括弧を指定する」で頑張るのめんどくさい #jjug_ccc #jjug_ccc_j
— 福本 晃之/Teruhisa Fukumoto (@terry_i_) October 27, 2024
その後はRAG(Retrieval-Augmented Generation)に関する技術の解説と、それをLangChain4jでの扱う方法について解説がありました。AgentやEmbeddingなどもLangChain4jで実装されてて使えるみたいで、必要十分な感じがあります👇️
![](https://assets.st-note.com/img/1730007349-KGjwoLxR4XcvSiCEtWVa5m1B.png?width=1200)
LLMやAIといえばPythonなイメージがありますが、Javaもかなり環境が整っていることが理解できました。やってみたい!
自分に関して言うと、会社がKotlinカンパニーなのでできる限りKotlinでLLMに関するコードを書いていきたいんですよね。LangChain4jのお話、これからの希望が持ててありがたい。ありがとうございました! #jjug_ccc #jjug_ccc_j
— 福本 晃之/Teruhisa Fukumoto (@terry_i_) October 27, 2024
map関数の内部実装から探るJVM言語のコレクション: Scala, Kotlin, Clojureコレクションの基本的な設計を理解しよう
lagenorhynque(大橋さん)
プログラミングにおいてデータの集合を扱うというのは最も基本的で日常的なことのひとつであり、JVM言語においても多種多様なコレクションとそれらに対する共通の関数/メソッドが標準提供されています。
コレクションに対する代表的な汎用関数mapの内部実装を読むことを通して、複数のJVM言語のコレクションの設計を比較しながら探ってみましょう。
既存のコレクションを扱う新たな関数/メソッドや独自のコレクションを実装するヒントが見つかるはずです。
いよいよスマートラウンド大橋さんの登壇👏
この人ずっとmapの話してます。会場は立ち見も出るほどの超満員でした 🎉
\キャー カマイルカサーン/ #jjug_ccc_j #jjug_ccc pic.twitter.com/Uz5ROI7BvK
— 福本 晃之/Teruhisa Fukumoto (@terry_i_) October 27, 2024
まず、Javaのmap関数について大まかに解説した後に、Scala/Kotlin/Clojureの3つの言語でのmapおよびコレクションについての実装や考え方を見ていきました。なんてマニアックなんだ…。
![](https://assets.st-note.com/img/1730011607-gNnIrqvjfWlR4Y1wtH36sXMS.png?width=1200)
その後、その差異からいろいろな示唆をまとめてくれていました。Clojureのターンで何も分からない人になっていたのでありがたい。
Clojureなんもわからん #jjug_ccc #jjug_ccc_j
— 福本 晃之/Teruhisa Fukumoto (@terry_i_) October 27, 2024
同じJVM言語でも、各言語で思想が全然違うのと、内部実装でそれらが読み解けるの非常に面白かったです!お疲れ様でした👏
ちなみに、 サーバサイドKotlinの勉強会であるServer-Side Kotlin Meetupで、別観点でJVM言語の比較を大橋さんがやってくれています。興味のある方はぜひ👇️
ブース🏪
おまけです。
空いた時間で企業さんのブースにも立ち寄らせていただきました🙌
私がノベルティオタクなので、色々と目移りしながら色んな方と交流させていただきました。私のお相手をしていただいた方ありがとうございました!
![](https://assets.st-note.com/img/1730017864-c67thjwyAMDnEmvp48ICYSFO.png?width=1200)
夕方に行ったら、Oracleさんの期間限定バッグがギリギリで貰えたりなど…。運が良い…。
Oracleさんのバッグ、ラス2でゲット! #jjug_ccc pic.twitter.com/vuK5D0G1eN
— 福本 晃之/Teruhisa Fukumoto (@terry_i_) October 27, 2024
こんな感じで、全力で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でサーバサイドを頑張っているので、もし興味のある方はぜひお話しましょう🤝