JJUG CCC 2022 Fall トーク一覧

採択 Beginner Database Yes (YouTube) Video:40min + Live:10min

PostgreSQL, The Time-Series Database You Want

Chris Engelbert noctarius2k

Time-series data, or data being associated with its respective time of occurrence, is everywhere. From the obvious cases, such as metrics, observability, IoT data, all the way to logs, invoicing, or payment records. While storing some of these in relational databases is standard practice, people often reach for specific time-series databases when volume gets high. But imagine if you could have all of them in the same database: PostgreSQL.

Join me for this session to learn more about the different types of time-series data and have a look at the naive, the native, and the scalable approaches to storing it in PostgreSQL. We’ll contrast their usability and performance characteristics and show you why Postgres is the only database you need!

機械翻訳:
時系列データ、つまり発生時刻と関連付けられたデータは、あらゆるところに存在します。測定基準、観測可能なデータ、IoTデータなどの明らかなケースから、ログ、請求書、支払い記録まで、あらゆるものがそうです。これらのデータの一部はリレーショナル・データベースに格納されるのが標準的ですが、量が多くなると特定の時系列データベースにアクセスすることが多くなります。しかし、これらをすべて同じデータベースで管理できるとしたらどうでしょう。PostgreSQLです。

このセッションでは、様々なタイプの時系列データについて学び、PostgreSQLに時系列データを格納するための素朴な、ネイティブな、そしてスケーラブルなアプローチについて見ていきます。それぞれの使い勝手と性能の特徴を比較し、なぜPostgreSQLだけが必要なのかを説明します。

1
採択 Beginner Java SE Spring Yes (YouTube) Video:15min + Live:10min

非Javaエンジニアが「プロになるJava」で再勉強した話

ShirayanagiRyuj エンジニアカウンセラー白栁隆司 ShirayanagiRyuj

普段Java以外の言語で開発しているプログラマが、今年発売された書籍「プロになるJava」で再勉強した話をします。

一年の内、数ヶ月レガシーなJavaシステムを触る程度のプログラマが、書籍を通してモダンなJavaに触れ、簡単なWebシステムを作成してみた感想をお話します。
また、他の言語での開発経験があるプログラマが、Javaに入門/再入門する際のポイントについても取り上げます。

採択 Intermediate Spring Cloud DevOps Tools Architecture Yes (YouTube) Video:40min + Live:10min

Spring BootとKubernetesで実現する今どきのDevOps入門

yasai_ls 佐藤靖幸 yasai_ls

KubernetesクラスターでSpring Bootアプリケーションを稼働させる上でのクラスターの

これまで1年以上KubernetesクラスターにおけるDevOpsパイプラインの構築やSpring Bootアプリケーションの開発を行ってきました。本セッションでは実際にKubernetesクラスターのIaCで苦労したことや、GitOpsによる継続的デプロイの手法、そしてSpring BootにおけるKubernetesアプリケーション稼働の手法についてしくじり話やナレッジについてご紹介します。

■ 登場する言語・サービスなど

  • Java 11
  • Spring Boot
  • Amazon EKS
  • Amazon ECR
  • AWS CodeCommit
  • AWS CodeBuild
  • ArgoCD・Flux
  • CircleCI・GitHub Actions
  • Terraform
採択 Beginner Java SE Yes (YouTube) Video:40min + Live:10min

Javaの入門が終わったら何の勉強をすればいいの?

kis きしだ なおき kis

Javaの入門書を終わって、文法を覚えたしJSPやサーブレットもやってみた、でもプログラムが作れるようになった気がしないという人は多いのではないかと思います。
このセッションでは、プログラムが作れるようになるためにどういう勉強をすればいいかを、どうやって動くプログラムを書くか、どんなプログラムを作るか、どうやってプログラムを作るか、作ったプログラムをどう動かすか、といった内容で解説します。

採択 Intermediate Java SE Cloud JVM Yes (YouTube) Video:40min + Live:10min

コンテナ環境でのJava技術の進化

kkzr 数村憲治 kkzr

Dockerなどのコンテナ環境で動作させるプログラムは、通常OS上での動作とは違った考慮(例えば、CPUやメモリリソースの扱い)が必要となる場合があります。JavaVMやJavaコアライブラリでも、これまで長年にわたりコンテナ環境に対応するための修正が数十以上も行われてきました。しかし、コンテナ環境でJavaを使う際には、まだまだ注意が必要なことがあります。特に、コンテナ上のovelayfsなどのファイルシステムは今後も対応が必要な領域であり、通常OS上で動作するJavaアプリケーションがコンテナ上でそのままでは動作しない場合があります。本セッションでは、これまでのJavaVMやJavaコアライブラリにおけるコンテナ対応の内容を振り返るとともに、今後も継続して検討していく必要のある点、またJavaアプリケーション作成時・ビルド時・運用時の注意点について紹介します。
また、コンテナの特徴として軽量で起動時間の短いことから、コンテナ利用時の期待として、システム全体の起動高速化があります。最近では、OpenJDKコミュニティでも、Javaランタイムの起動性能向上を目指した「Leydenプロジェクト」が立ち上がろうとしており、Javaの起動高速化は今後の着目技術となっています。本セッションでは、Leydenの紹介をしつつ、一方でGraalVMなどのネイティブ化機能は使わずに、Java SE準拠のJavaランタイムでどこまで起動性能の向上が可能かCRIU(Checkpoint/Restore In Userspace)技術等についても紹介します。

採択 Beginner Java SE Yes (YouTube) Video:15min + Live:10min

FizzBuzzで学ぶJava 7以降のJavaの進化

hk_it7 河野裕隆 hk_it7

FizzBuzz問題のコードを通してJava 1.7からJava 17までの新しい機能や文法をおさらいしていきます。
※FizzBuzz問題:1から順に、3の倍数の場合は「Fizz」、5の倍数の場合は「Buzz」、3の倍数かつ5の倍数の場合は「Fizz Buzz」、それ以外の場合は数字をそのまま出力するプログラミング問題。

【このセッションの目的・ゴール】
・Javaの新しい機能を少しでも知ってもらう
・Javaの新しいバージョンに興味を持ってもらう

【対象】
・Java 8以降の新機能についてざっくり知りたい方
・最近Javaを書いていない方

【注意点】
・各新機能についての解説は概要にとどまり詳細な使い方の説明はしません
・if, forなど基本的な構文は理解している人を想定

【詳細】
Java 9以降リリースサイクルが変更となり、半年に一度の高い頻度で新機能がリリースされるようになりました。
リリースサイクルの変更に伴い、新しい機能を追っていくコストは少し大きくなっています。
そこで本セッションでは、FizzBuzz問題という簡易なコードを通し、よく使われそうな新機能周りを横断的にお話していきます。
まずJava 7で書かれたFizzBuzzコードを示し、バージョンを少しずつ上げて、よく使いそうな新機能で一部を書き換えたものを次々提示していきます。
どのバージョンで何ができるようになったか、大まかにわかるようになり、Javaの進化を体感できるようなセッションになると思います。

【紹介予定の機能など】
・StreamAPI
・メソッド参照
・Optional
・var(ローカル変数の型推論)
・テキストブロック
・Switch拡張(Switch式、パターンマッチ)
・Sealed Classes

【自己紹介】
所属:虎の穴ラボ株式会社
役割:エンジニアリングマネージャー、テックリード
主に書いている言語:Ruby, Java, Kotlin

採択 Intermediate Spring Yes (YouTube) Video:40min + Live:10min

5年ぶりのメジャーアップデート! Spring Framework 6 & Spring Boot 3

making 槙 俊明 making

約5年ぶりのメジャーアップデートされたSpring Framework 6とSpring Boot 3について紹介します。
(後で追記します)

2
採択 Beginner Spring Cloud Tools Yes (YouTube) Video:15min + Live:10min

AWS環境におけるSpring BootアプリケーションのCI/CDをCircleCIで構築した話

shinops 篠原 正太 shinops

不動産業界の業務システム開発プロジェクトにおいて、
複数のSpring Batchアプリケーションと、Spring BootのWebアプリケーションからなるシステムの開発を行っています。

本セッションでは、これらのアプリケーションのCI/CDをCircleCiで構築するにあたって、
DBマイグレーションからテストデータ投入までをパイプラインに組み込むなど、考慮した点や工夫した点などを紹介できればと思います。
AWS環境でSpring Bootアプリケーションを構築する際の参考事例としてお聞きいただければと思います。

2
採択 Beginner DevOps Tools Others Yes (YouTube) Video:15min + Live:10min

Git 未経験者が GitHub Actions で CI/CD できるようになるまで

mackey0225 浅野正貴 mackey0225

GitHub Actions は GitHub が提供している CI/CD ツールです。
担当しているサービスは Java/Spring Boot で構築しており、サービス公開してから3年が経ったが、
・テスト環境へのデプロイが手動のため、メンバー作業の属人化や定常的な運用コストが発生していた
・静的解析ツール未導入のため、レビューやテストなど人の手作業で品質を上げていた
など改善の余地がありました。

本セッションでは、
Git 未経験者(私)が上記の課題に対して、
GitHub Actions を用いた「ビルド・デプロイの自動化」や「静的解析ツール・コードフォーマッターの適用と自動化」を実装し、
そこで得られた成果や苦労、学び・気づきについてお話します。

内容の概要としては、
・前提の説明
・実施前後の効果と成果
・実装方法
・GitHub Actions のテストの方法・レビュー観点
・実施後の運用課題
を予定しております。

2
採択 StepUp Java SE Jakarta EE JVM Architecture Yes (YouTube) Video:40min + Live:10min

MicroProfile JWTを使って、マイクロサービスをセキュアにしよう

htakamiy 高宮 裕子 htakamiy

1.トーク概要
2.自己紹介
3.応募の動機

1.トーク概要

「最近マイクロサービスの話題を見かけるけれども、マイクロサービスのセキュリティはどうなっているんだっけ?」
というプログラマーの方々を対象に、MicroProfile JWTの概要を、簡単なデモも含めてお話したいと思います。

マイクロサービスにセキュリティをかけるには、MicroProfile JWTという、トークンを使用した認証、認可の仕組みが用意されています。
MicroProfile JWTを使うと、クライアント側からサービスへ、また、サービスから別のサービスへ、と安全にアクセスすることが可能です。

このトークでは、はじめにMicroProfile JWT (https://microprofile.io/)と、JWTまたはJSON Web Tokenと呼ばれるトークンの概要をご紹介します。

続いて、2つのマイクロサービスを実際に立ち上げて、サービス同士が、JSON Web Tokenを介して通信するように設定します。
この簡単なデモを通して、MicroProfile JWTの仕組みを、実際に見ていきたいと思います。デモのマイクロサービスは、片方をOpenLibertyで、もう片方をQuarkusで動かしてみようと思っています。

どうぞよろしくお願いします!

2.自己紹介
高宮 裕子(たかみや ひろこ)
アメリカ ノースカロライナ州 在住
米IBMにて、WebSphereとOpenLibertyのセキュリティ開発部門に13年目になります。

3.応募の動機
同僚や友人に、デベロッパー・コミュニティに参加している人が多いので。
日本のJavaコミュニティに参加できたら、とてもうれしいので。
JJUGの着物姿のロゴも可愛いです

採択 Beginner Others Yes (YouTube) Video:15min + Live:10min

脆弱性対応を支える技術

梶紳之介

Javaでは定期的に訪れる脆弱性対応。4半期に1度のペースで Oracle Critical Patch Updates が発表されます。
また依存ライブラリに目を向けると、最近では Spring4Shell など深刻な脆弱性が発表されたことは記憶に新しく、慌ただしい対応を余儀なくされた方もいらっしゃるかと思います。

脆弱性対応のより早い、より安全なリリースを妨げる要因は何があるでしょうか。
・リリースに停止が伴う:事前に顧客周知するなどのリードタイムが発生
・手動テスト:品質担保に時間がかかる。そのため網羅的なテストができず懸念が払拭できない

私達の開発チームでは早く、安全に脆弱性対応ができる状態です。
それは様々なプラクティスが積み重なり、上記のような要因を解消できたのだと考えております。
・無停止リリース
・自動テストの充足(ユニットテスト、E2Eテストなど)
など

本発表ではそれらのプラクティスをお伝えし、みなさまが安心して脆弱性に対応できる一助になればと思います。

5
採択 Beginner Java SE Architecture Video:15min + Live:10min

Javaで実現するフォールトトレランス 〜Resilience4jを使ったサーキットブレーカーの実装〜

今野裕介

マイクロサービスにおいては一部のサービスが障害を起こして応答が不能になったり、ネットワーク的にリクエストが到達不能になることがあります。その際に無対策だと連鎖的に各サービスがダウンし、アーキテクチャー全体が機能不全に陥ってしまいます。

対策としてはサーキットブレーカーの適用が挙げられます。サーキットブレーカーは局所的な障害がアーキテクチャー全体に波及しないように障害を分離する機構です。しかし、自力で実装するのはコストが高いのが難点です。

Resilience4jはJavaでフォールトトレランスを実現するためのライブラリです。数多くの機能を備えますが、その中の一つにサーキットブレーカーがあります。本セッションでは以下内容について解説したいと思います。

・Resilience4jの概要
・Resilience4jを利用したサーキットブレーカーの実現方法の解説
・Resilience4jを利用したリトライの実現方法の解説
・弊社サービスである「楽楽勤怠」での適用例

4
採択 Video:40min + Live:10min

Reactive vs. Blocking with Helidon!

Mitia Alexandrov

Helidon is a brave, small but powerful opensource framework for writing microservices. And if you need get the maximum performance – making your apps reactive is currently the best way to do it! In this session we will dive deeper and see how to create extremely performant reactive microservices with Helidon “SE” flavour. Since Helidon has its own powerful Reactive Engine, we will learn how to get the most requests served in async operations and Messaging.

But the game changer Project Loom is already here, and Helidon supports it out of the box, we will make a live comparison of what is better – the hard reactive approach, or regular blocking code optimised with Loom! Welcome to the Danger Zone!

機械翻訳:
Helidonは、マイクロサービスを書くための勇敢で小さいが強力なオープンソースフレームワークである。そして、もしあなたが最大のパフォーマンスを得る必要があるなら、アプリをリアクティブにすることは現在それを行うための最良の方法です。このセッションでは、Helidonの「SE」フレーバーを使って、非常にパフォーマンスの高いリアクティブマイクロサービスを作成する方法について、より深く掘り下げて見ていきます。Helidonは独自の強力なReactive Engineを持っているので、非同期処理とメッセージングで最も多くのリクエストを処理する方法を学びます。

しかし、ゲームチェンジャーであるProject Loomはすでに登場し、Helidonはそれを箱から出してサポートしているので、ハードなリアクティブアプローチと、Loomで最適化した通常のブロックコード、どちらが優れているかをライブで比較します。デンジャーゾーンへようこそ

採択 Video:40min + Live:10min

Make your life easier with Jakarta's new persistence features: Data and NoSQL

Otavio Santana

Persistence is the soul of modern architecture. It is a way to have a state in the stateless application, mainly in distributed systems such as microservices and cloud age app style.

We handle various persistence sources such as SQL, NoSQL, or even web services. With a considerable amount of options or flavors, how can we have a business away from these details or have a loose couple between the application and the persistence engine?

This presentation will discuss the new trends in the modern persistence model around enterprise architecture.

機械翻訳:
永続性はモダンアーキテクチャの魂である。主にマイクロサービスやクラウド時代のアプリスタイルなどの分散システムにおいて、ステートレスなアプリケーションにステートを持たせるための方法である。

SQLやNoSQL、あるいはWebサービスなど、さまざまな永続化ソースを扱います。このように様々なオプションやフレーバーがある中で、どのようにすればこれらの詳細から離れたビジネスを行うことができるのか、あるいはアプリケーションと永続化エンジンの間に緩やかなカップルを持たせることができるのでしょうか。

本発表では、エンタープライズ・アーキテクチャにまつわる最新の永続化モデルの新しいトレンドについて説明します。

採択 Intermediate Java SE Cloud JVM Yes (YouTube) Video:15min + Live:10min

Fargate上のJVMからCPUを認識するまで 〜正しく認識されないCPUの謎を追え〜

orekyuu orekyuu orekyuu

DeNAのわたしが所属するチームではJavaアプリケーションをECS on Fargateで運用を始めました。まずはGCアルゴリズムを指定せず動かしてみたところ、Serial GCが選択されていることが発覚。JVMから見えるcpu数を見ると複数のCPUが使えるはずのECSタスクであるにも関わらず1つに見える現象に遭遇しました。

問題の発見から行った調査、原因の解決までJVMの実装も合わせて紹介します。

2
採択 Beginner Architecture Yes (YouTube) Video:15min + Live:10min

非同期メッセージングサービスを使ったLINEメッセージ配信の改善

hkazushi0627 平井 一史 hkazushi0627

LINE STORE(https://store.line.me/)という、LINEの各デジタルアイテムを販売するWebアプリケーションを開発しています。
LINE STOREでは、多くの場面でLINE STOREの公式アカウントからユーザにメッセージ配信を行っています。
たとえば、ユーザがスタンプ購入後の購入完了通知やボーナスクレジット付与通知などです。

このメッセージ配信処理を、同期処理からメッセージングマイクロサービスを使った非同期処理に移行し、課題を改善したことを共有したいと思います。
以下のような、よりソフトウェアアーキテクチャの視点で共有します。
・同期処理における課題
ex) メッセージAPI障害時に、メッセージの再送しづらい問題、メッセージAPIのレイトリミットへの対策
・非同期メッセージングサービスの説明と利点。移行するにあたって検討した事項
ex) メッセージAPI障害時の自動リトライ、レイトリミッターの適用、Webアプリケーションとメッセージングサービスのそれぞれの役割の決定
・非同期メッセージングサービスのテクノロジースタック
 ex) Apache Kafka、Decaton(LINEのOSS、Java Job Queue Library)、Spring MVC

2
採択 Intermediate Java SE Yes (YouTube) Video:40min + Live:10min

バーチャルスレッド詳細

mike_neck もちだ mike_neck

概要

Java19 よりバーチャルスレッドがプレビュー API としてリリースされました。
バーチャルスレッドは既存のスレッドに比べると遥かに軽量で、
高スループットの並行アプリケーションを容易に書けるようになります。

このセッションでは仕様書、OpenJDK のコード、サンプルプログラムを通じて、
バーチャルスレッドの動作を明らかにしていこうと思います。

目標

  • バーチャルスレッドの仕組みを理解する。
  • バーチャルスレッドで避けたほうがよいプログラムを理解する。
  • アプリケーションにどのような変更が必要なのか?あるいは変更が必要ないのかがわかるようになる。

扱わないこと

以下は本セッションの理解には欠かせないものの、扱う時間がないため、事前に学習されることをおすすめします。

  • 従来のスレッドについての理解
  • Fork/Join フレームワークについての理解
  • poll/epoll/kqueue/wepoll によるネットワーク多重化

内容予定リスト

  1. VirtualThread の意義
    • サーバーアプリケーションの課題
    • 非同期型・別API型から Thread への回帰
    • ざっくり VirtualThread
  2. VirtualThread にふれる
    • Thread.Builder API
    • ExecutorService API
    • CarrierThreadForkJoinPool
    • マウンティングとアン・マウンティング
    • 停止と再開
  3. 既存アプリケーションの移行
    • VirtualThread を使うのが適切なアプリケーションの条件
    • アプリケーションコードをそのまま使える条件
    • PIN とは?発生の有無を診断する
    • スレッドローカル実験
    • JFR/JMX によるスレッドの監視
  4. 他APIの変更
    • ThreadGroup/Thread の変更・非互換
    • JEP-428 Structured Concurrency
2
採択 StepUp Java SE Yes (YouTube) Video:40min + Live:10min

入門:テスト技法とJUnit

suke_masa 多田真敏 suke_masa

プログラムは書いたら終わりではありません。本番稼働する前に、決められた仕様どおりに動作するかをしっかりテストする必要があります。
それに加え、テストはプログラムで書くことが重要です。これにより、テストを短時間かつ繰り返し実行できるようになります。
このセッションでは、テスト項目を洗い出す方法、そしてJUnitを使ってテストをプログラムで書く方法を解説します。

2
採択 Intermediate Java SE Tools Yes (YouTube) Video:40min + Live:10min

Maven Puzzlers

aalmiray Andres Almiray aalmiray

Apache Maven is an ubiquitous build tool in the Java ecosystem, some even claim it's the defacto standard build tool. Configuring Maven is deceptively simple, after all it's just a matter of writing XML, isn't it? Things look differently when the rubber meets the road. One must know the intricacies of the build lifecycle; how plugins, goals (mojos), and phases come together; rules for dependency resolution; configuration inheritance between parent - child POM files; enhancing the build with profiles; and more. These features may trip you over if the rules that govern them are unclear. We'll present a series of scenarios to test your knowledge on Maven rules. we guarantee you'll leave this session with a few bits of new information and better understanding of the Maven build tool.

機械翻訳:
Apache Mavenは、Javaエコシステムにおいてユビキタスなビルドツールであり、事実上の標準ビルドツールであると主張する人さえいます。Mavenの設定は驚くほど簡単で、XMLを記述するだけです。しかし、実際に使ってみると、状況は一変します。ビルドライフサイクルの複雑さ、プラグイン、ゴール(Mojos)、フェーズの組み合わせ、依存関係の解決ルール、親子POMファイル間の設定継承、プロファイルによるビルドの拡張などを知っておく必要があります。これらの機能を制御するルールが不明確だと、つまずく可能性があります。このセッションでは、Mavenのルールに関する知識を試すために一連のシナリオを提示します。このセッションで、いくつかの新しい情報とMavenビルドツールのより良い理解を得られることを保証します。

2