• 楽天24のレガシー基幹システム大刷新 ~Seasar2からSpring Bootへのフルリプレイス

    楽天24とは主に日用品を扱った楽天公式の店舗で、楽天の出店している天日の中で最大級の売り上げを誇るサービスです。

    本セッションでは楽天24のバックエンドで稼働していたレガシーなSeasar2ベースの在庫連携システムを、Spring Bootへ刷新する取り組みを紹介したいと思います。
    既存のレガシーシステムから刷新する際のそれまでの組織文化の問題・開発プロセスの問題・コードベースの問題についてどう取り組んだの事例をお話しし、現状の改善と業務効率化、そしてシステムの信頼性向上に寄与した成功事例を、具体的な手法や作業フロー、ツールなどを交えて解説します。

    Room A+B
    土 10:00 - 10:45
    • Regular(45m)
    • Basic
    • Spring
    • Modernization
    • Test
  • 生成AI×エンプラモダナイズ ― 鍵を握るのはアーキテクト

    「2025年の崖」はもう目の前 ―― エンプラ企業のレガシーシステム刷新は待ったなし!
    長年運用されてきたレガシーシステムは、技術的負債の蓄積、エンジニアの高齢化、そしてDXの加速により、「そろそろ本気で変えなければならない」タイミングに来ています。
    生成AIの登場で「モダナイズも一気に進む」と期待する声もありますが、現実はそう甘くありません。生成AIを活用したモダナイズがうまくいくかどうかはアーキテクトの腕次第です。

    このセッションでは、生成AIでレガシーシステムをモダナイズするうえでどんなスキルセットが必要になるのか、進めるうえで直面するであろう課題とその対策をご紹介します。

    対象者
    ・生成AIをシステムのモダナイズに導入・活用したいと考えている方
    ・生成AIを活用してシステム開発したいエンジニア

    Room A+B
    土 11:00 - 11:45
    • Sponsor(45m)
    • Intermediate
    • AI
  • 入門 Java言語仕様を読もう! with Java Puzzlers

    Java言語の仕様についての1次資料である The Java® Language Specification を読むための基礎知識を学び、実際にJava言語仕様を読んでみます。Java言語仕様の罠を出題形式で紹介した名著 Java Puzzlers の問題などを例にその挙動はJava言語仕様のどのように記述されているかを解説していきます。

    Room A+B
    土 13:15 - 14:00
    • Regular(45m)
    • Intermediate
    • Java SE
    • Language
  • Azure OpenAI と LangChain4j を使用した LLM Java エンタープライズ・アプリケーションの構築方法の紹介

    生成 AI の登場により、ソフトウェア業界は新たな変革が訪れています。しかし、多くの企業や Java 開発者は、これらの強力なAIツールを既存のエンタープライズ・アプリケーションや新規アプリケーションに統合することに困難を感じているかもしれません。このセッションでは、Model Context Protocol (MCP) 対応を含む最新の LLM アプリケーションの実装プロセスをわかりやすく説明し、既存の Java アプリに取り込む方法を紹介します。Azure OpenAI と LangChain4j の概要説明から始め、これらの技術の基本について紹介を行います。その後、LLM を Java アプリケーションに統合するための実践的なガイドを説明します。また、AI を活用した堅牢なバックエンドシステムを構築するためのベストプラクティスやヒントも提供します。AI に精通している方も、これから始める方も、このセッションを通じて最新の開発手法を学び、Java アプリケーションに AI 機能を取り入れるための知識を得ることができます。

    Room A+B
    土 14:15 - 15:00
    • Sponsor(45m)
    • Intermediate
    • Jakarta EE
    • Spring
    • AI
    • Modernization
  • シンプルは作れる! - 実験からも見えてきたイミュータブルデータモデルの効果

    不変性(Immutability)をシステムに取り入れることは、プログラミングの世界ではクラス設計や実装の原則として広まりつつあります。
    テーブルの設計や操作を考える上でも、更新を廃して不変性を適用するルールの下でデータモデリングを行うことで、業務に必要なデータの複雑さや変更が必要な箇所を明らかにし、データのライフサイクルをシンプルにすることができます。
    本セッションでは、「イミュータブルデータモデル」というアプローチを紹介し、これがどのように柔軟なシステム開発につながるのかを解説します(川島義隆氏)。

    また、新しいデータモデリング手法をテーブル設計等に応用するには、「実際にどのような影響があるのか」「エンジニアはどのような準備が必要か」といった点が気になるはずです。
    そこで、大学の研究の一環として実施したイミュータブルデータモデルのテーブル設計への導入実験を通じて、システムの変化やエンジニアに求められる知識・スキルについての検討結果も紹介します(清川佑真氏・山川広人)。

    このセッションを通じて、聴講者がデータモデリングの新たな選択肢として、イミュータブルデータモデルの知見を持ち帰っていただけることを狙います。

    Room A+B
    土 15:30 - 16:15
    • Regular(45m)
    • Basic
    • Database
    • Modeling
    • Practice
  • 複数アプリケーションを育てていくための共通化戦略

    複数のアプリケーションを同時に開発・保守していると、同様のことをしたい部分が出てきます。そこで共通化を考慮するのですが、やり方によっては「同じようなコードが各アプリケーションに散らばる」「修正のたびに影響範囲を考慮するのが大変」「共通化しすぎて身動きが取りづらくなる」といった問題がでてくることでしょう。

    本セッションでは、複数アプリケーションの開発を支えるための共通化の戦略を検討します。共通化のパターンや考え方、バージョニングなどの管理方法について説明し、取り組む際に「どこまで共通化すべきか?」「共通ライブラリをどう管理すれば破綻しないか?」といった課題に向き合うためのヒントを提供します。

    対象はアプリケーションを開発していく中で共通化を検討し始めている人や、特にアプリケーション開発はしているもののフレームワークなどは作ったことがない人です。フレームワークや共通化に取り組んでいる方は復習や確認でどうぞ。

    Room A+B
    土 16:30 - 17:15
    • Regular(45m)
    • Intermediate
    • Spring
    • Architecture
  • ユニットテスト基礎講座

    昨今、ユニットテストを作成し自動化することは一般的になってきました。
    その一方で、具体的なテストコードの作成手順や、良いテストコードの書き方については、書籍など参考になる情報源はそう多くはありません。
    テストコードがうまく書けない、十分な網羅性を備えたテストスイートを作れない、テストコードの保守に労力がかかる、等の悩みを抱える開発者も多いのではないでしょうか。

    このセッションでは、ユニットテストに焦点を絞り、基礎的な知識から順を追って説明します。
    参加された皆さんが、明日からテストコードの改善を実践できるようになることを目指します。

    Room C+D
    土 10:00 - 10:45
    • Regular(45m)
    • Basic
    • Test
  • 仮)ビズリーチにおけるリアーキテクティングの実践事例 ~ 大規模システムを継続的に変革するための組織×アーキテクチャ戦略~

    調整中

    Room C+D
    土 11:00 - 11:45
    • Sponsor(45m)
    • Basic
    • Architecture
  • 実践Kafka Streams 〜イベント駆動型アーキテクチャを添えて〜

    Kafkaを利用したストリームアプリケーションの構築を支援するJVM向けのフレームワークとしてKafka Streamsというものがあります。Kafkaプロジェクトが提供する公式のアプリケーションフレームワークであり、DSLを利用してストリームアプリケーションを構築できます。

    しかし、現実の問題に対処するためには、しばしばローレベルなAPIや内部コンポーネントの詳細に立ち入った知識が必要になることもあります。

    本セッションでは、現職であるRepro inc.での開発事例を元に、Kafka Streamsを利用して実践的なアプリケーションを構築するための知見とKafka Streamsの詳細について解説します。
    また、Reproではイベント駆動型アーキテクチャを念頭において複数のマイクロサービスをKafka Streamsを利用して構築しています。Kafka Streamsを利用してイベント駆動型のマイクロサービスを構築する上でもヒントになる知見も一緒に伝えたいと思います。

    Room C+D
    土 13:15 - 14:00
    • Regular(45m)
    • Advanced
    • Architecture
    • Database
    • Observability
  • エンジニアリングでビジネスを加速する。モデル駆動開発という選択肢

    TBD

    Room C+D
    土 14:15 - 15:00
    • Sponsor(45m)
    • Intermediate
    • Spring
    • DevOps
    • Modeling
  • これならできる!JVM言語とSpringを活用したAll in oneのサーバーサイド開発術

    TBD

    Room C+D
    土 15:30 - 16:15
    • Sponsor(45m)
    • Intermediate
    • Spring
    • JVM
    • Tools
    • Methodology
    • Modeling
    • Test
    • Practice
  • Java 30周年記念! Javaの30年をふりかえる

    1995年5月に発表されたJava。今年はとうとう30周年を迎えます。そこで、1995年からJavaを使い続け、JavaOneなどのカンファレンスにも足繁く通ったさくらばが、Javaの30年をふりかえります。

    ターニングポイントとなったバージョンや機能、キーとなる人物など多くの写真と共にJavaの30年の歴史をたどってみましょう。

    Room C+D
    土 16:30 - 17:15
    • Regular(45m)
    • Basic
    • Java SE
    • Community
  • クレディセゾンの内製開発事例:ユーザー部門と共にSMS送信システムを開発した話

    クレディセゾンでは、社員エンジニアがシステムを開発する 「内製開発」に取り組んでいます。
    このセッションでは、多田がインフォメーションセンターと 共に作ったSMS送信システムの事例をご紹介します。
    内製開発はなぜ重要なのか、やりがいや大変なことなど、 内製開発のリアルを可能な限りご紹介します。

    Room E
    土 11:00 - 11:45
    • Sponsor(45m)
    • Basic
    • Spring
    • Cloud
    • Others
  • 【ランチ付き】サイボウズとDevOps文化(タイトル未確定)

    サイボウズからのスポンサーセッションです

    (このセッションには先着順でお弁当が付きます)

    Room E
    土 12:00 - 12:45
    • Sponsor(45m)
    • Basic
    • DevOps
  • Feature Flag 開発を標準化し、加速させる Open Feature を導入する

    Feature Flag は、新機能の段階的リリース、A/Bテスト、緊急時の機能停止などを可能にし、開発速度と安全性を向上させます。
    しかし、フラグの管理が煩雑になり、技術的負債を生むリスクもあります。
    また、ConfigCat や DevCycle など様々な SaaS によって機能を提供され、ロックインを余儀なくされます

    この課題を解決するのが OpenFeature です。
    OpenFeature は、Feature Flag のためのオープンスタンダードなAPIを提供し、様々な Feature Flag プロバイダーを統一的に扱え、ベンダーロックインを避け、柔軟なシステム構築を支援します。

    本セッションでは、まず Feature Flag の基本概念とメリット・デメリットを解説します。
    次に、OpenFeature の概要と、その導入によるメリットとデメリットを説明します。
    さらに、ローカル環境および GKE (Google Kubernetes Engine) 上での具体的な実装方法をコード例を交えて紹介し、最後にデモを通じて OpenFeature の動作をお見せします。
    Java 開発者にとって、Feature Flag 導入のハードルを下げ、開発を加速させるための実践的な知識を提供します。

    Room E
    土 13:15 - 14:00
    • Regular(45m)
    • Basic
    • Cloud
    • DevOps
    • Modernization
  • 単一Gitリポジトリから独立しました

    このセッションでは、我々のチームがJavaアプリケーションをモノレポからポリレポへ移行する上で得た知見や課題を詳細に共有します。
    - 移行に至った経緯
    - モノレポ/ポリレポにおけるgradle
    - CI/CDの個別化
    - 共有コードの移行
    - 安全に完了するためのデプロイ戦略

    Room E
    土 14:15 - 15:00
    • Sponsor(45m)
    • Intermediate
    • Tools
    • Architecture
    • Practice
  • Spring gRPC で始める gRPC 入門

    gRPC は Google が開発したオープンソースの Remote Procedure Call(RPC)のフレームワークで、現在は Cloud Native Computing Foundation(CNCF)のプロジェクトとして管理されています。Java や Go、Python など幅広い言語で実装が可能です。

    一方、Spring gRPC は昨年2024年の9月に Spring エコシステム内の実験的プロジェクトのひとつとして公開されました。(2025年2月現在)
    名前の通り、Spring Boot アプリケーションで gRPC を実装できるもので、Spring Boot に慣れ親しんでいる方には非常に使いやすいものとなっています。

    今回の話では、gRPC についてあまり知らない方に向けて、gRPC の概要やその特徴について基本的な内容から話を始めます。その後、Spring gRPC の概要や実装イメージを説明し、最後に Spring gRPC を使った実装と使わない既存の実装方法の比較について話をします。

    取り上げる内容とアジェンダは以下です。
    ■ gRPC の概要
    - gRPC に関しての簡単な歴史や背景
    - Spring gRPC 以外での gRPC の Java での実装方法
    ■ Spring gRPC の概要
    - Spring gRPC に関する基本的な説明
    - Spring gRPC の簡単な使い方
    ■ Spring gRPC があるとき・ないとき
    - それぞれのメリット・デメリット

    また、今回の話は冒頭にも書いているとおり、Spring gRPC が実験的なプロジェクトでもあるので、本番運用までを考慮した話は取り上げません。
    加えて、gRPC と Spring gRPC の基本的な内容にフォーカスした話を想定しているので、実戦的な話はあまり取り上げません。

    Room F
    土 10:00 - 10:20
    • Regular(20m)
    • Basic
    • Spring
  • 実践ArchUnit - 実例による検証パターンの紹介

    JUnit拡張のArchUnitを使うことで、レイヤードアーキテクチャやオニオンアーキテクチャといったアーキテクチャスタイルやモジュール間の依存関係、クラスに対するネーミングといったソフトウェアの静的な側面を多岐にわたりコードで検証することができます。

    また、ArchUnitはCheckstyleのようなコードの字面による解析ではなく、バイトコードレベルで解析されるため、複雑な継承関係や依存関係も検証できます。ArchUnitはそのようなモジュール間の複雑な関係を検証できる一方で、どのようなことをArchUnitで検証するのが効果的か、またどのように検証すればよいのか悩むことも少なくありません。

    登壇者はそんなArchUnitをここ数年プロジェクトで使ってきましたが、その中で「これはArchUnitでチェックした方がいいな、便利だな」といったケースがある程度パターン化されてきました。そこで今回は、そんなArchUnitの適用例を、コードを多めに紹介しながら、時間の許す限り解説していきたいと思います。

    セッションでは、ArchUnitの細かいAPI仕様や基本的な使い方、ArchUnitがベースとしているJUnitやレイヤードアーキテクチャ、オニオンアーキテクチャなどの個々のアーキテクチャスタイルに対する詳しい説明は行いません。その代わりに、コード例を多く示しながら説明することで、前提知識がなくても「ArchUnitでそんなことができるのか!そこまでできるのか!」と感じてもらえることを目標にしたいと思います!

    ■ こんな人におすすめ
    ・コードレビューでチマチマ依存関係をチェックして指摘するのに限界を感じている、または辟易しているテックリード
    ・アーキテクチャドキュメントやガイドで規定したルールをみんなに守らせたいと思っているアーキテクト。もしくはそもそも文書でアーキテクチャルールを説明にするのに疲れてきたアーキテクト
    ・自分が作ったモジュールがうっかり想定外のパッケージやライブラリに依存していることに後で気がついて、やっちまったーと思ったことがある開発者

    Room F
    土 10:25 - 10:45
    • Regular(20m)
    • Intermediate
    • Architecture
    • Test
  • Javaアプリケーションの配布とパッケージング

    よし便利なアプリケーションを作れたぞ! あとはこれを配布してみんなに使ってもらうだけ ……と思ったら、Javaアプリケーションってどう配布すればいいんだっけ?

    本セッションではJavaでつくられたGUIツールやコマンドラインツールをどうパッケージングし、どう配布すればいいかをお話します。
    jpackageを使った GUIツールの配布、GraalVMを活用したCLIツールのネイティブ化、Windows/macOSでの配布時のセキュリティの課題など、Java製アプリケーションを配布する際に実際に使える手法を紹介します。

    Room F
    土 11:00 - 11:20
    • Regular(20m)
    • Basic
    • Tools
  • Javaのルールをねじ曲げろ!禁断の操作とその代償から学ぶメタプログラミング入門

    本トークはJavaのメタプログラミング技術を活用し、本来の言語設計が提供する制約を超えた操作がどのように可能となるか、またその結果生じるリスクと課題についてを解説します。

    Javaは堅牢な設計と安全性を重視したプログラミング言語として広く認識されています。
    アクセス制御やカプセル化といった機能を通じて、意図しないデータ改ざんや振る舞いの変更を防ぐ仕組みが整っています。
    しかし、リフレクションや動的クラス生成などのメタプログラミング技術を使用することで、こうした制約を回避し、通常では不可能な操作を実現することが可能です。
    本トークでは具体的に「private メソッドやフィールドへの強制的なアクセス」「メモリ上での動的なクラス生成」などの技術的詳細について、実例を交えて解説いたします。

    加えて、このような操作がもたらす設計上およびセキュリティ上のリスクについても取り上げます。
    特定の状況下では有用に思えるこれらの技術も、不適切に使用されると予測不能なバグや深刻なセキュリティホールを生み出す原因となり得ます。
    本トークではそれらの技術がどのように悪用される可能性があるのかを明らかにするとともに、そうしたリスクを最小限に抑えるための対策や、安全で堅牢な設計を維持するためのベストプラクティスについてご説明いたします。

    このトークを通じて、Javaのメタプログラミングに関する知識を深め、その潜在的な危険性や適切な使用方法について学びましょう。

    Room F
    土 11:25 - 11:45
    • Regular(20m)
    • Intermediate
    • Java SE
    • Architecture
    • Design
  • 【ランチ付き】キャッシュレス決済のプロダクトから決済基盤への進化

    私たちはこれまで、キャッシュレス決済のプロダクトであるSTORES 決済や、基盤システムへの投資によるプロダクト統合について紹介してきました。
    これまで、複数のプロダクトが単体の料金プランやオンボーディングフローになっていましたが、今年3月に料金プランとオンボーディングフローの大規模な改修をリリースし、複数のプロダクトの連携がより強化され、STORESのプロダクトをよりシームレスに利用できるようになりました。
    しかし、決済機能にはまだ改善の余地が残されています。昨年末に多くのキャッシュレス決済のプロダクトで大幅な手数料の引き下げが行われたり、政府が掲げていたキャッシュレス決済比率4割の目標を前倒しで達成されたりと決済業界の流れが大きく変わってきています。この変化に追従しながら、さらなるスピーディーな統合を進める中で、STORESが向き合っている課題やたのしさについて話します。

    (このセッションには先着順でお弁当が付きます)

    Room F
    土 12:00 - 12:45
    • Sponsor(45m)
    • Basic
    • Others
  • Javaはスクリプト言語だ ― JBangが変えるJava開発の未来

    "JavaScript"と"Java Script"の違いが分かるでしょうか。本セッションは"Java Script"についての話をします。間違って間にスペースを入れてしまったのではありません。"Java Script"がJavaの開発スタイルそのものを、どれだけ大きく変えうるポテンシャルがあるかを紹介します。

    JBangというJavaのCLIツールがあります。Quarkusファウンダーの1人であるMax Rydahl Andersenが2019年に始めたこのプロジェクトは、Javaのソースファイルをシェルスクリプトのようにそのまま実行できるようにするツールです。一見単純なツールですが、そこにMaven形式の依存JARの解決、マルチファイルの扱い、IDEとの統合などの機能が加わることで、Java開発の新しい1つのエコシステムを構築しつつあります。

    本セッションは、JBangを4年以上使っているスピーカーが、以下のトピックを解説しつつ、JBangがいかにJava開発に革命をもたらしうるのかをお伝えします。

    ・JBangの基本的な使い方
    ・Maven依存関係の解決
    ・マルチファイルの取り扱い
    ・VS CodeなどIDEとの統合
    ・高度な活用方法: REST、gRPC、JMX、LLM
    ・Javaベースの独自CLIの開発とカタログ公開

    Room F
    土 13:15 - 14:00
    • Regular(45m)
    • Basic
    • Java SE
    • Tools
  • HashMap の実装ってどうなってるの?

    Java でプログラムを書くときに、ArrayList, HashMap は必ずと言ってもいいぐらいよく使います。でも、それがどのように実装されているかはご存知でしょうか。

    もちろん、実装を知らなくても使うことはできるのですが、知ることで今までよりも効率的なプログラムが書けるようになることでしょう!

    今回のセッションでは、HashMap に着目してそのアルゴリズムと Java の実装、そしてパフォーマンスのよい使い方を紹介していきます。

    (ちなみに、ArrayList については前回のセッション資料 https://speakerdeck.com/yujisoftware/xiang-xi-jie-shuo-arraylistnoshi-zu-mitoshi-zhuang をご確認ください。なお、今回はこれよりも簡単な内容にする予定です)

    Room F
    土 14:15 - 14:35
    • Regular(20m)
    • Intermediate
    • Java SE
  • 1つのメソッドに、関心事が複数あると何が辛いのか?

    たとえ2-30行程度のメソッドであっても、メソッド内に複数の関心ごとが混ざっていると、コードの可読性やテストコードの保守性が大きく低下します。

    このセッションでは、実際の現場で発生した実例と実際のコード(に近いもの)をもとに、
    若手開発者が書いた大きなメソッドと関心事を分離したメソッドを比較しながら、よりよい設計についての自分の知見を紹介します。

    このセッションで、紹介する実例をもとにしたサンプルケースはこちらにて公開しています。
    https://gist.github.com/yatashin/6fbc3b439dc6c447146d271a083a4f09

    Room F
    土 14:40 - 15:00
    • Regular(20m)
    • Basic
    • Design
    • Modeling
    • Test
  • 「イベントストーミングから始めるドメイン駆動設計 ~ 概念モデリングと生成AIで加速するシステム開発」

    「ドメイン駆動設計(DDD)を始めたいけれど、何から手をつければ良いか分からない」「DDDを導入したものの、うまくいかない」「ドメインエキスパートと向き合う前にエンジニアだけで素振りしてみたい」── そんな悩みを抱えるJavaエンジニア/アーキテクチャ向けに、実践的なDDDを推進する方法を解説します。
    本セッションでは、公開されているビジネス事例を題材に、エンジニアだけでイベントストーミング、コンテキストマップ、プロセスモデリング、構造化モデルの作成に挑戦。さらに、各段階における生成AIを活用した効率化も試行します。
    事業会社で業務分析・モデリングに携わってきた経験を持つスピーカーが、「ドメインの知識がないエンジニア」が、いかにしてドメインを理解し、モデルに落とし込むか?その実践的なノウハウを余すところなく共有します。

    Room F
    土 15:30 - 16:15
    • Regular(45m)
    • Basic
    • Design
    • Modeling
    • AI
  • セキュリティマネージャー廃止と、クラウドネイティブ型のサンドボックス活用

    Javaの黎明期から存在していたセキュリティマネージャーが、いよいよJava SE 24 (JEP486)で廃止になりました。
    当初はアプレットのサンドボックスとして活用されていたものが現在主流となるサーバーサイドJavaでは技術負債とみられようになったためですが、本セッションでは、サンドボックスの在り方について再考します。例えば、コンテナと組み合わせて特定のアプリケーションが特定のリソースにしかアクセスできなくすることで、柔軟なセキュリティ要件を実現することができます。もちろん、Javaではもうサンドボックスは使えないので、eBPF、AppArmor、seccompなどの低レベルレイヤーの機能を活用したサンドボックスを実装し、クラウドネイティブJavaアプリケーションで活用する方法を紹介します。
    また、現在セキュリティマネージャーを活用していなくても、古い資産に関連APIを使用してた残骸があることがあります。例えば、Java EE/Jakarta EEの実装やTCKにもたくさん使用箇所があり、昨年から関連APIの削除を試みていますがまだ完了していません。セキュリティマネージャーの使用パターンがいくつかあるため、それぞれのケースについて対応方法をツール(jdeprscanなど)もあわせて紹介します。

    Room G+H
    土 10:00 - 10:45
    • Regular(45m)
    • Intermediate
    • Java SE
    • JVM
    • Modernization
    • Security
  • Aurora MySQL v2 から v3 へのアップグレードの取り組み・理想と現実

    ウェルスナビ(WealthNavi)は"働く世代に豊かさを"というミッションのもと、長期運用を前提とした全自動資産運用サービスを提供しています。
    ウェルスナビでは、データベースの運用基盤としてAmazon Aurora MySQL v2 (MySQL 5.7互換) を利用していましたが、Aurora MySQL v2がサポートを終了することから早期に v3 (MySQL 8.0互換) へのアップグレードを実施することとなりました。
    本セッションでは、ウェルスナビにおけるAmazon Aurora MySQLのアップグレードの取り組みで得られた教訓や直面した技術的負債にどう対応したかを以下のトピックを軸に紹介します。

    WealthNaviのシステムの概要とデータベースアップグレード計画
    ・WealthNaviのシステム
    ・データベースアップグレード概要

    アップグレードの取り組み
    ・AWS Advanced JDBC Wrapperの導入

    アップグレードの理想と現実
    ・テスト戦略:ユニットテスト&パフォーマンステスト
    ・Javaならではの落とし穴と対処法
    ・移行スケジュールの制約やリスク

    得られた教訓

    Room G+H
    土 11:00 - 11:45
    • Sponsor(45m)
    • Basic
    • Spring
    • Database
    • Test
  • 事業戦略を理解してソフトウェアを設計する

    ソフトウェアシステムの設計を考える時、ソフトウェア開発の対象となる事業領域では、どのような方針で、どのような活動が行われているかを理解することが、ますます重要になってきています。
    このセッションでは、マイケールポーターの競争優位の戦略を、ソフトウェアエンジニア向けにわかりやすく紹介し、事業戦略の理解がソフトウェアシステムの設計判断にどうつながるかを説明します。

    - 事業戦略とソフトウェアシステムの設計
    - マイケルポーターの競争優位の戦略「超」入門
    - ソフトウェアの実装と事業戦略を結びつける実践技法

    Room G+H
    土 13:15 - 14:00
    • Regular(45m)
    • Intermediate
    • Methodology
    • Design
    • Modeling
  • サービスと共に歩んだ3年、Springで作る決済システムの安定稼働

    決済サービスは24時間365日止められず、また様々な統制の要件や品質課題をクリアしていく必要があります。
    fincode byGMOでは環境設定値の管理や、堅牢な暗号化のための工夫などをSpring、Spring Bootの機構を使って実現しています。
    そんなSpring×決済サービスのリアルを、新卒3年間成長を共にしてきたエンジニアが紹介します。

    Room G+H
    土 14:15 - 15:00
    • Sponsor(45m)
    • Basic
    • Spring
  • Java開発者のためのパスキー入門

    フィッシング攻撃対策が組み込まれたセキュアな新しい認証手段として最近注目が集まっているパスキー認証。
    SpringやQuarkusでも公式にパスキー認証のサポートが開始され、Javaアプリケーションでも簡単に実装する環境が整ってきました。
    本セッションでは、パスキー認証のプロトコルの概要や、SpringやQuarkusといったフレームワークを利用した実装方法、新しい認証手段でユーザーを混乱させないための注意点を解説します。

    Room G+H
    土 15:30 - 16:15
    • Regular(45m)
    • Basic
    • Spring
    • Security
  • 変化に強いテーブル設計の勘所

    データベースの寿命はアプリケーションより長い。
    では、どのようにデータベースの寿命を伸ばしていけばよいのでしょうか?
    そのコツは **変化に強い** データベース設計にすることです。

    そこで10年以上のサービスの寿命に耐えられるようなテーブル設計の勘所をご紹介します

    # お話すること
    - RDBMSを利用して正規化をするときに大切なこと
    - デプロイでデータベースを壊さないコツ
    - 変更に強い設計

    # 話さないこと
    - 正規化の具体的な方法
    - 既存テーブルのリファクタリングのやり方
    - RDBMS以外の設計の話

    Room G+H
    土 16:30 - 17:15
    • Regular(45m)
    • Intermediate
    • Database
    • Modeling
  • The Evolution of Enterprise Java with Jakarta EE 11 and Beyond

    Jakarta EE 11 has just been released with lots of features for increasing performance and developer productivity, such as support for virtual threads and the new Jakarta Data specification. With this release, Jakarta EE has established a predictable release cadence and the work with Jakarta EE 12 has already started.

    This session will give you an overview of everything brought to you by Jakarta EE 11 with lots of code demos. We will also look forward and check out what's in the pipeline for Jakarta EE 12.

    Room I
    土 10:00 - 10:45
    • Regular(45m)
    • Intermediate
    • Jakarta EE
    • Architecture
  • Give Your LLMs a Left Brain

    The human brain is divided into two hemispheres, each of which specializes in different types of tasks. Your right brain excels at imagination, intuition, art, rhythm, feelings, and dreams. Meanwhile, the left brain is more analytical and focused on logic, sequencing, linear thinking, and mathematics. Like a human brain, generative AI excels at certain tasks, especially those related to right-brain creative activities. However, the absence of relevant and up-to-date information produces confusing hallucinations that are not grounded in reality. 
    This presentation will explore how knowledge graphs built with factual and updated information can complement LLMs via retrieval augment generation (RAG) to produce more reliable results.

    Room I
    土 11:00 - 11:45
    • Regular(45m)
    • Basic
    • Cloud
    • DevOps
    • AI
  • 【ランチ付き】Raising Young Coders

    Teaching kids programming at a young age is really important to improve diversity in the field of computer science. Studies show that after middle school most students have already made up their mind about a career in computers, so having a positive introduction to computers at a young age is really important. I teach workshops for underprivileged kids around the world at events like CNCF Kids Day and want programming to be fun and engaging just like how I learned to program. I will share some of the techniques I use to get kids excited about technology, which you can use to teach your own kids or others.

    (このセッションには先着順でお弁当が付きます)

    Room I
    土 12:00 - 12:45
    • Regular(20m)
    • Basic
    • Cloud
    • Career
    • Practice
    • Community
  • Bootiful Spring Boot: A DOGumentary

    Spring Boot 3.x and Java 21 have arrived, making it an exciting time to be a Java developer! Join me, Josh Long (@starbuxman), as we dive into the future of Spring Boot with Java 21. Discover how to scale your applications and codebases effortlessly. We'll explore the robust Spring Boot ecosystem, featuring AI, modularity, seamless data access, and cutting-edge production optimizations like Project Loom's virtual threads, GraalVM, AppCDS, and more. Let's explore the latest-and-greatest in Spring Boot to build faster, more scalable, more efficient, more modular, more secure, and more intelligent systems and services.

    Room I
    土 13:15 - 14:00
    • Regular(45m)
    • Basic
    • Spring
    • Cloud
    • Architecture
  • Kafka Connect: a 12-Step Program for Java Developers

    Apache Kafka is widely considered the industry-leading event streaming platform. It runs on the JVM and is Open-Source.

    Kafka Connect is an integral component written in Java that allows you to reliably and scalably stream large amounts of data between Apache Kafka and other systems in a fault-tolerant manner, including Databases.

    Join me on a 12-step program where we will use Java, Gradle, Spring Boot, and Docker Compose as the main build tools to create and run an integrated stack of Confluent Community version Kafka components and a Postgres Database.

    Once our Kafka environment is in place we will create a JDBCSinkConnector to ingest data from Kafka to Postgres, write a custom SMT in Java to transform the data, and validate that the code is production-ready with a @SpringBootTest integration test.

    Topics, Producers, Consumers, and Connectors... find out what it's all about.

    Let's get Connected with Java and Kafka Connect, then take the next step by yourself with all the new knowledge!

    Room I
    土 14:15 - 15:00
    • Regular(45m)
    • Intermediate
    • Java SE
    • Spring
    • Database
  • AI: 生産性を上げる? それとも良いプログラマーの邪魔をする?

    AI コーディングアシスタントはソフトウェア開発を変えると言われていますが、本当に生産性を向上させるのでしょうか? それとも、新しい問題を生むのでしょうか? 実は、AI アシスタントを効果的に使いこなすのは、インターネット上で語られるほど簡単ではありません。このトークでは、IntelliJ の Junie AI を中心に、Cursor や Windsurf などの AI 搭載 IDE を比較しながら、その影響を考えます。

    Tab completion, Chat, Agent などの AI アシストの種類 と、それぞれの効果的な使い方
    生産性を上げるベストプラクティス と、AI に頼りすぎずコードを管理する方法
    AI のアンチパターン: 過信によるミスや、非効率な使い方
    AI がコードをどのように理解・インデックスするのか(Java, Kotlin, Rust, Python の違いも紹介)
    AI アシスタントの問題点: 間違った提案、コンテキストの制限、インデックスの課題 など

    AI は本当にプログラマーのスキルを向上させるのか? それとも悪い習慣を助長するのか?
    このトークでは、すべてライブデモを通じて実際に AI アシスタントがどう動くかを見ながら進めます。Junie AI、Cursor、Windsurf をリアルなコーディングシナリオで比較し、どのように役立つのか、どんな落とし穴があるのかを実演しながら検証します。

    Room I
    土 15:30 - 16:15
    • Regular(45m)
    • Basic
    • AI
  • Java's OOM and Kubernetes' OOM - 遭遇した2つのOOMと対策 ~ Launchableでの事例 ~

    Javaアプリケーションの運用ではヒープサイズなどのチューニングが欠かせません。さらに、Kubernetesなどのインフラのリソース管理も加わることで、その難易度は高くなります。

    本セッションではLaunchableのサービス運用で実際に遭遇した、JavaのOOMとKubernetesのOOMの事例を元にどのように、原因を特定し対応したかを紹介します。

    JavaアプリケーションとKubernetesが絡む環境における、メモリ管理の難しさや、トラブルシュートの知見を共有できればと思います。

    Room J
    土 10:00 - 10:20
    • Regular(20m)
    • Intermediate
    • JVM
    • DevOps
  • Javaに鉄道指向プログラミング(Railway Oriented Programming)のエッセンスを取り入れる

    鉄道指向プログラミング(Railway Oriented Programming、以下 ROP)は、成功と失敗の2本の「レール」を想定し、それぞれの結果を明確に扱うことで、分岐が複雑になりがちなエラー処理をわかりやすく整理するアプローチです。2024年に日本語訳が出版されたScott Wlaschin 氏の著作「関数型ドメインモデリング」でも紹介され、注目を集めています。Javaでは例外機構によるエラー処理が一般的ですが、ROPのエッセンスを取り入れることで、より明確なフローと拡張性の高い実装を行うことも可能です。本セッションでは、Java向けの関数型ライブラリであるVavrを活用し、JavaにROPのエッセンスを取り入れる方法を、具体的なコード例を交えて紹介します。

    Room J
    土 10:25 - 10:45
    • Regular(20m)
    • Basic
    • Tools
    • Methodology
  • Generational ZGCのメモリ運用改善 - その物理メモリ使用量、本当に正しい?

    ZGCは、ハードウェア技術の発展に伴い大容量化したメモリ資源を最大限活用するために開発されたガベージコレクタ(GC)であり、「チューニングなしで、テラバイトスケールのヒープも低レイテンシで処理可能」をコンセプトとしています。ZGCはJDK15で正式リリースされましたが、JDK21では改良版である世代別ZGC(Generational ZGC)が実装され、JDK24では"非"世代別ZGCが削除されることになりました。
    世代別ZGCは、ZGCのコンセプトはそのままに、"非"世代別ZGCのいくつかの問題を解決しています。そのうちの1つが、物理メモリ使用量を正確に測定できるようになった点です。"非"世代別ZGCでは、LinuxのpsコマンドなどでjavaプロセスのRSS(物理メモリ使用量)を確認すると、実際の約3倍の値が表示されいました。この問題は、Multi-Mapped memoryという仕組みが原因であることは判明していましたが、"非"世代別ZGCにおいてMulti-Mapped memoryは重要な役割を担っていたので解決できずにいました。
    本セッションでは、"非"世代別ZGCにおけるMulti-Mapped memoryの役割をご説明し、世代別ZGCが上記の問題を解決するために採ったアプローチをご紹介します。

    Room J
    土 11:00 - 11:20
    • Regular(20m)
    • Intermediate
    • Java SE
    • JVM
    • Design
    • Observability
  • Java, Go, Rustのメモリ管理手法の比較

    本セッションでは、Java, Go, Rustの3言語が採用しているメモリ管理手法の解説と、負荷テストを通じたパフォーマンス比較を行います。

    まず、Java 9以降で標準化されたG1GC(Garbage First Garbage Collection)の特徴や、Goの効率的なメモリ割り当てとそれによって実現されるシンプルなGC、そしてRustの所有権モデルによるGC不要の仕組みを説明します。
    次に、3言語で実装したWebサーバーを対象に負荷テストを行い、レスポンス速度やCPU使用量、メモリ使用量などのパフォーマンスを比較・分析します。

    このセッションを通じて、Java, Go, Rustのメモリ管理の仕組みを理解し、それぞれの特徴やパフォーマンスへの影響を把握することができます。

    Room J
    土 11:25 - 11:45
    • Regular(20m)
    • Basic
    • JVM
    • Language
  • DBCP(データベースコネクションプーリング)の変遷と理解

    Java とデータベースを接続するための JDBC。
    そのパフォーマンスと安定性を向上させるために、接続プーリングを行うライブラリが DBCP です。
    アプリケーションのパフォーマンスと安定性に大きな影響を与えますが、
    一口に「DBCP」と言っても、さまざまな種類・バージョンや実装があり、それぞれ挙動も異なります。
    本セッションでは、歴史的にどのようなDBCPライブラリがあるのか、
    それぞれの設定のデフォルト設定値の変化や、
    Tomcatを例として設定ミスの落とし穴について解説します

    さらに、近年の接続プーリングのトレンドとして、
    Spring BootにおけるHikariCPの採用や、
    クラウド側での接続プーリング(RDS Proxy)についても触れ、
    最新のベストプラクティスを整理します。

    ----このセッションで学べること:
    ・DBCPライブラリの種類・バージョンの変遷や設定の違い
    ・Tomcat環境でのデフォルト設定の変更とその影響
    ・tomcat-jdbc-poolとapache.commons系DBCP2の特徴と選び方
    ・Spring BootにおけるHikariCPの活用と利点
    ・最新の接続プーリング技術と今後のトレンド

    ----想定するオーディエンス、対象オーディエンス
    ・JDBC接続プールを使っているが、バージョン変遷や設定の違いを詳しく知らない人
    ・Tomcat環境で運用しているが、apache.commons系DBCPとtomcat-jdbc-poolの違いを理解したい人
    ・これからDBCPの最適な使い方を学びたい人

    Room J
    土 13:15 - 13:35
    • Regular(20m)
    • Basic
    • Tools
  • Spring for GraphQLって実際どうなの?〜小規模スタートアップでの事例紹介〜

    本セッションでは、小規模スタートアップにおいて Spring for GraphQL を採用した理由と、その導入によって得られた知見について解説します。

    具体的には、従来の RESTful API におけるアンダーフェッチ・オーバーフェッチの問題や関連リソース取得の課題を、GraphQLを活用してどのように解決できたのかを紹介します。
    また、導入によって生じた課題や、それにどのように向き合い、解決を試みたのかについてもお話しします。

    特に以下のような方におすすめのセッションです。

    ・Spring Boot / Kotlin でバックエンド開発を行っているエンジニア
    ・GraphQL の導入を検討しているエンジニア
    ・RESTful API の限界を感じているエンジニア
    ・スタートアップにおける技術選定に興味がある人

    また、なるべくすべてについてKotlinでの参照実装を用意して解説するようにするので、実際に手を動かしたい方にも役立つ内容になっています。

    アジェンダは次の通りです。

    ■Spring for GraphQLを採用した理由
    ・小規模スタートアップの開発環境と技術選定の背景
    ・RESTful API の課題(アンダーフェッチ・オーバーフェッチ、関連リソース取得の煩わしさ)

    ■得られた知見
    ・GraphQL の導入で解決できたこと
    ・RESTful API とのスループットとレイテンシ比較
    ・スキーマ肥大化問題とその対策
    ・部分更新(RESTful APIでいうところのPATCH相当の処理をGraphQLでどう実現するか)
    ・Subscriptionの実装方法
    ・分散トレーシングでGraphQLのOperationをどう区別するか

    ■今後の課題
    ・Bean Validation vs grpahql-java-extended-validation
    ・ファイルアップロードの設計

    Room J
    土 13:40 - 14:00
    • Regular(20m)
    • Intermediate
    • Spring
    • Architecture
  • こわくない!Java の関数型インターフェースの基礎と活用法

    Optional、Stream API や CompletableFutureなど、様々な箇所で使用される関数型インターフェース。Java 8 で登場して以来、関数型インターフェースは当たり前に使用されるようになりました。

    このセッションでは、なんとなく関数型インターフェースがよくわからない、ラムダ式に苦手意識がある Java エンジニアに向けて、Optional や Stream API などの実例を交えて、基礎知識を解説します。

    Room J
    土 14:15 - 14:35
    • Regular(20m)
    • Basic
    • Java SE
    • Language
    • Practice
  • Javaで学ぶ代数的データ型

    関数型プログラミングと聞いて、初心者の方が一番に連想するキーワードは"純粋関数"ではないでしょうか。
    一方で、純粋関数を作るうえで"副作用を受けない・スコープが決まっている値"というのは非常に重要ですが、この概念=代数的データ型についてはまだそれほど広まっていないように思います(主観)

    そこで、このセッションではJavaを用いて直積型と直和型から始まり、enumとSealed classとの違いについてまでお話しします。

    Room J
    土 14:40 - 15:00
    • Regular(20m)
    • Basic
    • Java SE
    • Architecture
    • Modeling
  • 単体テストの始め方/作り方

    「テストファイルを作ったけどどう書けばいいかわからない」
    「これどうやって検証するの」
    「Hogeに依存しててテストできない」
    このセッションでは単体テストを書くときにぶつかる問題をとりあげ、これらの問題を解決する単体テストの書き方について解説します。このセッションを通じて自信を持ってテストコードを書けるようになることを目指します。

    Room J
    土 15:30 - 15:50
    • Regular(20m)
    • Basic
    • Test
  • Mutation Testingのプロジェクト実践

    テストコードの品質をテストする「Mutation Testing」についてお話します。
    テストコードを書けば品質が良いとは言い切れません。コードレビューするのはもちろんですが、プロジェクトの規模が大きくなるほどに開発者の作ったテストコードは正しく網羅的に検証できているのだろうかと、お悩みではないでしょうか。

    このセッションでは、Mutation Testingの基本的な考え方を簡単に紹介し、プロジェクトでの実践内容を通してMutation Testingの有効性やコツをお話します。
    Mutation Testingライブラリの「PIT」を用いて、SpringBootを使った業務システムのバックエンドを例にお話します。

    Room J
    土 15:55 - 16:15
    • Regular(20m)
    • Intermediate
    • Spring
    • Tools
    • Test
  • Stream Gatherers のツボを押さえよう!

    Java 24 で正式導入される Stream Gatherers (ストリーム・ギャザラ)について紹介するセッションです。
    Stream API の基本的な使い方を知っている方向けの内容です。

    Stream Gatherers の登場によって、Stream の中間操作を拡張できるようになる!という説明をよく耳にしますが、実際のところ何ができるようになったのでしょうか?
    これまでの Stream API の限界と Stream Gatherers によって新たに実現できることをご紹介します。
    また、Stream Gatherers を使って独自の中間処理を実装する上で抑えておくべきポイントについてもご紹介します。

    Room J
    土 16:30 - 16:50
    • Regular(20m)
    • Intermediate
    • Java SE
  • 障害を回避する HttpClient 再入門

    本セッションでは、普段何気なく直接(あるいは間接的に)利用しているHttpClientについていくつかの主要な実装を紹介しつつ少し深堀りして、より安全に使うためにどのような点を考慮すべきかなどを紹介します。

    Room L
    土 10:00 - 10:20
    • Regular(20m)
    • Basic
    • Tools
  • Spring Boot と AWS S3 を使ったアプリケーションのテスト

    クラウドサービスを活用したモダンな Web アプリケーションにおいて、AWS の S3 などの外部サービスとの連携は不可欠です。しかし、外部サービスを使用する機能をどうテストすればよいのでしょうか?外部サービスを使うコードに対してもテストを書くことで、機能修正はもちろん、フレームワークのアップデートにも強いアプリケーションを作ることができます。
    このセッションでは、Spring Boot アプリケーションで S3 を利用する機能に対するテスト戦略と実装方法を解説します。具体的には、LocalStack を使ったユニットテストとインテグレーションテストを紹介します。

    Room L
    土 10:25 - 10:45
    • Regular(20m)
    • Basic
    • Spring
    • Cloud
    • Test
  • 業務自動化をJavaとSeleniumとAWS Lambdaで実現した方法

    テストツールとして開発されたSeleniumを、テストツールではなく、業務自動化ツールとしてSeleniumを利用することでみんなを幸せにしよう。

    WebアプリのUIを自動化する目的で開発され、みなさんもよく知っているSeleniumをテストツールとしてではなく、業務自動化エンジンとしてJavaからコントロールするする方法とAWS Lambda上で実行する方法について学習できます。

    また、現在、ユーザ企業の情報システム部に所属する立場から、IT技術者(とITベンダー企業)が業務観点を持つことの重要性と効果を共有します。

    Room L
    土 11:00 - 11:20
    • Regular(20m)
    • Intermediate
    • Java SE
    • Cloud
    • DevOps
    • Tools
    • Career
  • 技術的負債から守るSonarQubeカスタムルール作成入門

    アーキテクトが、自ら考えたアーキテクチャを開発者に守らせるためには、プログラムをレビューする必要があります。ただ、多くの開発者に対してガバナンスを効かせることは難しいですよね。レビューを肩代わりしてくれるソース解析ツールやSASTの中に自らの「想い」を体現したルールが必ずあるとも限りません。
    このセッションでは、SonarQubeを例に自らの作ったカスタムルールを実装してみましたので、ご紹介させていただきます。

    Room L
    土 11:25 - 11:45
    • Regular(20m)
    • Basic
    • Java SE
    • DevOps
    • Tools
Session and Speaker Management powered by Sessionize.com