• Java ジェネリクス入門 2024

    Java のジェネリクスについての入門セッションです。
    Javaの基本的な構文は分かるものの、ジェネリクスを雰囲気で使っている人向け。
    ジェネリクスの構文、概念や考え方などの理解を深めます。

    Room A+B
    日 10:00 - 10:45
    • Regular(45m)
    • Intermediate
    • Java SE
  • 新卒2年目エンジニアがLINEギフトの保守性を高めるために取り組んだこと

    LINEギフトは、LINEを通じて友だちとギフトを贈り合うことができるサービスです。累計ユーザー数は3500万人を超えています。
    LINEギフトは、仕様が複雑であるため、実装も複雑になりやすいです。さらに、近年のサービス急成長により、開発チームは大規模化しています。その結果、保守性に対する重要性が大幅に高まっています。
    私たちが保守性を高めるために取り組んでいることについて、OpenAPI、ドメイン駆動設計、Kotlin、APIレベルの統合テストをキーワードにお話しします。

    Room A+B
    日 11:00 - 11:45
    • Sponsor(45m)
    • Beginner
    • Spring
    • Architecture
    • Database
    • Modeling
  • 役立つログに取り組もう

    アプリケーションのログは十分でしょうか?十分ってなんだろう?
    ログについてあまり意識が向けられていない方も多いと思います。このセッションではアプリケーション開発者として意識しておきたいログや有用なログ出力のタイミングや内容、より良いログを出力できるようになるための取り組みなどを紹介します。
    いままでまったくログを出していなかった、手当たり次第に出していた、などから一歩進められる内容になればと思います。
    ログを出力するアプリケーションの内容です。ログ収集や可視化といった内容は扱いません。

    Room A+B
    日 13:15 - 14:00
    • Regular(45m)
    • Beginner
    • Java SE
  • オブジェクト指向プログラミングの教え方・学び方

    Java を活用するにあたってオブジェクト指向プログラミング(OOP)の機構を活用することはコードの保守性や拡張性を大幅に向上させます。

    本セッションでは、JavaにおけるOOPの基本的な概念を理解する方法や、効果的に教えるためのアプローチについて探ります。

    OOPはソフトウェア開発の初期に学ぶ重要な考え方ですが、その概念の複雑さから、学習者がつまずきやすい分野でもあります。

    本発表では、これまで数多くの初学者に指導してきた経験を基に、どのような教え方が効果的であったかについてお話しします。
    また、教育におけるよくある誤解や落とし穴についても取り上げ、それらを回避するための実践的なアドバイスも提供します。

    この発表は教育者にとって効果的な内容ですが、同時にこれから学ぶ学習者にとっても、今後の学習に役立つセッションとなるはずです。

    アジェンダは次の通りです
    ・OOPの基本概念と目的の整理
    ・開発者教育における効果的なアプローチ
    ・初学者を納得させた成功事例と最初の一歩の説明方法
    ・OOPを効果的に学ぶステップ

    Room A+B
    日 14:15 - 15:00
    • Sponsor(45m)
    • Intermediate
    • Java SE
    • Architecture
    • Design
  • 大規模サイトのリビルド現場から:成功と失敗のリアルな教訓

    ■概要
    レガシーな作り大規模サイトをリビルドするPJTに丸2年現場で見てきたリアルな教訓とリビルドの進め方などを共有します。うまくいったことと、失敗したことをざっくばらんに共有できればと思います。

    ■アジェンダ
    ・リビルドに至った経緯
    ・リビルド計画・リビルド手法
    ・リビルドを振り返ってうまくいったこと
    ・リビルドでの反省点

    ■話さないこと
    アーキテクチャやフレームワーク等、細かい技術的な話

    Room A+B
    日 15:30 - 16:15
    • Sponsor(45m)
    • Beginner
    • DevOps
    • Methodology
  • 最近のSpring Bootの便利機能を復習!

    Spring Boot 3がリリースされて早2年経ちますが、さまざまな便利機能が追加されています。
    キャッチアップしきれていない機能もあると思うので、改めて知って欲しい便利機能を説明します。
    Service Connection (TestContainers, Docker Composeサポート)やSSL Bundleなどを予定しています。
    最新のSpring Boot 3.4で改善される内容も一部含む予定です。

    Room A+B
    日 16:30 - 17:15
    • Regular(45m)
    • Intermediate
    • Spring
  • リファクタリングへの耐性が高いモデルベースの統合テストの紹介

    データベースのような外部のシステムに繋ぎユーザーの実際の動きに近い形でテストする統合テストのリファクタリング耐性を上げるためにどのようなことをするべきかについて理解を深めていくセッションです。

    リファクタリング時に壊れにくいテストを作ることができれば、そのリファクタリングにおいて振る舞いが変わっていないことを担保でき、大胆なリファクタリングに挑戦することができます。

    本セッションで紹介するモデルベースの統合テストを実現できれば、アプリケーションコードのリファクタリングだけでなくデータ移行を伴うデータベースのリファクタリングに着手することができるようになります。

    アジェンダ
    1. はじめに
    2. 統合テストの基礎知識
    - 統合テストとは何か?
    - 統合テストはなぜ必要なのか?
    3. モデルベースの統合テスト
    - モデルベースの統合テストとは何か?
    - なぜGivenとWhenをモデルベースに記述するべきなのか?
    4. モデルベースのテストフィクスチャ
    - 統合テストのデータ準備めんどくさい問題
    - 明示的なGiven、暗黙的なGiven

    Room C+D
    日 10:00 - 10:45
    • Regular(45m)
    • Intermediate
    • Architecture
    • Database
  • 社内での開発コミュニティ活動 ~バッチ処理方式設計とSpringBootでのバッチ開発~

    野村総合研究所(NRI)は「コンサルティング」「金融ITソリューション」「産業ITソリューション」「IT基盤サービス」の4事業を通じて、国内外の企業・行政の活動や、社会・暮らしを支えています。
    今回のセッションでは私が所属する「IT基盤サービス」の取り組み事例として社内で公開したバッチアプリケーションの設計/開発ガイドラインについてお話します。

    ・NRIにおけるOSS/フレームワーク関連の事業
    ・社内における開発コミュニティの取り組み
    ・事例紹介(バッチアプリケーション設計/開発ガイドライン)
    - バッチアプリケーションとは?
    - バッチアプリケーションの設計観点
    - SpringBootを利用したバッチアプリケーションの実装方式
    ・11月のイベント紹介

    Room C+D
    日 11:00 - 11:45
    • Sponsor(45m)
    • Intermediate
    • Spring
    • Architecture
    • Design
  • テストが正しいかテストする?Mutation Testing入門!

    ソフトウェアの品質向上のために「テストコードを書く」というのは当たり前になってきています。
    しかし、テストコード自体に対する評価はカバレッジがメインで、テストコードで条件に対して正しくテストできているかは、あまり見られていません。

    このセッションではテストコードが正しくテストできているか一定の検出ができる「Mutation Testing」手法について、PIT (Pitest)というライブラリを用いて紹介します!

    Room C+D
    日 13:15 - 13:35
    • Regular(20m)
    • Intermediate
    • Java SE
    • Tools
  • プロダクトが変われば、テストも変わる。テストピラミッドの再構築

    Nstockが提供する株式報酬SaaSは、開発開始から2年、ローンチから1年以上が経過し、メンバー数は2倍以上に増加しました。初期フェーズでは、市場へのプロダクト適合性を確認するため、ユーザーからの迅速なフィードバックを重視してきました。しかし、現在では通常利用するユーザーが増え、プロダクトの安定運用が求められています。

    アプリケーションの機能が増加するにつれ、相互依存性や分岐の複雑さも増大し、それに伴いデグレードやバグの発生頻度が高まります。また、ローンチ後もプロダクトの機能や体験面での改善は継続的に行われています。

    このセッションでは、自動テストとコードベースのリファクタリングに焦点を当て、Nstockがどのように「柔軟さ」と「堅牢さ」を両立しようとしているかについて具体的なアプローチを紹介します。

    ## Key Takeaway

    - 状態ベースのテストから出力値ベースのテストへの移行によって、テストの効率性を高めるための具体的なアプローチや実際の効果を理解する。
    - 自動テストの導入やコードリファクタリングの具体的な方法論から、聴衆が自身のプロジェクトでの改善点や新たな試みへのインスピレーションを得ることができる。

    ## Intended Audience

    - 自動テストの方針を考えている(考え直している)チーム
    - テストピラミッドのバランスを思い悩んでいるソフトウェアエンジニア

    https://speakerdeck.com/yukishima/jjug-ccc-2024-hurotakutokabian-wareha-tesutomobian-waru

    Room C+D
    日 13:40 - 14:00
    • Regular(20m)
    • Intermediate
    • Architecture
    • Modeling
  • 大量データ・大規模トラザクションをクラウド移行したマイクロサービスでさばく!~MicroProfileで切り拓け~

    ある大手企業様はビジネスの急速な拡大に伴い、取引数とデータ量の爆発的な増大に直面していました。システムはスケールしないし、運用コストもどんどん上がる、機能拡張もうまくいかない…。
    こうした課題を解消すべくお客様はシステムの刷新を決断。JavaやMicroProfileを活用したクラウドネイティブのマイクロサービスアーキテクチャを採用し、見事ボトルネックを解消することに成功しました。本セッションでは実際のプロジェクト事例をベースにクラウド時代に対応するシステム設計のヒントをお届けします。

    Room C+D
    日 14:15 - 15:00
    • Sponsor(45m)
    • Beginner
    • Jakarta EE
    • Micro Profile
    • Cloud
  • Speaker proposalの書き方

    JJUG CCCも含めて、カンファレンスに登壇して話したい場合には、CfP (Call for Papers) に対して、Speaker proposalを出す必要があります。このSpeaker proposal、
    ①採択してもらうため、伝えたい内容を正しく伝えつつ、興味をそそる内容にする
    ②カンファレンス参加者に自分のセッションを選択してもらうための材料を提供する
    という2つの役目があります。ただ、こう思っている方も多いかもしれません。
    「その界隈の著名人だと、どんな内容でも採択される確率は高いのではないか?」
    「有名でない人が採択されるにはどうすればいいのだろう?」
    そして、
    「採択されるために、キャッチーなタイトルや、流行っている内容をテーマとして取り上げればいいんじゃない?」
    とも。本当にそうなのでしょうか?
    このセッションでは、国内外の技術カンファレンスでSpeaker proposalを出し、採択された経験を基に、これから技術カンファレンスへの登壇に挑戦してみたいという方向けに、speaker proposalを出す上で押さえるべきポイントなどをご紹介します。

    Room C+D
    日 15:30 - 16:15
    • Regular(45m)
    • Beginner
    • Community
  • で、ValhallaのValue Classってどうなったの?

    Project ValhallaはJavaの型システムを改革するために、2014年に発足したOpenJDKのサブプロジェクトです。その中心となるのがValue Classです。Value Classは参照型のように記述できるのですが、プリミティブ型のように振る舞います。もちろん、Javaの世界に新たな概念を導入するのですから実現までには多くの障害があります。

    Valhallaが発足してから10年。現在、Valhallaはどうなっているのか、実際にValue Classは導入できるのかなどについて本セッションでは紹介していきます。

    Room C+D
    日 16:30 - 17:15
    • Regular(45m)
    • Intermediate
    • Java SE
    • JVM
  • EventSourcingの理想と現実

    EventSourcingとCQRS。いろんな記事を見ると思います。
    でも実際に導入した話は少ないと思います。
    本セッションではEventSourcingとCQRSの概要と解決したい。導入して実際どうだったのか(主につらい話)を中心にゆるーく話したいと思います。
    サンプルコードは用意できれば・・・。

    Room E
    日 10:00 - 10:20
    • Regular(20m)
    • Beginner
    • Architecture
    • Methodology
    • Others
  • SpringBoot x Mybatis x TestContainerでSQLテストを行う

    近年、NewSQLの登場によりRDB界隈が再び注目を集めています。特にSQLはアプリケーション開発においてもデータ操作においても重要なスキルになっています。アプリケーション開発においては、SpringBootとMyBatisは、Javaアプリケーションにおけるデータベースアクセスを効率化するための強力な組み合わせですが、そのテストは複雑で、開発者の悩みの種となることも少なくありません。本セッションでは、TestContainerを活用することで、SpringBootとMyBatisを用いたSQLテストを効率化し、信頼性の高いデータベースアクセス層を構築する方法を解説します。

    Room E
    日 10:25 - 10:45
    • Regular(20m)
    • Beginner
    • Spring
    • Tools
    • Database
  • Azure の PaaS 型コンテナ・プラット・フォーム Azure Container Apps のご紹介と Java 対応について

    本セッションでは Azure で Java アプリケーションのセキュリティとスケーラビリティを高める PaaS 型コンテナ・プラットフォーム Azure Container Apps (ACA) について紹介します。
    ACA は、Kubernetes 上に構築した PaaS 型のコンテナ環境で、k8s に比べ管理者は容易に運用・管理ができます。例えば YAML は一切書かず 1 回のコマンド実行だけで Java アプリケーションを簡単にデプロイしサービスを公開できるようになります。
    また 2024 年 9 月に Java のサポートが強化され、コンテナ環境で実行するにも関わらず、自分自身でコンテナイメージを作成する事なく、jar や war から動的にコンテナ・イメージを作成しデプロイできる他、JVM メモリの最適化の機能なども追加されています。
    新しく追加された Java サポートの強化ポイントを中心に、Java 開発者、運用者にとって便利な点をデモを交えてわかりやすく紹介します。

    Room E
    日 11:00 - 11:45
    • Regular(45m)
    • Intermediate
    • Cloud
    • Architecture
  • 【お弁当付き】開発効率向上のためのリファクタリングの一歩目の選択肢 ~コード分割~

    kintoneのコード分割の取り組みについてと得られた効果についてお話しします。

    サイボウズではkintoneという製品を開発・運用しています。
    最初のリリースから10年以上経過しコードの量がかなり多くなり、それに伴い複雑性も増しています。
    それによって、コードの調査や影響範囲の確認が大変だったり、実装時の考慮事項が多いなど、開発時の問題が増えてきていました。

    このような課題の解決策の一つとして、コード分割という取り組みを開始し、一つの領域に関してコードの分割、クラス間の依存関係の整理を行いました。
    このセッションではコード分割とは何か、どのように進めたのか、分割の結果開発にどのような影響が発生したかなどをお話します。

    Room E
    日 12:00 - 12:45
    • Sponsor(45m)
    • Intermediate
    • Java SE
    • Architecture
    • Others
  • マイクロサービスとクラウド時代のワークフローシステムについて

    英語圏では「ワークフローシステム」と呼ばれるリアルタイム非同期処理と長期実行ジョブなどを同時に扱えるミドルウェアを担いだスタートアップが複数登場しています。Netflixが開発したSpringベースのOSSであるConductorを中心にその背景と特徴について解説します。

    Room E
    日 13:15 - 14:00
    • Regular(45m)
    • Intermediate
    • Cloud
    • Architecture
  • 静かに変わってきたクラスファイルを詳細に調べて楽しむ

    以下のセッション概要は仮のものです。当日までに変更する可能性があります。
    --------------------
    このセッションではクラスファイルについて話します。クラスファイルのこととしてよく話されるバイトコードについてではなく、クラスファイルにあるそれ以外の興味深い内容について詳細に解説します。

    クラスファイルに出力する内容が書いたJavaコードと密接に関わることは想像しやすいですが、それだけに留まりません。理由は、Javaの言語仕様とJVMの仕様が単純に対応しないからです。2つの仕様の差異を埋めるために、Javaコンパイラが興味深い出力をすることがあります。また同じコードでもJavaのバージョンが変わればクラスファイルの出力内容が変わることがあります。それはどんな理由からなのでしょうか?また変更しても何も問題は起こらなかったのでしょうか?

    このセッションでこれらのことを私と一緒に調べてみませんか?たとえ今までクラスファイルの中身を見たことがなかったとしてもどなたでも楽しめる内容です。セッションが終わったとき、クラスファイルに対して新たな視点が得られるでしょう!

    Room E
    日 14:15 - 15:00
    • Sponsor(45m)
    • Intermediate
    • Java SE
    • JVM
  • 詳細解説!ArrayListの仕組みと実装

    みなさんは、java.util.ArrayList を使ったことがあると思います。
    しかし、その仕組みについて詳しく知らずに使っているという方も多いのではないでしょうか。

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

    そこで今回は、ArrayList のアルゴリズムやその特徴、各メソッドの実装とその動きや注意点について詳しく説明していきます。

    Room E
    日 15:30 - 16:15
    • Regular(45m)
    • StepUp
    • Java SE
  • 外部システム連携先が10を超えるシステムでのアーキテクチャ設計・実装事例

    外部システムの REST API を呼び出す外部接続モジュールのアーキテクチャ設計・実装の事例紹介です。
    (アーキテクチャ設計と言ってもクラス設計等のかなり実装よりのアーキテクチャです。)

    あるスマホアプリのバックエンドサーバ開発で、以下のような要件、条件・制約がある中で設計した、スタブも含めた外部接続モジュール部分のアーキテクチャを紹介します。

    ■要件
    ・リクエスト、レスポンス(ボディ部分も)を記録して管理画面から参照できる。
    ・通信設定(タイムアウト、リトライ等)はデプロイなしに変更可能。
    ・特定のレスポンス項目からエラーマッピングし、設定に応じて発報する。設定はデプロイなしに変更可能。
    ・複数サーバを跨ってキュー制御が必要。設定はデプロイなしに変更可能。

    ■条件・制約
    ・外部連携システムは10以上もあり、仕様もまちまちだが、効率的に開発していきたい。
    ・外部結合テストまで、接続テストもできないため、実装段階でなるべく品質を確保したい。
    ・複数のAPI呼出しを連携させる必要がある等、スタブ制御が複雑。
    ・システムテストではスタブをテスターが利用できるようにする必要がある。

    実際に外部結合テスト以降では、外部接続モジュールに起因するバグをほとんど出すことなく開発を完了できました。
    アーキテクチャ設計は、メリット、デメリットのトレードオフを判断しながら進めてきますが、どのような考え方で設計を行ったかも含めて紹介します。

    Room F
    日 10:00 - 10:45
    • Regular(45m)
    • Intermediate
    • Architecture
  • 今日から始めよう🚀日本語🇯🇵プログラミング🧑🏻‍💻

    Javaではクラスやメソッド、変数といったシンボルには英語またはローマ字が使われるのが一般的です。
    仮名漢字交じりの日本語を使えることは知られていますが敬遠されることが多いようです。
    実際のプロジェクトで日本語を活用した経験から日本語を使ったプログラミングのメリットやデメリット、どういう場面で使うべきか、避けるべきかをご説明します。

    Room F
    日 11:00 - 11:20
    • Regular(20m)
    • Beginner
    • Java SE
    • Methodology
    • Design
  • ソースコードの読み方を理解してコーディングを楽しむ

    Javaで開発すると、自分が書いたソース以外(JDKや各種ライブラリ含む)を読んで解読する必要がある場面があります。でも、ソースコードの読み始め方がわからない、ということもあるかもしれません。セッションでは、短時間でJDKのソースや、Apache Commonsの簡単な処理を読んで仕様をざっくり把握する方法の一例をご紹介できればと思います。
    ※フレームワーク全体のソースコードの読み方は話しません。

    Room F
    日 11:25 - 11:45
    • Regular(20m)
    • Beginner
    • Java SE
  • Hitting the “Refresh” Button on Your Spring Web Application

    If you’re maintaining an existing web application, upgrading to the latest Spring version is not just about maintenance: it’s also an opportunity to hit that “refresh” button on your web stack and bring meaningful improvements to your developer experience and new value to your users. With the latest Spring Boot 3.3 version, the Spring team brings new possibilities to keep your app relevant and your development team happy, empowering you to carefully evolve your application:

    * Improve the runtime efficiency with Virtual Threads
    * Use a modern HTTP client API without learning reactive with the new RestClient
    * Leverage metrics and traces during production incidents
    * Manage and rotate TLS certificates with bundles and reloading
    * Connect to external systems with Docker compose and Testcontainers
    * Get startup time improvements with AppCDS or Checkpoint Restore

    Room F
    日 13:15 - 14:00
    • Regular(45m)
    • Intermediate
    • Spring
    • Tools
  • CI/CDやテスト自動化の開発プロジェクトへの適用

    CI/CDやテスト自動化の必要性が説かれてからすでに10年以上たっていますが色々な理由があり実プロジェクトへの適用する場合には問題が発生することがあります。
    CI/CDがなぜ必要なのかから始め、実際にプロジェクト業務で適用する場合にどんな課題が発生しがちなのかと課題に対する考え方などを解説します。

    主にプロジェクト業務としてシステム開発を行っている方々向けになりますが、
    CI/CDをこれから導入していきたいという人や、CI/CDをやってみてるけどピンと来ていない人にもお勧めです。

    Room F
    日 14:15 - 15:00
    • Regular(45m)
    • Intermediate
    • Others
  • MicroProfile 7.0のご紹介

    2024年8月22日にMicroProfile 7.0がリリースされました。
    定期的にバージョンアップを続けているMicroProfileの7.0時点での最新状況を紹介します。

    Room F
    日 15:30 - 16:15
    • Regular(45m)
    • Beginner
    • Micro Profile
  • 先輩社員がどうやって不具合を解決しているのか

    システムを開発していて不具合との遭遇は避けられません。

    「なんかエラーになった」
    「画面が映らない」
    「計算結果が違う」
    「検索結果が出てこない」
    「正しい入力をしているのにエラー扱いになる」
    etc...

    このセッションでは、 Java でシステムを開発していて不具合と遭遇したときにどうやって解決すればいいのかについて、基本的なことを解説します。
    具体的には以下のような内容を説明する予定です。

    ・不具合解決のための基本的な手順、考え方
    ・不具合解決に役立つ知識(スタックトレースの読み方など)やデバッガの使い方
    ・不具合解決をするときに気を付けること

    対象としては、以下のようなレベル感の方を想定しています。

    ・Java のプログラムは書けるようになってきたけど、不具合対応になると何をすればいいか分からない、または苦手
    ・スタックトレースの読み方が分からない
    ・不具合の調査にデバッガをあんまり活用していない(できていない)
    ・先輩社員に相談したらサクッと解決してくれたけど、どうやって解決したのか分からない、何を考えてるのか知りたい

    Room G+H
    日 10:00 - 10:45
    • Regular(45m)
    • StepUp
    • Java SE
  • Spring ModulithによるDDDとEvent-driven Architectureの実践

    シンプレクスは、お客様のビジネスを成功に導くテクノロジーパートナーです。戦略から設計、開発、運用保守までのすべてに責任を持ち、一気通貫でソリューションを提供しています。
    このセッションでは、2023年8月にGAされたばかりのSpring Modulithで1年間アプリケーション開発をしてきた経験をもとに、DDD × モジュラモノリスなアーキテクチャについて熱く語ります。モノリス・マイクロサービスと何が違ったのか、当初の狙いに対してうまくいったことはもちろん、うまくいかなかったことも含めてみなさんに共有します。

    Room G+H
    日 11:00 - 11:45
    • Sponsor(45m)
    • Beginner
    • Spring
    • Architecture
    • Modeling
  • 現場で役立つモデリング超入門

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

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

    Room G+H
    日 13:15 - 14:00
    • Regular(45m)
    • StepUp
    • Design
    • Modeling
  • Java 21とSpring Boot 3.2を採用して新規事業を開発した話

    ウェルスナビ株式会社では、働く世代の幅広いお金の悩みを、中立的な立場からオンラインで解決する総合アドバイザリー・プラットフォーム(MAP: Money Advisory Platform)の開発に取り組んでいます。新サービスの第一弾として生命保険に関するアドバイスの提供を開始しました。
    新サービスではバックエンドにJava 21、Spring Boot 3.2を採用し、開発フロー、コーディング規約、コードレビュー、テスト、リリースなどの開発プロセスを整備しました。本セッションでは、新規事業開発の立ち上げからリリースまでの事例や最新のJavaやSpringを使って良かった話などを共有いたします。

    ・プロジェクト立ち上げと社内背景
    ・コーディング規約などの開発ルール、コードレビュー
    ・SpringBoot3.2、Java21を採用してみて
    ・Qodanaの活用
    ・実際に起きたこと、苦労したこと
    など

    Room G+H
    日 14:15 - 15:00
    • Sponsor(45m)
    • Beginner
    • Spring
    • Others
  • クレディセゾンにおける内製開発の取り組み

    クレディセゾンでは2019年から事業会社の中に内製開発チームを組成し、当初はプログラマーはCTOひとりだったところから、5年間で150名を超える組織にまで拡大し、60を超える案件をリリースしてきました。HRTの原則や心理的安全性を重視しつつ、当初はスマホアプリから始まった内製開発は、現在では金融の基幹システムの領域にまで拡大しています。Javaの開発案件も数多く手掛けてきており、クレディセゾンの内製開発の取り組みについて、事例を交えつつご紹介できればと思います。

    事例発表: 内製化によるシステムモダナイゼーションの実践

    テクノロジーセンターの内製開発チームでは、クレジットカード会員向けWebサービス「Netアンサー」をAWS基盤へ移行し、システムのモダナイゼーションを進めています。セッションでは、Struts1からSpringBootへのフレームワーク移行、また新規開発部分のSpringBoot + Svelte へのリプレースについて技術的な詳細を紹介します。

    Room G+H
    日 15:30 - 16:15
    • Sponsor(45m)
    • Beginner
    • Java SE
    • Spring
    • Others
  • Java Webフレームワークの現状

    JavaのWebアプリケーションはJava EEを基本としてサーブレット/JSPを中心に作られていましたが、Spring Bootが主流になるなどJava EE / Jakarta EEの存在感は薄れてきています。また、クラウドやコンテナが使われるようになり、QuarkusやMicronautなどフルスタックのフレームワークもあらわれはじめ、標準規格としてもMicroProfileが活動をはじめました。
    このセッションでは、リクエスト処理のフレームワークについて命令形式・宣言形式・コンポーネント形式の3つにわけて紹介し、それらの実行環境についてクラウドにあわせてどのような変化があったかを整理して現状を紹介します。

    Room G+H
    日 16:30 - 17:15
    • Regular(45m)
    • Beginner
    • Jakarta EE
    • Spring
    • Micro Profile
  • クライアントサイドでよく使われるDebounce処理をサーバサイドで3回実装した話

    Debounce 処理というのはクライアントでよく使われる技術です。 高頻度で呼び出されるイベント(キー入力やマウスの移動、ウインドウのサイズ変更)などを制御するテクニックのひとつです。たとえばJavaScriptのライブラリLodashに実装されていたりそれなりにクライアント側では使われる技術です。
    そんなDebounce処理をサーバサイドで実装したので、そのお話をしようと思います。
    Debounce処理自体の説明から、 クライアントで処理すべきものをなぜサーバサイドで実装しなくてはいけなかったのかの背景の説明、 実際にどうやって複数のサーバで実装しているのか、なぜ3回も実装したのか、そして4回目の実装の構想などをお話します。

    Room I
    日 10:00 - 10:45
    • Regular(45m)
    • Advanced
    • Jakarta EE
    • Cloud
    • Architecture
  • 失敗しないOpenJDKの非互換調査

    Javaが基幹システムで使われ続けている理由の一つにJCP(Java Community Process)の厳密な仕様策定プロセスに基づき、バージョン間の互換性を高水準で維持していることがあります。しかし、完全に互換性を維持しているのではなく、Javaプラットフォームの進化のために非互換の発生を許容することがあります。
    OpenJDKでは、Javaにおける3つの互換性(ソース互換、バイナリ互換、ふるまい互換)のいずれか、もしくは複数が損なわれる変更を提案する場合、変更に伴う非互換の発生が妥当であるかどうかをCSR(Compatibility and Specification Review) Groupのレビューを受け、承認される必要があります。つまり、OpenJDKの非互換はすべてCSR Groupで管理されているので、そのバージョンで発生する非互換を網羅的に調査したい場合はCSRのドキュメントを参照すると良いです。しかし、メジャーバージョンのアップデートごとに非互換は100件以上発生しており、すべてを把握するには非常に労力がかかることが実状です。
    本セッションでは、Javaにおける3つの互換(ソース互換、バイナリ互換、ふるまい互換)の考え方、およびCSR Groupの活動目的、CSRドキュメントの読み方について説明します。そして、エンタープライズJavaアプリケーションを扱う際に、大量の非互換の中から特に注視すべき非互換を選定する方法を考察します。

    Room I
    日 11:00 - 11:20
    • Regular(20m)
    • Intermediate
    • Java SE
    • Community
    • Methodology
  • 端末が簡単にリモートから操作されるデモを通じてソフトウェアサプライチェーン攻撃対策の重要性を理解しよう

    RCE(リモートコード実行)脆弱性に対してのサイバー攻撃のデモと、過去に発生したLog4Shellの事例から、ソフトウェアサプライチェーン攻撃への対策の重要性を改めて理解しよう

    Room I
    日 11:25 - 11:45
    • Regular(20m)
    • Beginner
    • Java SE
    • Others
  • Native Memory Tracking を使用した Java プロセスのメモリ消費内訳の紹介

    本発表は Java Virtual Machine(JVM) のチューニングやプロファイリングを学びたい方向けのステップアップとして Native Memory Tracking(NMT) を活用した JVM のメモリ消費内訳について解説します。

    コンテナやクラウド利用が一般的になってきた現在はオンプレ環境と異なる新しい観点でメモリの管理に気をつけることが増えてきました。例えば swap が利用できない技術的制限や、不必要なメモリリソースの割り当てを行わないコスト観点の制限があります。OOMKilled を避けるためには Java プロセス自体のメモリ消費量を見積もりそれに応じた適切なメモリリソースを割り当てる必要があります。では Java プロセスはどの様なことに、どの程度のメモリを消費するでしょうか?

    Java プロセスは Java ヒープ領域や Metaspace/CCS 領域のためのメモリを確保することはよく知られています。しかしそれら以外の領域、特に JVM それ自体が消費するメモリがどういうものかはあまり知られていないでしょう。JVM(Hotspot) が備える NMT 機能を活用すればそれらのメモリ消費内訳を確認できます。

    そこで本発表では NMT の簡単な使用方法と、実際にベンチマークアプリケーションへ適用した例をもとにした JVM のメモリ消費傾向について説明いたします。またメモリ関連 Java オプションと関連付けた、おおまかな Java プロセスのメモリ消費見積例を紹介します。

    Room I
    日 13:15 - 13:35
    • Regular(20m)
    • StepUp
    • Java SE
    • JVM
    • Tools
  • シールドクラスをはじめよう

    シールドクラス(sealed をはじめとする一連の修飾子)は Java 15 にプレビュー機能として提供され、その後の Java 17 で正式追加されました。
    機能としては、クラスやインターフェース間の継承・実装の関係を宣言的に制限することができ、コンパイルフェーズでの整合性確保や保守性の向上に繋げられます。

    本セッションは、ステップアップセッションとして Java 初心者に向けて、
    シールドクラスに関する初歩的な話や背景を交えながら、どのような機能であるかを説明します。
    また、実際のソースコードを用いて、有用性や使い方などを説明します。

    取り上げる内容とアジェンダは以下です。
    ●シールドクラスの概要
    - 関連する JEP や Project Amber に関する話
    - sealed をはじめとする一連の修飾子の機能説明
    ●シールドクラスを使った実装例をコードを交えて紹介
    - シールドがないとき、あるときの比較
    - 他の機能との組み合わせ など

    逆に、本セッションでは以下については取り上げません。
    ●sealed 修飾子自体の内部実装など技術的な仕様や実装の詳細について
    ●Java 以外の言語での同様の機能に関する比較

    Room I
    日 13:40 - 14:00
    • Regular(20m)
    • StepUp
    • Java SE
  • コミュニティでつながる世界 - Our world, Moved by Java Communities

    プログラミング言語やエコシステムの発展には、コミュニティの存在が欠かせません。ひいては、皆さんのエンジニアライフを豊かにするためにもコミュニティは欠かせないものと言えるのではないでしょうか。

    このセッションでは、Javaコミュニティに飛び込んでみた経験や、地方でJavaユーザーグループを立ち上げたエピソードをお話しします。それを話のタネとして、コミュニティ運営や参加すること、つながることへの楽しさ・価値を皆さんと共有します。

    Room I
    日 14:15 - 15:00
    • Regular(45m)
    • Beginner
    • Community
    • Others
  • Boost Performance and Developer Productivity with Jakarta EE 11

    Jakarta EE 11 is the first release of Jakarta EE after the new release cadence was introduced.
    The goal is to release a version of Jakarta EE around six to nine months after an LTS release of Java SE.
    With Java 21 released in September 2023, Jakarta EE 11 will be released around in the Summer of 2024.

    What are the updates? Are there any new specifications introduced? What about removals? Will there be another namespace change? How will the impact of this release be on other frameworks and technologies, such as Spring, Apache Tomcat, Hibernate, and more?

    Come to this session to get all these questions and more answered to be prepared for the increased performance and developer productivity delivered by Jakarta EE 11.

    Room I
    日 15:30 - 16:15
    • Regular(45m)
    • Intermediate
    • Jakarta EE
    • Cloud
    • Architecture
  • Java build tooling could be so much better!

    The Java language is known to be fast, safe, and easy, but Java build tools like Maven or Gradle have a reputation for being slow, fragile, and confusing. This talk will explore what "could be": where current Java build tools fall behind modern build tools in other communities, in performance, extensibility, and ease of getting started. We will end with a demonstration of an experimental build tool "Mill" that makes use of these ideas, proving out the idea that Java build tooling has the potential to be much faster, safer, and easier than it is today.

    Room I
    日 16:30 - 17:15
    • Regular(45m)
    • Intermediate
    • JVM
    • DevOps
    • Tools
  • Java x Spring Boot製アプリケーションのコールドスタートに立ち向かう!〜暖機運転のアプローチいろいろやってみた〜

    昨今クラウドの普及によって、コンテナやサーバレスな環境でアプリケーションを動かしているサービスが主流になっています。

    一方で、リリースのタイミングやオートスケールアップ、Podの再起動など、特定のタイミングでレイテンシが悪化したり、ひどい場合だとタイムアウトが発生するような事情を抱えているプロダクトは少なくないと思います。

    コールドスタートというと、アプリケーション起動までの時間と、最適化が行われピークパフォーマンスに到達するまでの時間の大きく2つのフェーズがありますが、本セッションでは主に後者に着目して解決方法を探っていきます。

    参照系であればアプリケーションの起動後、通信を受け付けるまでの間に、実際にアプリケーションを動かしてあげる暖機運転という方法が一般的かと思います。

    では、在庫の減算を伴うような更新系の場合はどうでしょう?

    簡単に繰り返し呼び出すことが出来ないユースケースで暖機運転を行う方法を模索した経験から、

    簡易的なサンプルアプリケーションを用いて、思いつく限り試してみたいろいろな暖機運転のアプローチとその効果、それぞれの手法のメリット/デメリットについて共有します。

    また後半では、暖機運転以外でコールドスタートに立ち向かうアプローチについても軽く触れていきたいと思います。

    - Class Data Sharing(CDS)
    - Native化(GraalVM)
    - CRaC
    - Project Leyden

    Room J
    日 10:00 - 10:20
    • Regular(20m)
    • Beginner
    • Java SE
    • Spring
    • JVM
  • GraalVMを用いたHiveUDFのネイティブイメージ化と性能検証

    GraalVMは、Javaアプリケーションのスタートアップ時間の短縮やメモリ使用量の削減を実現する先進的なツールであり、特にネイティブイメージ化機能はその強力なパフォーマンス向上を可能にします。このセッションでは、GraalVMのネイティブイメージ化機能を利用して、Apache Hiveのユーザー定義関数(UDF)の性能を向上させる方法とその結果を解説します。

    Room J
    日 10:25 - 10:45
    • Regular(20m)
    • Intermediate
    • JVM
    • Tools
  • オニオンアーキテクチャで実現した本質課題を解決するインフラ移行の実例

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

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

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

    Room J
    日 11:00 - 11:20
    • Regular(20m)
    • Intermediate
    • Architecture
    • Database
  • プロジェクト新規参入者のリードタイム短縮の観点から見る、品質の高いコードとアーキテクチャを保つメリット

    プロジェクトが成長して参画するメンバーが増えるに従い、その個々人の既存仕様や実装のキャッチアップにかかる時間とコストは比例して大きくなっていきます。
    プロダクトの大きさやドメインの複雑さにもよりますが1エンジニアが担当する領域をちゃんと理解できるようになるだけでも3〜6ヶ月はかかることが多いのではないでしょうか。

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

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

    このセッションでは以下の内容には触れません。
    ・ドメイン駆動設計(DDD)やアーキテクチャ自体の解説

    Room J
    日 11:25 - 11:45
    • Regular(20m)
    • Beginner
    • Architecture
    • Methodology
  • オープンソースKeycloakのハンズオンで理解する認証と認可の基本

    個人情報の漏洩リスクが高まる昨今、認証と認可は非常に重要な要素となっています。しかし、認証と認可のロジックを理解することは、初学者にとって難しく、敷居が高いのが現実です。そこで今回は、オープンソースソフトウェア(OSS)を実際に操作しながら、認証と認可のロジックを理解していただきます。使用するツールは「Keycloak」というオープンソースの認証・認可ツールです。このセッションでは、Keycloakを実際に操作し、認証と認可についての理解を深めていきます。
    なお、ハンズオンについては時間の都合により登壇者の手元でのみ実施します。ハンズオンの詳細については後日アップロードします。

    Room J
    日 13:15 - 13:35
    • Regular(20m)
    • Beginner
    • Tools
  • Content Security Policy入門: セキュリティ設定と違反レポートのはじめ方

    このセッションではフロントエンドセキュリティの構成要素の一つContent Security Policyについてフロントエンド初心者のバックエンドエンジニアの視点から基本概念や導入方法について解説し、運用時にハマった落とし穴などを含めて紹介します。

    発表のモチベーション:

    発表者はこれまで主にJava/Spring Bootを利用したバックエンド開発を行っていましたが、担当しているプロダクトにおいてContent Security Policyを導入する必要が発生したためその導入を実施しました。
    導入にあたって調査を行い設定に苦労した箇所や、実際に導入をはじめて設定時に失敗したことなどを共有し、今後CSPの導入を考えている方の一助になればと考えています。

    発表を聞いて得られること:

    - Content Security Policy(CSP)の基本概念とその目的
    - CSP で設定可能な内容、SpringSecurityでの導入例
    - CSP 違反レポートの受け取り方やその解釈

    セッション内容(予定):

    - フロントエンドセキュリティと構成要素
    - Content Security Policy(CSP)とはなにか
    - Content Security Policy でできること
    - Spring Securityを利用した場合での導入例
    - 導入時に気をつけることや、アーキテクチャによる設定方法の違い
    - 違反レポートとその解釈方法
    - 違反レポートを発生させる意外な例
    - 現実的な導入・運用方法

    対象者:
    - フロントエンドセキュリティに興味にあるバックエンドエンジニア
    - Content Security Policyの導入を考えている方

    Room J
    日 13:40 - 14:00
    • Regular(20m)
    • Beginner
    • Tools
  • LangChain4j を使った 生成AIシステム設計パターン - Java で構築する最新アーキテクチャ

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

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

    対象者:
    - Javaの基礎知識があり、生成AIシステムに興味がある方
    - ChatGPT等は使ったことがあるが、生成AIシステム開発の経験はない方
    - 今後、プロジェクトに生成AIを取り入れる可能性がある方

    このセッションで得られること:
    - LangChain4jを通じて、Java言語による生成AIシステムの構築方法を理解できます。
    - 生成AIシステムの設計パターンを習得し、今後の開発に活かせます。

    Room J
    日 14:15 - 15:00
    • Regular(45m)
    • Beginner
    • Tools
    • Architecture
  • map関数の内部実装から探るJVM言語のコレクション: Scala, Kotlin, Clojureコレクションの基本的な設計を理解しよう

    プログラミングにおいてデータの集合を扱うというのは最も基本的で日常的なことのひとつであり、JVM言語においても多種多様なコレクションとそれらに対する共通の関数/メソッドが標準提供されています。
    コレクションに対する代表的な汎用関数mapの内部実装を読むことを通して、複数のJVM言語のコレクションの設計を比較しながら探ってみましょう。
    既存のコレクションを扱う新たな関数/メソッドや独自のコレクションを実装するヒントが見つかるはずです。

    Room J
    日 15:30 - 16:15
    • Regular(45m)
    • Intermediate
    • Java SE
    • JVM
  • モダンJava再入門ハンズオン - Java in Education For JUGs -

    Java Community Process では学生や初学者がJavaに親しみやすくするために Java in Education という取り組みをしています。
    https://jcp.org/java-in-education

    このセッションでは Java in Educationで公開されているプレゼンテーション Java in Education for JUGS を日本語に翻訳し、Java 9以降で追加された機能を使ったモダンなJavaの書き方をハンズオン形式で紹介します。
    Java初学者の方や、モダンなJavaの書き方をキャッチアップしたい方に向けたセッションです。

    【事前準備】
    本セッションの事前準備として、使用するPCにJava 23のインストールとハンズオン資料のダウンロードが必要です。
    セッション参加予定の方は、下記のリポジトリのREADMEにしたがって事前準備をお願いします。
    https://github.com/java-women/jjug-ccc-2024-fall-hands-on-for-participants

    Room J
    日 16:30 - 17:15
    • Workshop(45m)
    • Beginner
    • Java SE
    • Community
    • Others
  • Javaエンジニアのための低コストKotlin入門

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

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

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

    Room L
    日 10:00 - 10:20
    • Regular(20m)
    • Intermediate
    • Others
  • Jakarta Concurrencyによる並行処理プログラミングの始め方

    Java SE 9でFlow APIが導入されたり、OpenJDK 21で仮想スレッドが正式導入されたりするなど、Javaの並行処理機能は進化を続けています。
    こうしたJavaの進化に合わせて、エンタープライズJava向けの並行処理の規格であるJakarta Concurrencyも、Jakarta EE 11 (2024年リリース予定) の登場とともに機能強化が行われました。

    このセッションでは、Jakarta Concurrencyで何ができるかという基礎から始めて、具体的な並行処理のプログラム例や、最新機能など応用的な話題も含めて解説します。
    最新のJakarta Concurrency 3.1で導入された、Flow API対応、仮想スレッド対応などの話題も扱う予定です。

    Room L
    日 10:25 - 10:45
    • Regular(20m)
    • Beginner
    • Jakarta EE
    • Others
  • Java Agent経由で簡単に混沌を注入しよう

    マルチスレッド、分散システム、複数DB… これらを用いた開発において「テストは通っているのに、本番環境でデータ不整合等の問題が発生してしまった」経験をした開発者は少なくないのではないでしょうか。本番環境特有の負荷により発生する遅延や例外を通常のテストで再現することは簡単ではありません。本セッションでは「アプリケーションのコード変更をせずにJava Agent経由で混沌 (ランダムな遅延や例外) を注入し、テストで問題を検出しやすくする手法について説明します。

    Room L
    日 11:00 - 11:20
    • Regular(20m)
    • Intermediate
    • JVM
    • Tools
    • Others
  • Googleのテストサイズを活用したテスト環境の構築

    近年、自動テストとCI/CDの導入が進む中、テストの信頼性や脆いテスト、実行時間の長さなどの課題が見えてくるようになりました。
    本セッションではこれらの課題に対するアプローチとしてGoogleが提唱するテストサイズに従ったテスト環境をMavenやGradleを使って実装する方法について紹介します。

    Room L
    日 11:25 - 11:45
    • Regular(20m)
    • Intermediate
    • Others
Session and Speaker Management powered by Sessionize.com