JJUG CCC 2021 Fall 参加メモ
JJUG CCC 2021 Fallにオンラインで参加しましたので、振り返ってメモを書いておきます。
勤怠管理サービスでの継続的テストの取り組み
GitLabに組み込まれているCI/CDの機能を使って、継続的テスト、デプロイをして、品質や作業効率の向上をしようというお話でした。
- CI/CDでリリースサイクルを短くしよう
- コードチェック(PMD,SpotBugs)、静的解析しよう!(してない)
- テストはJUnit、ArchTestで実施
- ArchTestはわからないので調べてみよう
- パフォーマンステストでも、CIで実行
- JUnitのJTLファイル、統計レポートをinfluxdbやpostgresにあげて、Grafanaで結果がみれる!
クリーンアーキテクチャは難しい?
クリーンアーキテクチャをいかに保つか?というお話でした。
- 例の図を横から見ると、凸な感じで、上からドメイン、ユースケース、インターフェース
- アーキテクチャとプロトコル(手段)をいかに一致させるか
- 下から上への「攻撃」からクリーンアーキテクチャをいかに守るか?
- 下から上への攻撃、画面!
- 抽象駆動 vs 具象駆動
- Javaインターフェースがたくさんできてしまい、複雑になってしまうことがあるが、ジェネリクスで何とか回避
- ドメインのモデル、密にするのではなく、idなど属性でよいところであればその属性で
- ModelMapperは初めて知りました
- 画面からして、クリーンに保てなさそうなときはBFF(BackendForFrontend)が必要なこともある
- サービスの主体はバックエンド、フロントエンドは利用者、どうすればサービスの主体を守れるか、はBFFやCQRSなど、手法を用いることもあらかじめ検討する
Java ジェネリクス入門
Javaのジェネリクスを使う側視点でのお話でした。ジェネリクスを作る側のお話も聞きたかったところです。
- ジェネリクスのTとかR、は、
- パラメタライズドの型は非変性、継承やインターフェースは共変なので、ここがなかなか
- 非変性にしないと型の安全性が保てなくなるのでしかたがない
- <? super B>とか<? extends A>とか、superは抽象なものOK、extendsは具象なものOK
最新 LTS Java 17 でプログラムが書きやすくなるという話
Java 17で追加された機能のお話でした。 Switchについては、、、なんだかコードレビューでひと悶着ありそうな、、、 AutoClosableのときもなんだかclose()がーというのであったような。。。
- レコードクラス
- レコードクラス宣言にレコードの要素として扱いたいものを引数みたいな感じで指定する
- レコードの要素として扱いたいものは、暗黙的にfinalで宣言される
- extendsは使えなくて、implementsは使える
- コンパクトコンストラクタというのがあり、そこでレコードの要素のチェックをするようにする
- JavaBeans仕様にのっとっていないので、SpringBootとかはレコードクラスを使うときに注意
- Entityとか
- Switch
- Switchでルール(->)を使うと、breakが不要になる
- Switch式というものができて、式なので、評価結果の値を変数に代入できるようになった
- ブロック{}で加工場合は、yieldで値を返してあげるようにする
- instanceof
- instanceofで型チェックしてダウンキャストするときは、キャストせずinstanceofでいけるようになった
- Sealedクラス
- 継承、実装するクラス、インターフェースを制限できる
- 内部向けフレームワークを作るときに有用らしい
GitHub Actionsを使って学んだCI/CD環境のあれこれ
GitHubActionsで、CI/CDを体験してみよう!というお話でした。GitHubActionsは聞いたことがあるのですが、触ったことがなく、結構簡単にCI/CDできるようになるんだなーと感じました。
- CI/CD:ソフトウェアの変更に対して、build/test/deployを自動化し、品質の向上、リリースサイクルの速さの控除湯を目指す
- GitHubActionsでは、YAMLでbuild、test、deployのふるまいを定義してCI/CDを実現する
- あらかじめテンプレートが用意されていて、それをあったものにしていく
- マーケットプレイスがあって、そこから定義を入手することが可能
- AWSなどのクラウドでも、セルフホストランナーで自前ホストでもデプロイができる
- Code Scanning Alertで静的解析もできる
- マーケットプレイスのものは、だれかが用意したものがあるので、中身を見て問題がないことを確認してから使うようにする
Javaとコミュニティの歩み
Javaの今までの歴史など、Oracle vs Googleや、JavaとOSSコミュニティのかかわりとか。 今年は、OracleJDK再無償化、次回LTSリリース後+1年サポートがちょっと大きかったのかな?
今回も感染症対策として、オンラインでのイベント実施になりましたので、普段遠くてなかなか参加できない、という方々も参加しやすいイベントになったと思います。
これからもオンライン開催だとうれしいかな。オフラインで全方位つよつよJava開発者しかいない、というところにいるのもそれはそれでよい刺激になるので、捨てがたいところもあったりします。
今までQrunchに書いていたのですが、サービスなくなってしまってどうしようかなーと思いつつ結構経ってしまいました。記事もダウンロードしていたのですが、どこにやったか忘れてしまいました。今後ははてなブログに書こうと思います。