• Java 8 から 21 へのバージョンアップでどう変わる?:実アプリケーションで学ぶ実装のポイント

    私たちのプロダクトは Java 8 + Spring Boot で構築されており、現在 Java 17 へのアップグレードを進行中で、Java 21 への対応も視野に入れています。

    本セッションでは、Java 17 および 21 で提供される新機能に焦点を当てつつ、実際のアプリケーション内でのコード改善事例を通じて、バージョンアップがコードにもたらす変更の実例を解説します。

    セッションの中で主に取り上げる内容は以下です。

    - Java 8 から Java 21 までの重要な新機能のハイライト
    - 実際のアプリケーション内のコードを用いたBefore/After比較の実例

    さらに、登壇時点での進捗状況に応じて、アップグレードのプロセスにおけるヒントや工夫、遭遇した課題とその解決策についても共有いたします。

    コンファレンスA-1
    土 10:00 - 10:20
    • Regular (20min)
    • In-person
    • Beginner
  • Foreign Function & Memory APIを用いたNativeライブラリ呼び出しと既存ライブラリの比較

    Foreign Function & Memory API(以下、FFM API)と既存のNativeライブラリを呼び出す仕組みとの比較についてお話します。

    FFM APIは、NativeライブラリをJavaから呼び出すためのAPIです。
    FFM API以前は、Nativeライブラリを呼び出す方法として、JNI(Java Native Interface)、JNA(Java Native Access)、JNR(Java Native Runtime)といった仕組みがありました。

    携わっているアプリケーションでは、一部の処理にJNA、JNRを用いたNativeライブラリの呼び出しを行っており、今回、新しいAPIであるFFM APIについて試してみました。

    本セッションでは、

    - FFM APIの使い方の概要
    - 実際のアプリケーションのJNA,JNRからFFM APIに置き換えるために手探りで調査した内容
    - FFM APIと既存ライブラリの呼び出し方法比較
    - FFM APIと既存ライブラリのベンチマーク比較

    について共有したいと考えています。
    (FFM APIについては、詳細な解説というよりも使い方にフォーカスしてお話する予定です)

    セッション内容として、コード例も合わせて紹介する予定ですが、FFM APIはJava20時点ではプレビュー機能であり、正式リリースまでにAPIの変更が発生する可能性があります。
    (実際にJava20からJava21の際にも、非互換のAPIの変更も含まれています)
    実際のアプリケーションへの適用の調査はJava20ベースで実施していますが、発表時にはJava21がリリースされているはずですので、コード例は可能な限りJava21ベースのもので発表する予定です。

    コンファレンスA-2
    土 10:00 - 10:20
    • Regular (20min)
    • In-person
    • Intermediate
  • Virtual Threads! Checkpoint Restore! Javaの進化に対応するSpring Framework 6.1 / Spring Boot 3.2の注目機能紹介

    JDK 21から正式導入されたVirtual Threads (a.k.a. Project Loom)やHotspot JVMの起動を早めるCheckpoint Restore (a.k.a. Project CRaC)に対応したSpring Framework 6.1がリリースされ、それに合わせてSpring Boot 3.1もリリースされます。
    本セッションではこれらの注目機能を紹介します。

    コンファレンスB
    土 10:00 - 10:45
    • Regular (45min)
    • In-person
    • Intermediate
  • YugabyteDB on k8s

    エンタープライズでもKubernetesのようなコンテナ基盤が使われることが多くなりました。k8sのオーケストレーションによりアプリのデプロイ、運用は劇的に楽に。一方DBはマネージドサービスによって一部の構築、運用が楽になったもののアプリの域には達していません。
    本セッションではNewSQLの1つであるYugabyteDBを使ってアプリと同等レベルの構築、運用をする術をご紹介します。

    コンファレンスC
    土 10:00 - 10:45
    • Sponser(45min)
    • In-person
    • Beginner
  • Exceptionハンドリングの基本と新しい手法について

    Exceptionクラスの概要からSwitchによるパターンマッチングによるハンドリング方法まで概要を説明にします。

    またチェック例外、throw、try-catch、パターンマッチ等それぞれの対応によるメリットや開発者目線での思いを体験含めてお話します。

    【目次】
    ・Exceptionとはなにか
    ・チェック例外
    ・非チェック例外
    ・基本的な例外ハンドリング
    ・try-catch
    ・throw
    ・多言語でのエラーハンドリング例
    ・Go言語
    ・Rust
    ・パターンマッチングによるエラーハンドリング

    開発者視点での話として、SI時代での考え方と、自社開発を行っている現在の考え方という2つの観点でお話できればと考えています。

    ミーティングルーム
    土 10:00 - 10:20
    • Regular (20min)
    • In-person
    • StepUp
  • Java21とKotlinの代数的データ型 & パターンマッチの紹介と本当に嬉しい使い方

    Java21ではパターンマッチがswitch式で正式に使えるようになります。
    https://openjdk.org/jeps/441

    これらの変更により型の検査がより強化されて、より実行時例外がすくなくコンパイル時に多くの実装ミスが検出できるようになります。

    本セッションではJava21のパターンマッチに関する新機能にふれつつ、先んじて導入しているKotlinとの比較や、実際のプロジェクトでどのように活用するべきかについて話します。
    型を使って実際に実装ミスをコンパイルフェーズで発見していくという内容は過去にKotlin Fest 2022で筆者が発表しており、今回はよりJava21の新機能とパターンマッチに着目して解説していく予定です。
    参考: https://www.youtube.com/watch?v=MkDmQW9GPHo

    アジェンダ(少し変わる可能性があります)
    1. 代数的データ型とパターンマッチとは何か
    - 言語によらず一般的に代数的データ型とパターンマッチは何か?なんのために生まれたのかについて解説していきます。
    2. Java21の代数的データ型とパターンマッチ
    - Java21から改善されたswitch式の解説をしていきます。
    3. Kotlinとの比較
    - Kotlinの同様の機能と比較し、差分を解説します。
    4. 代数的データ型とパターンマッチの本当に嬉しい使い道
    - 代数的データ型とパターンマッチを使って実際にどのような嬉しい使い方ができるかについて解説します。具体的にはどのようにコンパイルフェーズで実装ミスを検出していくかについて話します。

    コンファレンスA-1
    土 10:25 - 10:45
    • Regular (20min)
    • In-person
    • Intermediate
  • Jakarta EE 11 キャッチアップ

    Jakara EEとしては2回目のフィーチャーリリースとなる、Jakarta EE 11の計画が承認されました。(CfP時点ではWeb Profileのみ投票が完了していませんが、承認される見込みです)
    各仕様のRelease Planから、Jakarta EE 11でリリースされるであろう新機能や改善点を紹介します。

    ※できるだけ最新の内容を紹介しますが、Jakarta EE 11の最終的なリリース内容は、今後の開発の進捗によっては変更となる場合があります。

    コンファレンスA-2
    土 10:25 - 10:45
    • Regular (20min)
    • In-person
    • Intermediate
  • ブランチ運用とデプロイフローを見直してリリースを楽にする

    AWS上のステージング環境と本番環境へのデプロイ、リリースの負荷を減らすための取り組みを紹介します。
    具体的な取り組みは下記。
    ・フィーチャーブランチをやめmainブランチのみで運用
    ・ステージング環境と本番環境で同じコンテナイメージを使うようにした
    ・フィーチャーフラグで機能をON/OFFできるようにし、開発中の機能でも本番環境に"デプロイ"できるようにした
    これらにより複数チームの作業での競合や手戻りが減る、リリース作業の負担が小さくなり、より多い頻度でリリースできるようになる、本番リリースのリスクを最小化できる、などの効果がありました。

    ミーティングルーム
    土 10:25 - 10:45
    • Regular (20min)
    • In-person
    • Beginner
  • アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ

    システムを設計する上で、プラットフォームエンジニアリングに対する理解は必要不可欠なものになっています。そこで、2000年以降のアジャイル、クラウド、DevOps、マイクロサービス、サーバレスなどのアーキテクチャの進化を踏まえながら、どのようにプラットフォームエンジニアリングにアプローチすべきかを考えていきます。

    コンファレンスA-1
    土 11:00 - 11:45
    • Regular (45min)
    • In-person
    • Beginner
  • Let's Put the Fun Back into Functional Programming - A Live Coding Journey

    Functional Programming often comes across as intimidating or overly academic, with the discussion frequently tangled in jargon and complex mathematical concepts. This session aims to break down these barriers and demonstrate that it can be both fun and highly practical. It's time to put the "fun" back into functional programming! In this live coding session, we'll take you from a spaghetti web service written in procedural code to a refactored, cleaner, and more maintainable version using functional programming techniques. No specialized libraries, frameworks, or advanced mathematics required!

    ## Key Takeaways

    1. **Demystifying Functional Programming**: Understand FP without the esoteric jargon or mathematical complexity that often surrounds it.

    2. **Procedural to Functional**: Live coding demonstration showing the step-by-step refactoring of a typical web service written in procedural code into functional code.

    3. **Why Go Functional**: Learn the practical advantages of functional programming such as easier debugging, testability, and maintainability.

    4. **No Special Libraries Required**: Discover how you can implement FP paradigms with plain vanilla code, reducing the dependency on specialized libraries and making it easier to adopt in your projects.

    5. **Best Practices and Pitfalls**: Gain insights into common mistakes to avoid and best practices to follow when transitioning to functional programming.

    コンファレンスA-2
    土 11:00 - 11:45
    • Regular (45min)
    • In-person
    • Beginner
  • レガシーなWebサービスから世界標準への挑戦

    2023年5月、GMOペイメントゲートウェイではオンライン総合決済サービス「PGマルチペイメントサービス」をメジャーアップデートし、新たな接続方式「OpenAPIタイプ」の提供を開始しました。

    本セッションでは従来のレガシーシステムから脱却すべく、OpenAPIをベースとした新システムを構築する過程で遭遇した課題やその解決策、成果についてお話しします。

    具体的には以下についてお話しする予定です。
    ・OASの導入
    ・リモデリングの進め方
    ・開発時の苦労話
    ・テスト自動化

    コンファレンスB
    土 11:00 - 11:45
    • Sponser(45min)
    • In-person
    • Intermediate
  • クライアントワークでドメイン駆動設計を活用してみた

    弊社ではお客様の課題解決のためのソリューション提供を戦略から設計、開発、運用保守まで一気通貫で行っています。この発表では、実際のプロジェクトにおいてドメイン駆動設計(DDD)を活用して、Spring Bootを用いたWebアプリケーションをフルスクラッチで開発した事例を紹介します。ドメイン駆動設計の導入によって何が変わり、どのような結果が得られたのかを参考事例としてお伝えします。リード開発者や開発現場の経験者の方々、そしてドメイン駆動設計に興味を持つ方々には、ご自身が同じ状況に立った場合にどのように取り組むべきかを考える視点を提供できる内容となっています。

    コンファレンスC
    土 11:00 - 11:45
    • Sponser(45min)
    • In-person
    • Intermediate
  • Web3jを使ってブロックチェーンにJavaで接続してみる

    Web3jはEthereumのクライアント(ノード)とJSON-RPCで通信できるJavaライブラリです。
    今回はWeb3jを使用した基本的なスマートコントラクトとの実行方法から自分でNFTを発行する方法、購入したNFTがどのような仕組みで保存されているのかを確認する方法を紹介します。

    また簡単にですが、web3業界の動向やNFTのUse Case一般的なNFTの作成方法、ブロックチェーン開発、開発に必要なweb3j以外のライブラリやサービス、Dappの課題なども併せて紹介します。

    ミーティングルーム
    土 11:00 - 11:20
    • Regular (20min)
    • In-person
    • Beginner
  • JHipsterで爆速かつ堅牢なエンタープライズ Spring Boot開発を実現する

    JHipsterというコード生成ツールをご存知でしょうか。Spring Bootのバックエンドコードだけでなく、React/Angular/Vueのフロントエンドコードや、コーディング、テスト、デプロイといった開発・運用環境まで、60以上の技術要素から選択・統合し、完全に動作するアプリケーションを爆速で生成できます。
    ローコードツールのような迅速性と、Java/Spring Frameworkが本来持つ堅牢性の融合は、エンタープライズ開発における有力な選択肢となります。

    本セッションでは、JHipsterの多岐にわたる機能やその運用方法を紹介します。また、開発チームやアーキテクトが人手不足や多忙、雑務といった課題に直面している中で、JHipsterを活用して組織の育成や生産性の向上をどのように実現できるかという展望も話します。

    セッションの主な内容は以下の通りです。
    ・JHipsterの概要:サポートする機能や適用シーンの紹介
    ・エンタープライズ開発におけるJHipsterの活用:要求事項や課題、およびそれらの克服方法(モジュラーモノリスなど)
    ・組織でのJHipsterの活用:「動く開発標準」の活用方法や、ボイラープレートコードに関連する課題とその対策

    ミーティングルーム
    土 11:25 - 11:45
    • Regular (20min)
    • In-person
    • Beginner
  • 実践Pub/Subマイクロサービス――SpringとAxonで作る疎結合でスケーラブルなシステム

    このセッションでは、SpringとAxonを使用して疎結合でスケーラブルなマイクロサービスシステムの構築について深く掘り下げます。

    具体的には、Pub/Subモデルを基にした実践的な手法を示し、このアプローチがどのようにマイクロサービスアーキテクチャの設計と実装を助けるかを解説します。
    Spring WebとAxon Frameworkを主体としたサンプルコードとともに、これらのテクノロジーがどのように相互作用し、全体として強力でスケーラブルなシステムを作り出すかをお話しします。

    このセッションは、新しい分散システムの開発を求める開発者や、既存のシステムをスケーラブルに改善したい開発者に向けて、有益な知識と洞察を提供します。

    本セッションの対象者:

    次のような志向性をもつ開発者のみなさん

    1. マイクロサービスアーキテクチャに興味がある
    2. SpringとAxonフレームワークを使用した開発に関心がある
    3. 新しい分散システムの開発を求めている
    4. 既存のシステムをスケーラブルに改善したい
    5. Pub/Subモデルについて深く理解したい

    このプレゼンテーションから得られる知識:

    1. SpringとAxonを使用した疎結合でスケーラブルなマイクロサービスシステムの構築方法
    2. Pub/Subモデルの実践的な適用とそれがマイクロサービスアーキテクチャにどう影響するか
    3. 各テクノロジーがどのように相互作用し、全体として強力でスケーラブルなシステムを作り出す具体的な例
    4. 現代の分散システム開発の最良の方法とプラクティス
    5. 既存のシステムを改善し、スケーラビリティを向上させる手法とアプローチ

    コンファレンスA-1
    土 13:00 - 13:45
    • Regular (45min)
    • In-person
    • Advanced
  • GitHub Copilot / Copilot Chat で Java コーディングを最大限効率化する

    このセッションでは、Visual Studio Code の開発支援機能としての GitHub Copilot / Copilot Chat を詳しく掘り下げています。Java および Spring Boot で GitHub Copilot / Copilot Chat を使用する実践的な例を説明し、既存のプロジェクトをリファクタリングする方法を示します。GitHub Copilot / Copilot Chat がリアルタイムの Java コード提案を提供し、プログラミングタスクを支援する方法を直接確認できます。
    セッションでご紹介するタスク例は次のとおりです。
    ・REST Controller を作成して注釈を付ける方法、および Copilot / Copilot Chat がスラッシュのパスを含む REST Controller を生成する方法を説明します。
    ・検証済み Annotation を追加してクラスを検証し、最終リポジトリのプライベート変数を作成し、サンプルアプリを例にデータを作成するための post メソッドを生成する方法を説明します。
    ・サンプルアプリを例にデータを取得するための get メソッドを作成する方法を説明します。
    ・プロジェクトの単体テストを作成し、クラスに @Web Mvc Test Annotation を付け、自動構成するプロセスについて説明します。
    ・Copilot / Copilot Chat の支援を利用して Bean を接続し、単体テストを作成する方法を説明します。

    コンファレンスA-2
    土 13:00 - 13:45
    • Regular (45min)
    • In-person
    • StepUp
  • JDK 21 へようこそ

    9月に出た JDK 21 は革新的なリリースであり、次の Long Term Support (LTS)のバージョンでもあります。本セッションでは
    前の LTS であった JDK 17 から移行する場合の新規機能を紹介させていただきます。Virtual Threads はもちろん、
    Sequenced Collections, 世代別 ZGC, Record Patterns, そして switch 用の pattern matching についてもいろいろ画期的な
    進化を次々にカバーしていきます。どの開発者でも有用な機能が満載で、今まで JDK 17 以降の新規開発を追跡していなかった方は
    最新の Java へキャッチアップするチャンスです!

    コンファレンスB
    土 13:00 - 13:45
    • Regular (45min)
    • In-person
    • Intermediate
  • コンテナ環境でのJavaトラブルシューティング技法

    Docker/Kubernetesなどのコンテナ環境でプログラムを動作させる際、
    できるだけコンテナイメージサイズを小さくしようとし、
    アプリケーション実行に不要なツールをイメージに含めないことがあります。
    順調に、アプリケーションが動作している時はよいですが、
    いざトラブルが発生したときに、極小イメージでは調査への制約が大きく、トラブル解決が難航することがあります。
    本セッションでは、このようなコンテナイメージの最適化とトラブルシューティングのジレンマを中心に、
    Javaをコンテナ環境で運用する際に役立つトラブルシューティング技法を紹介します。
    エフェメラルコンテナや、Linux性能ツール(perfなど)や、
    既存ツールを使う場合でもコンテナ特有の落とし穴を踏まえ、
    コンテナ環境でのJavaトラブルシューティングに役立つ方法を考察します。

    コンファレンスC
    土 13:00 - 13:45
    • Regular (45min)
    • In-person
    • Intermediate
  • セキュリティにおける暗号の基礎とこれからの話

    普段何気なく利用している暗号の基本的な内容を、Javaと結びつける事で理解してほしい。

    暗号の基本
    ・暗号の必要性
    ・公開鍵暗号
    ・共通鍵暗号
    ・改ざん検知
    ・ハッシュ関数
    ・鍵交換

    Javaでの利用例
    ・ハッシュ関数
    ・暗号関数
    ・keytool

    その他
    ・量子鍵暗号
    ・対量子暗号

    ミーティングルーム
    土 13:00 - 13:20
    • Regular (20min)
    • In-person
    • Beginner
  • B2B SaaSでSpringSecurityによるRoleを用いたユーザー権限設定の実装について

    SaaSとして電子帳票(ファイル)を保存するサービス(楽楽電子保存)に対して、ユーザーの種類(無料版/有料版)やファイルに付与したラベル(タグ)に応じてユーザーへのアクセス権限をコントロールしたいという要望がありました。この要望を実現するにあたり設計や実装時にいくつかの課題に遭遇しました。
    最終的にリリースした機能には、SpringSecurityを用いて実現したものもあれば、独自実装で実現したものもあります。また、単に機能を実現するだけであればSpringSecurityを使えばそれほどの困難はなかったのですが、ユーザーにとって使いやすくわかりやすいメッセージを表示させるといった、ユーザーサポートへの問い合わせを極力減らすためのUI/UXを実現するために工夫した部分もありました。
    SpringSecurityの良いところを生かしつつ、ユーザーにとって快適なUI/UXを実現するために現場で行った具体的な工夫や苦労をご紹介します。

    ミーティングルーム
    土 13:25 - 13:45
    • Regular (20min)
    • In-person
    • Beginner
  • Gatlingによる負荷テスト入門

    負荷テストをやったことない人から雰囲気でやっている人向けの入門セッションです。
    前半は負荷テストの考え方を、後半はGatlingの紹介と説明、デモをしようと思います。

    以前のGatlingはScalaで書くものでしたが、少し前からJavaでも書けるようになり、Javaなプロダクトで導入しやすくなっています。

    コンファレンスA-1
    土 14:00 - 14:45
    • Regular (45min)
    • In-person
    • Beginner
  • Developers: Build your Career Now!

    The world has changed. Everything is fast. AI is all over the place. And everyone says you must always know the latest programming language or development tool. You have to keep up, right? That's fine. You need tech skills, and you love learning so that’s great.

    But what about your network? Are you actively building that? Are you contributing to communities? Are you monetizing your skills? Human networks are critical and valuable, but they are fragile and they can change overnight. Networks must be continually maintained so they evolve into fully functioning communities that can support business opportunities for contributors.

    In this session, you'll learn the skills necessary to build your own network, contribute to development and user communities, and leverage the overall market to monetize your skills. I've worked in multiple industries so I'll share my successes and also some catastrophic failures. I'll also tell you some stories of developers I’ve met over the years who have influenced me in a positive way about contributing to communities and building careers.

    コンファレンスA-2
    土 14:00 - 14:45
    • Regular (45min)
    • In-person
    • Beginner
  • 持続可能なデータアーキテクチャを実現したリアーキテクティング

    ウェルスナビ(WealthNavi)は”働く世代に豊かさを”というミッションのもと、長期運用を前提とした全自動資産運用サービスを提供しています。
    Webアプリ、APIはSpringBootで実装されており、バックエンド開発全般においてSpringFrameworkが採用されています。また、創業当時から運用基盤はすべてAWS上に構築されており、クラウドネイティブな環境でサービス開発が行われています。

    事業が順調にスケールする過程で、運用に必要なデータは指数関数的に増大しています。肥大化したテーブルは運用にかかる様々なシステムで性能劣化を引き起こしています。そのため、継続的に性能改善に取り組んでいます。

    このセッションでは、肥大化したデータ例としてウェルスナビで最もお客様が目にする機会のあるポートフォリオのデータアーキテクチャをリアーキテクティングした取り組みについて、AWS SDKを使ったバックエンド実装やDynamoDBのテーブル設計、数億件に及ぶ大規模データ移行などのトピックについてお話します。

    技術的には以下に関するお話しをする予定です。
    ・リアーキテクティングのプロセス
    ・DynamoDBを使ったデータベース負荷軽減と持続可能なデータアーキテクチャ
    ・Spring BatchとAWS Batchによる大規模データ移行の実践

    コンファレンスB
    土 14:00 - 14:45
    • Sponser(45min)
    • In-person
    • Intermediate
  • [Yahoo!広告] Spring Boot+Neo4jを使用した広告アカウント管理での階層構造化の実現

    Yahoo!広告では、広告運用を効率的に行うために、複数の広告アカウントを階層構造で管理できる機能を提供しています。

    広告アカウントのデータストアにはRDBを使用していましたが、機能拡張で階層数を増やそうとしたところ、要求された性能を満たすことができませんでした。
    解決手段として、階層構造を表現するのにより適したGraphDBのNeo4jを導入しました。

    本セッションでは、
    Spring BootアプリケーションでRDBを利用しながら、Neo4jを導入した事例を発生した課題と対策を含めて紹介します。

    コンファレンスC
    土 14:00 - 14:45
    • Sponser(45min)
    • In-person
    • Intermediate
  • 技術書を読む技術

    みなさんは日々どのようにスキルアップに励んでいますか?
    最近はオンライン学習コースや技術記事投稿サービスも充実していますが、やはり技術書を読むことはエンジニアにとって欠かせない学習方法ではないでしょうか。

    一方で「技術書を読んで得た知識が身になっているか自信がない」「わかったつもりになったがうまく実践で活用できない」といった悩みを抱える人も少なくないでしょう。
    技術書で得た知識を最大限に活用するためには、それが完全に自分の血肉と化するまで徹底的に読み抜くプロセスが重要です。

    本セッションでは、私がふだん実践している効果的に技術書を読むためのテクニックをご紹介します。

    - イントロダクション: 「本を読む本」に学ぶ効果的な読書術
    - イテレーション0: 下読みする
    - イテレーション1: 通読する
    - イテレーション2: 精読する
    - イテレーション3: 読書マップを作る
    - イテレーション4: 輪読会を行う

    ミーティングルーム
    土 14:00 - 14:20
    • Regular (20min)
    • In-person
    • Beginner
  • 若手こそテストを書こう!

    自主学習の時、テストコードを書いていますか。
    今までテストを書いていなかった発表者が、
    テストを書くようになってどの程度開発効率が上がったかについて解説します。
    単体テストの例示・SpringBootの単体テストの例示を行いながら、
    エンジニア若手向けに、テストを意識的に書いていくことが
    どのように良い影響を及ぼすかについて発表します。

    ミーティングルーム
    土 14:25 - 14:45
    • Regular (20min)
    • In-person
    • StepUp
  • Application observability in Java with Micrometer

    本番にデプロイしたサービスのパフォーマンスやエラー率はどうなっていますか?障害が起きた場合にその原因調査はどう行いますか?
    このような質問に回答するため、オブザーバビリティが不可欠な道具である。本セッションでは、オブザーバビリティの一般論を簡単に紹介し、デモでアプリケーションのメトリックス、トレース、ログの実用的な使い方を見せます。最後に、Micrometerというオープンソースのライブラリを用いてJavaのアプリケーションでオブザーバビリティの実現ができる方法を説明します。

    コンファレンスA-1
    土 15:15 - 16:00
    • Regular (45min)
    • In-person
    • Intermediate
  • GraalVM Native Image 解析方法の紹介

    私たちは Java システムのトラブルシューティングを担当し、特に Java Virtual Machine 観点の解析を専門としています。昨今注目されている GraalVM Native Image についても将来的な活用が見込まれると想定し解析方法の情報収集を続けています。
    GraalVM Native Image は高速起動・低フットプリント・即ピークパフォーマンスのメリットを持つネイティブアプリケーションを生成する機能で、クラウドネイティブ向けの Java アプリケーションを実現する機能として注目されています。ただしネイティブアプリケーションは OpenJDK や Oracle JDK の HotSpot VM とは異なり Substrate VM の上で動作するため既存の解析方法がそのまま適用できません。
    本セッションではネイティブアプリケーションの解析方法として GC ログ/スレッドダンプ/ヒープダンプ/フライトレコーダー/コアダンプ等の情報を収集する方法と、それらの解析方法について紹介いたします。

    コンファレンスA-2
    土 15:15 - 15:35
    • Regular (20min)
    • In-person
    • Intermediate
  • 動くコードを書こう

    このセッションでは、WEB+DB PRESSでの連載「基礎力アップ! Javaプログラミング」をベースに、プログラムをどのように動かすかということをお話しします。

    プログラムは動いてなんぼです。そして、動かすためには処理がちゃんと書けないといけません。
    きれいなコードとはなんぞやといった議論はさかんに行われますが、どんなにきれいなコードでも動かないと意味はありません。逆に動きさえすれば、汚くてもかまいません。
    けれども、きれいなコードの書き方の本はたくさんあっても、動くプログラムの書き方というのはなかなか見かけません。動いたプログラムをよりよく動かすというのはありますが。
    変数やループがなぜわからないのか、再帰がうまく書けないのはなぜか、フラグの管理が難しすぎて破綻してしまうのはなぜか、もしかしたらわかるかも。そして動くコードを書けるようになりましょう。

    コンファレンスB
    土 15:15 - 16:00
    • Regular (45min)
    • In-person
    • Intermediate
  • データ指向プログラミングの真実をお話しします

    Project Amberの効果としてデータ指向プログラミングが実現できることとされています。一方でデータ指向プログラミングと銘打った書籍も今年発刊されました。これらの目指すところは何なのでしょうか。いや、そもそもこれ同じものなのでしょうか。
    実際の業務コードがどう改善するのか、しないのか掘り下げてみたいと思います。同時にソフトウェアの複雑さや柔軟さについても分析してみます。

    コンファレンスC
    土 15:15 - 16:00
    • Regular (45min)
    • In-person
    • Intermediate
  • バイナリビューアを使ってクラスファイルを読んでみよう!

    みなさんは、Java のクラスファイルを読んだことがありますか。バイナリーのままで。

    Java のクラスファイルには、実行に必要な情報がびっしりと隙間なく詰まっています。
    そう、Java について詳しく知ろうと思ったら、クラスファイルを知ることは避けられないのです。

    「でも、クラスファイルってバイナリーだし、あくまで JVM が読むためのもので、人間には読めないんじゃないの?」
    そんなことはありません!
    Java のクラスファイルは 、バイナリーのままでも読めるのです!

    これまでバイナリーファイルを読んだことがない人でも大丈夫。ツールの紹介や読む上での知識から解説していきます。

    このセッションで、あなたもまた一歩 JVM に近づける!(かも)

    # 内容(予定)

    * バイナリーファイルの読み方
    * Java クラスファイルの構造
    * クラスファイルの実例

    (このセッションでは、バイナリーファイルの読むのに必要な知識を説明し、その例としてクラスファイルを取り上げます。そのため、クラスファイルフォーマットの詳細には踏み込みません)

    コンファレンスA-2
    土 15:40 - 16:00
    • Regular (20min)
    • In-person
    • StepUp
  • トラブルシューティング・ヒープダンプ・スレッドダンプ解析チューニング

    Javaのバージョンアップに伴いGCのアルゴリズムは増え、また以前と比べて大きなヒープサイズを使うことも一般的になってきましたが、障害時に調べるポイントは旧来より変わらない点が多く残っています。特にエンタープライズ開発においては、VM上でアプリケーションサーバを稼働させ、まだAPMの導入が未済のシステムも多いと思います。このセッションでは主にアプリケーションサーバを利用した開発者に向けて、Javaのヒープの仕組み、スレッドについて説明した後に、GC ViewerでのGC状況の確認、MATによるヒープダンプの解析や、スレッドダンプの読み方について、説明をします。

    コンファレンスA-1
    土 16:15 - 16:35
    • Regular (20min)
    • In-person
    • StepUp
  • Spring Eventsでのトランザクション処理の地獄とそれを解決できる方法

    どのレベルでトランザクションを管理すればいいのか?トランザクション処理はなんでこんなに複雑なのか?という風に悩んでいませんか?ならばこのセッションはあなた向けです。

    このセッションでは、Spring Bootのイベント駆動型アプリケーションでトランザクション処理を管理する方法について話します。Spring Bootを用いたドメイン駆動設計デモアプリケーションで実際の例をお見せしながら、上記のような質問に答えていきたいと思います。

    このセッションでSpring EventsとSpring Transactionsの理解が深まり、トランザクション処理の地獄を回避できる(または克服できる)ようになると期待してください。

    コンファレンスA-2
    土 16:15 - 16:35
    • Regular (20min)
    • In-person
    • Beginner
  • Spring Authorization Server を使い、他システム間の認可の仕組みを構築した話

    Spring Authorization Server を使い、一部カスタマイズをしながら他システム間の認可の仕組みを構築した事例について、得られた知見を中心に発表させていただきます。

    【お話すること】
    1.Spring Authorization Server とは
    2.どのように実現したのか
    3.使い方や設定変更、カスタマイズで苦労したこと
    4.本番運用開始後のトラブル事例
    5.まとめ

    コンファレンスC
    土 16:15 - 17:00
    • Sponser(45min)
    • In-person
    • Intermediate
  • 巨大モノリス分解に挑む Spring/Kotlinのイベント駆動アーキテクチャ

    M3のメッセージ配信システムは、創業当初からの重要な事業であり、巨大なデータベースに依存していましたが、多数のサービスとの共有、ピーク時のクエリ数、レガシー化、データ量増大によるコスト増が課題となっていました。今回、この大きな課題を解決すべく、一大プロジェクトを立ち上げ、データ構造の見直し、システム全体の再設計、データ移行を実施しました。
    メッセージ配信システムは、送信側ではリクエストの頻度は低いものの一度のデータ量が大きく、一方、受信側ではリクエストの頻度は高いが一度のデータ量は少ないという特性を持っています。更新と閲覧では異なるシステム特性が要求されますが、これらの要件を満たすシステム構成について説明します。また、トランザクション境界を越えたデータ更新に対し、Spring/Kotlinを用いてイベント駆動アーキテクチャを採用しました。これにより整合性を保ちつつ、疎結合な設計を実現しています。その要点や注意点についても可能な限り紹介します。

    コンファレンスA-1
    土 16:40 - 17:00
    • Regular (20min)
    • In-person
    • Intermediate
  • Database Rider を用いたデータベーステスト

    Database Rider は、アノテーションで簡単にテストデータのセットや検証ができるライブラリです。このセッションでは、Flyway, Testcontainers, Database Rider を用いた簡単なデータベーステストについてお話します。

    コンファレンスA-2
    土 16:40 - 17:00
    • Regular (20min)
    • In-person
    • Beginner
  • 仮想スレッド/ネイティブイメージ/CRaC/ノンブロッキングにも対応!msで起動しオンプレからサーバレスまで幅広く利用できる軽量OSSフレームワークQuarkus

    OSSで開発されている Eclipse MicroProfile 実装の1つである Quarkus について紹介します。
    Quarkus は Supersonic Subatomic Java のメッセージのもと、超高速かつ超軽量に動作するJavaフレームワークを目指しています。

    本セッションは、以下を紹介します。
    ・Quarkusはそもそもなんなのか
    ・Quarkusによって得られるメリット
    ・Quarkusはどのような仕組みで超高速かつ超軽量を実現しているのか

    また、以下については触れません。
    ・ベンダーに関する情報

    コンファレンスA-1
    土 17:15 - 18:00
    • Regular (45min)
    • In-person
    • Beginner
  • ラムダ式をHowではなくWhyで理解しよう!

    苦手意識を持つ人の多いラムダ式を、なぜ必要とされたのかから遡り理解し、ラムダ式の苦手意識を払拭してもらう内容です。

    コンファレンスA-2
    土 17:15 - 17:35
    • Regular (20min)
    • In-person
    • Beginner
  • String Templateによる文字列補間

    Javaでは古くからJSPやThymeleafなどHTMLを生成するためのテンプレートエンジンが使われてきました。しかし、Javaの標準ライブラリには文字列補間を行うAPIは提供されていませんでした。これに対し、Java 21でやっと汎用に使用できる文字列補間APIがPreview機能として導入されました。それがJEP 430 String Templatesです。しかも、JEP 430では標準的な文字列補間だけでなく、文字列補間を開発者が拡張することも可能です。
    そこで、本セッションではJEP 430の基本的な使い方に加え、拡張の方法などを例を示しながら紹介します。

    コンファレンスC
    土 17:15 - 18:00
    • Regular (45min)
    • In-person
    • Beginner
  • jconsoleを使ってメモリ領域を覗いてみた。障害対応で学んだTips集

    初めて直面する「OutOfMemoryError」。資格試験でしか見たことが無い、初めての出会い。まさか本当にエンカウント、しかも調査を一人で担当する事になるとは。。。
    一体どこから調べれば・・・。せめてメモリ領域を覗いて構造をイメージする事ができれば・・・。ネット上では「OOM」という謎の単語にまみれて、一つの光り輝くツールが・・・!
    「き、君の名は・・・?」『jconsoleだよ!』Java Silver資格の勉強中からずっと見たかったメモリ領域が今、やっと見れる・・・!
    また別の日。今度はユーザーがログインできない?!なんだ?エラーも見当たらないし、こんなのお手上げじゃないか!!
    せめてjavaからデータベースまでの接続の様子を見れれば・・・。『見れるよ!』「そ、その声は、もしや・・!」
    jconsoleさん『久しぶり!』
    まさに、神様仏様jconsole様とはこのこと、見えなかったものが見えた瞬間の感動は忘れられません。
    神ツールjconsoleを使ってみた体験談です。
    主なテーマ
    ・OutOfMemoryError: Metaspaceで学んだメモリ構造
    ・javaとDBをつなぐDBCP

    コンファレンスA-2
    土 17:40 - 18:00
    • Regular (20min)
    • In-person
    • Beginner
Session and Speaker Management powered by Sessionize.com