FURYU Tech Blog - フリュー株式会社

フリュー株式会社の開発者が技術情報を発信するブログです。

JJUG CCC 2019 Fallに参加&登壇してきました!!

こんにちは。ピクトリンク事業部の角田です。

2019年11月23日(土)に開催されましたJavaのカンファレンスであるJJUG CCC 2019 Fallに参加&登壇してきましたので報告させていただきます。

弊社はこちらのカンファレンスのゴールドスポンサーをさせていただき、スポンサーセッションという枠で登壇もさせていただいておりました。

JJUG CCCとは?

公式サイトより引用

JJUG CCCは毎年2回、春と秋に開催する日本最大のJavaコミュニティイベントです。

Java関連の技術や事例に関する良質なセッションが行われ、また異なる分野で活躍するJava技術者が一堂に会する場ともなっています。

Javaのリリースサイクルの変更に伴い、JJUG CCCの開催も半年に1回となりました。

日本の方々だけではなく、海外の著名な方々も多数参加されているということもあり、日本のJavaのイベントでは最大級のものとなっております。

会場の様子

私にとって4度目の参加となるJJUG CCC。毎回セッションにテーマがあるように感じており、今回はサーバレス時代におけるJavaについて語られているセッションが多かった印象でした。以下が私が聴講してきたセッションのまとめとなります。

Coding That Sparks Joy with Quarkus (Edson Yanaga)

JavaチャンピオンであるEdson Yanagaさんの発表でした。
Javaの有名なフレームワークというとSpring Frameworkが思いつく方が多いかもしれませんが、最近は様々な他の選択肢が出てきました。
今回はその内の1つである Quarkus( https://quarkus.io/ )についての話でした。
今までJavaは起動速度やメモリ使用量に対してそこまで意識しなくてもよい世界にいました。しかしながら、サーバレス時代になってきた今、そうもいかなくなってきました。
オートスケーリングさせるために出来るだけ起動速度を早くしなければならなく、現状Spring Bootなどの全部入りのフレームワークでは厳しいところもあります。
そういった時代にJavaもついていくためにもQuarkusのようなフレームワークが誕生しました。
Quarkusはアプリケーションの起動速度を削減しただけではなく、メモリ使用量の削減、また小さなサイズのコンテナイメージを作成することができます。
Edsonさんの発表ではQuarkusの凄さをライブコーディングで伝えてました。
私自身Quarkusに関する知識不足でQuarkusの凄さの全容を知ることができませんでしたが、とても使ってみたいという気持ちになりました!

Javaで学ぶオブジェクト指向プログラミングの基礎知識 (増田 亨)

オブジェクト指向プログラミング入門 — Java object-oriented programming primer from 増田 亨

「現場で役立つシステム設計の原則」の著者である増田亨さんによる発表でした。聴講の対象者としては、オブジェクト指向プログラミング初心者とのことでしたが、

増田さんの発表は毎回得るものが多く、改めてオブジェクト指向プログラミングというものを考えてみようということで聴講させていただきました。

今回のキーワードは「型」、「カプセル化」でした。それぞれのキーワードについてとても丁寧に説明されており、

自身が普段心がけていたことが間違っていなかったと再確認することができました。

オブジェクト指向プログラミングには2つのモード(モード1とモード2)があります。モード1はJava標準の型だけ使い、モード2は独自の型を自身で定義するものとのことです。

増田さんは本当のオブジェクト指向プログラミングの旨味はモード2にあり、型の消費者ではなく型の生産者になることが重要とおっしゃってました。

この言葉を忘れず日々努力していきたいと感じました。

開け!ドメイン駆動設計の扉(成瀬 允宣)

GMOインターネットの成瀬允宣さんの発表でした。私自身、今年の春のCCCの時に成瀬さんのドメイン駆動設計のお話を聴かせていただいてとてもわかりやすかったため、今回はドメイン駆動設計を周りの人に知ってもらうためにこちらの発表を聴かせていただきました。
今回の内容は、ドメイン駆動設計に興味はあるけど、Eric Evans氏の書籍に手を出すのは、、、という方向けの発表でした。
私自身も同じような感じで興味があったけど、なかなかあの厚さの書籍に手を出せなかった時期もあったので、こういった発表は初学者にとっては後押しとなり嬉しいと感じました。
最近になってドメイン駆動設計が流行りだした理由としては、10年ほど前にドメイン駆動設計にトライしたプロジェクトが今になって変更に耐えうるものになってきて、それが注目されだしたかららしいです。
話の内容としてはこの前に聞いた増田さんの「Javaで学ぶオブジェクト指向プログラミングの基礎知識」と結構かぶるところもあり、オブジェクト指向プログラングをしっかりしていれば対応できるようなところもあるように感じました。
ドメイン駆動設計において一番大事なことはドメインエキスパートとの会話がとても大切で、当たり前のことを当たり前にやることであるらしいです。確かに当たり前のことを当たり前にやること自体が1番難しいことなのだとこの発表を聴いて知らされました。

長く続くサービスがモダンであり続けるためには(角田 拓己)

こちらは私が発表させていただいたものになります。初めての発表でありながら200名近くの方々に聴いていただきとても楽しかったです。

発表内容としては、長く続くサービスのモダンさを維持するためのメソッドを紹介していきました。

普段私が感じていることなど色々こちらのスライドに込めていますので、皆さんも何か感じるところがあればうれしいかぎりです!!

Javaの起動速度といかに戦うか(きしだ なおき)

 LINE Fukuokaのきしださんによる発表でした。最初の方にも少し述べていますが、Javaの起動速度をいかにして短縮させるかについての話でした。

新規で作成するようなアプリケーションや、マイクロサービスのような単機能のものでよければQuarkusやMicronautのようなフレームワークを利用することで解決できるかもしれませんが、
既存のアプリケーションに対して起動速度をあげようとした場合、このようなフレームワークの置き換えは気軽にできるものではないと思います。そのような場合、今回はなされた内容が適用できるかもしれません。
スライドにも記載されてますが、そもそもJDKを8から13に単純に置き換えるだけでも約100msほど早くなっているようです。これはJava12からDefault CDS(Class Data Sharing)でCDSが効いていることが要因らしいです。また他に起動速度を早くする手段として今回のCCCで私が聴いたセッションの半分以上で出てきたGraalVMによるNative Imageの作成です。Native Imageにすることで起動速度は大幅に短縮できるそうですが、スループットは逆に悪くなるそうなので、この辺はどのような環境で使うかによって考えた方が良さそうです。
きしださんの発表は過去のCCCや勉強会で聴かせていただいたこともあり、今回も僕のような初心者でもわかりやすく解説してくださってました。

Serverless時代のJavaについて(下川 賢介)

Serverless時代のJavaについて from Amazon Web Services Japan

Amazon Web Servicesの下川さんによる発表でした。こちらもサーバレス環境におけるJavaの最適化についての話で、特にAWS Lambdaに着目したお話でした。
今までと同じようにAWS LambdaでもSpring Bootのjarを載せようとするとコールドスタート問題が発生してしまうとのこと。出来るだけフレームワークを利用せず、
プレーンJavaでLambdaの関数を定義するのがベストらしいです。とはいえ、フレームワークの恩恵を受けて実装したいときは、最初から全部入りのフレームワークを利用するのではなく、
最小構成に単機能のライブラリを追加していくことで多少コールドスタート問題は解決するらしいです。とはいえやはりSpring Bootに慣れてるためSpring Bootを使いたいという時に
aws-serverless-java-containerというものが用意されているそうです。このようにサーバレス時代になり、今まで考えてこなかった部分(Javaの起動速度など)も考えていかないといけなくなったため、このようなベストプラクティス的な発表はとてもありがたかったです。

JVMs in Containers: Best Practices(David Delabassee)

OracleのDavid Delabasseeさんによる発表でした。こちらはコンテナ環境におけるJVMのベストプラクティスのお話でした。
様々な視点からベストプラクティスを話されていました。
例えば、コンテナイメージのサイズを下げるためにJDKをそのまま利用するのではなく、JDK9から入っているjlinkを使ってカスタムランタイムイメージを作成することでサイズを小さくできるそうです。アプリケーションの起動速度に関しては他の方の発表でもありましたが、JDK13を利用するだけでdefaultでCDS(Class Data Sharing)が利用されているため、JDK8に比べて早くなります。このようにコンテナの最適化するにはDockerイメージを出来るだけ小さくすることと、アプリケーション自体の起動速度を早くすることが求められるとのこと。
またDavidさん曰くJDK8はコンテナに最適化されていないため、新しいものを使うことをオススメするとのことでした。
私自身コンテナ周りの知識があまりなかったですが、これから勉強しようとしていたのでとても勉強になりました。

懇親会の様子

CCCの懇親会といえば毎回恒例となっているLINE寿司です!!

とても美味しかったです!!いつもありがとうございます!!!

今回は登壇したこともあり、ありがたいことにたくさんの方々とお話しさせていただきました。

まとめ

最初にも述べていますが、今回はサーバレス時代におけるJavaについて語られていたセッションがとても多いイメージでした。

そのほかにもたくさん面白いセッションがありましたので、こちらからご覧になってみてください!!