普段Java以外の言語で開発しているプログラマが、今年発売された書籍「プロになるJava」で再勉強した話をします。
一年の内、数ヶ月レガシーなJavaシステムを触る程度のプログラマが、書籍を通してモダンなJavaに触れ、簡単なWebシステムを作成してみた感想をお話します。
また、他の言語での開発経験があるプログラマが、Javaに入門/再入門する際のポイントについても取り上げます。
不動産業界の業務システム開発プロジェクトにおいて、
複数のSpring Batchアプリケーションと、Spring BootのWebアプリケーションからなるシステムの開発を行っています。
本セッションでは、これらのアプリケーションのCI/CDをCircleCiで構築するにあたって、
DBマイグレーションからテストデータ投入までをパイプラインに組み込むなど、考慮した点や工夫した点などを紹介できればと思います。
AWS環境でSpring Bootアプリケーションを構築する際の参考事例としてお聞きいただければと思います。
Java19 よりバーチャルスレッドがプレビュー API としてリリースされました。
バーチャルスレッドは既存のスレッドに比べると遥かに軽量で、
高スループットの並行アプリケーションを容易に書けるようになります。
このセッションでは仕様書、OpenJDK のコード、サンプルプログラムを通じて、
バーチャルスレッドの動作を明らかにしていこうと思います。
以下は本セッションの理解には欠かせないものの、扱う時間がないため、事前に学習されることをおすすめします。
VirtualThread
の意義
Thread
への回帰VirtualThread
VirtualThread
にふれる
Thread.Builder
APIExecutorService
APICarrierThread
と ForkJoinPool
VirtualThread
を使うのが適切なアプリケーションの条件ThreadGroup
/Thread
の変更・非互換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の着物姿のロゴも可愛いです
GitHub Actions は GitHub が提供している CI/CD ツールです。
担当しているサービスは Java/Spring Boot で構築しており、サービス公開してから3年が経ったが、
・テスト環境へのデプロイが手動のため、メンバー作業の属人化や定常的な運用コストが発生していた
・静的解析ツール未導入のため、レビューやテストなど人の手作業で品質を上げていた
など改善の余地がありました。
本セッションでは、
Git 未経験者(私)が上記の課題に対して、
GitHub Actions を用いた「ビルド・デプロイの自動化」や「静的解析ツール・コードフォーマッターの適用と自動化」を実装し、
そこで得られた成果や苦労、学び・気づきについてお話します。
内容の概要としては、
・前提の説明
・実施前後の効果と成果
・実装方法
・GitHub Actions のテストの方法・レビュー観点
・実施後の運用課題
を予定しております。
マイクロサービスにおいては一部のサービスが障害を起こして応答が不能になったり、ネットワーク的にリクエストが到達不能になることがあります。その際に無対策だと連鎖的に各サービスがダウンし、アーキテクチャー全体が機能不全に陥ってしまいます。
対策としてはサーキットブレーカーの適用が挙げられます。サーキットブレーカーは局所的な障害がアーキテクチャー全体に波及しないように障害を分離する機構です。しかし、自力で実装するのはコストが高いのが難点です。
Resilience4jはJavaでフォールトトレランスを実現するためのライブラリです。数多くの機能を備えますが、その中の一つにサーキットブレーカーがあります。本セッションでは以下内容について解説したいと思います。
・Resilience4jの概要
・Resilience4jを利用したサーキットブレーカーの実現方法の解説
・Resilience4jを利用したリトライの実現方法の解説
・弊社サービスである「楽楽勤怠」での適用例
LINE NEWSでは約5年の歳月をかけて、バックエンドの開発言語をPerlからJavaへ移行してきました。
本セッションでは、Javaに移行した理由や、どのように移行していったのか、また、移行途中で発生したイシューについてどのように対処したかをご説明します。
技術的負債の返済やトラブルシューティングにご興味がある方は是非ご視聴ください。
Liberty InstantOnとは,Checkpoint/restore機能を追加したOpenJ9 VMと組み合わせることにより,Java EE/Jakarta EE Fullplatformに対応したアプリケーションサーバーOpen Liberty/WebSphere Libertyを超高速で起動することができる技術です。1〜数秒で起動していたLibertyの起動時間を1/10程度まで短縮することができます。現在βを提供しており,2023年の正式提供を予定しています。
GraalVMの力を借り数十ミリ秒で起動するQuarkusが人気を集めていますが,これはコンテナ技術を利用したクラウドネイティブの世界では実行環境の起動時間が本質的に重要だからです。しかしGraalVMで実行できるJavaアプリケーションには様々な制限があり,従来のJava EEアプリケーションをそのまま実行することはできません。Liberty InstantOnは,GraalVMとは別のアプローチで実行環境の起動を高速化する機能です。実行するアプリケーションの制限も少なく,Java EEのアプリケーションも実行することができます。
このセッションでは,Liberty InstantOnの詳細と,それが実現するであろうあたらしいJava EE/Jakarta EEの用途についてご紹介します。
コンテナ環境では小さいコンテナ・イメージを作成し利用するのが良いと言うのは多くのエンジニアが理解しています。
Microsoft では Microsoft Build OpenJDK を標準で提供していますが、Microsoft に限らず OpenJDK を含むコンテナ・イメージを利用するとコンテナのイメージサイズは大きくなります。そこで、jlink コマンドを使用したカスタム JRE を作成し利用する事で小さなコンテナ・イメージを作成することができます。
しかし、しっかりと考えてコンテナ・イメージを作らなければ、非効率なイメージを作成したり、セキュアなイメージを作成する事はできません。
そこで、本セッションでは、Microsoft Build OpenJDK を利用する際のコンテナ作成におけるプラクティスをご紹介したいと思います。
ここでご紹介する内容は、まだ世の谷中に余り提供されていない情報が含まれますので、Azure 環境でコンテナの利用をご検討の方はどうぞご覧ください。
数秒の停止も許されないカード決済基幹システムの更改で、安定稼働を目指しつつ性能限界を向上させるために挑戦したことをお話しします。
・レガシーシステムあるあるの解消
・インメモリDB(Hazelcast)の導入
・新旧並行稼働でヒヤリ
・リリースしたら原因不明の処理遅延発生?
についてお話する予定です。
プログラムは書いたら終わりではありません。本番稼働する前に、決められた仕様どおりに動作するかをしっかりテストする必要があります。
それに加え、テストはプログラムで書くことが重要です。これにより、テストを短時間かつ繰り返し実行できるようになります。
このセッションでは、テスト項目を洗い出す方法、そしてJUnitを使ってテストをプログラムで書く方法を解説します。
KubernetesクラスターでSpring Bootアプリケーションを稼働させる上でのクラスターの
これまで1年以上KubernetesクラスターにおけるDevOpsパイプラインの構築やSpring Bootアプリケーションの開発を行ってきました。本セッションでは実際にKubernetesクラスターのIaCで苦労したことや、GitOpsによる継続的デプロイの手法、そしてSpring BootにおけるKubernetesアプリケーション稼働の手法についてしくじり話やナレッジについてご紹介します。
■ 登場する言語・サービスなど
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)技術等についても紹介します。
今日では、迅速な DevSecOps サイクルを遂行するための CI/CD ツールが数多く存在し、多種多様な選択肢の中からプロダクトに適したツールを自由に選択することができます。
その一方で、エンドユーザのニーズや経営戦略におけるビジネスモデルの変化によって、現状最も適していると思われる選択をしたとしても数年後もベストな選択であるとは限りません。
そのため、プロダクトが成長し続けるためには、継続的な改善を前提とした選択をどのように行うのかが重要になります。
今回は、CI/CD にフォーカスし、パイプラインの移植性を向上させる「Dagger」を紹介します。
Dagger を使用することで、多種多様な CI/CD ツールの選択を阻害することなく、ビルド・テスト・デプロイといった普遍的なフローの再利用が可能になります。
これから CI/CD パイプライン構築をご検討されている皆さま、すでにパイプラインを構築済で継続的な活用をご検討されている皆さま、ぜひご視聴ください。
シンプレクスでは金融取引プラットフォームサービスを提供しています。
サービスの拡大に伴い、提供機能の拡大、顧客の増加、メンバーの変遷がある中で、暗黙知を形式知に変換していかなければサービスをスケールさせられないという課題があります。
プロダクトに関する仕様や知識をドキュメントとしてストックし、それらを実際のプロダクトと乖離させないため、私達は「実行可能なドキュメント (Executable Documentation)」 の概念に着目しました。gaugeという軽量自動テストフレームワークが私達の課題解決につながると考え、試験的に導入してみた結果について紹介したいと思います。
即戦力人材と企業をつなぐ転職サイト「ビズリーチ」は、主にJavaで書かれており、おかげさまで10年以上成長を続けながら運営をしております。
思い返すと今から4年前、事業成長のために修正を積み重ねてきたコードは変更容易性が失われ、開発の生産性は落ちていました。しかし、事業成長は停滞させず、プロダクトを磨き続けなければならない。
そういった状況の中で、我々は「日本のキャリアインフラになる」という目標を掲げ、機能改善を続けながら、アーキテクチャの刷新を進めています。
このセッションでは、急成長を続ける中でプロダクトと組織をより強くするために、これまでどのような戦略を描いて改善してきたのかをご紹介します。まだまだ道半ばではありますが、現在大規模プロダクトに携わっている方、今後プロダクトを成長させていく方のご参考になれば幸いです。
みなさんは、Java開発でどのようなツールを利用していますか?
Java開発のツールには、
・統合開発環境のEclipse
・単体テストフレームワークのJUnit
・静的解析のSpotBugs
・CIツールのJenkins
・(他多数)
等々、Javaの歴史と共に多くのツールがリリースされており、
Javaのバージョンや環境に合わせて、更新されなくなったツールもあれば、
昔から現在まで進化し続けているツールも数多くあります。
このセッションでは、Java開発ツールの中から「品質・生産性向上」関連を中心に
いくつかピックアップしたツールをご紹介いたします。
みなさんもご存知の「有名なツール?」や「マニアックなツール?」等
色々集めてみましたので、
Java開発の運用でツールを検討している方やツールの知見を広げたい方等
Java開発の改善にご興味のある方は、ぜひご視聴ください。
この情報が少しでもJava開発にお役立ていただければ幸いです。
Javaの入門書を終わって、文法を覚えたしJSPやサーブレットもやってみた、でもプログラムが作れるようになった気がしないという人は多いのではないかと思います。
このセッションでは、プログラムが作れるようになるためにどういう勉強をすればいいかを、どうやって動くプログラムを書くか、どんなプログラムを作るか、どうやってプログラムを作るか、作ったプログラムをどう動かすか、といった内容で解説します。
約5年ぶりのメジャーアップデートされたSpring Framework 6とSpring Boot 3について紹介します。
(後で追記します)
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