エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

JJUG CCC 2024 Fall 参加報告

公式サイト

JJUG CCC 2024 Fall

参加したセッション

  • SpringBoot x Mybatis x TestContainerでSQLテストを行う
  • Java Agent経由で簡単に混沌を注入しよう
  • プロジェクト新規参入者のリードタイム短縮の観点から見る、品質の高いコードとアーキテクチャを保つメリット
  • テストが正しいかテストする?Mutation Testing入門!
  • プロダクトが変われば、テストも変わる。テストピラミッドの再構築
  • オブジェクト指向プログラミングの教え方・学び方
  • アンカンファレンス ②どのエディタが至高か、どのO/Rマッパーが最強か
  • 最近のSpring Bootの便利機能を復習!

メモ

感じたことをつらつら書く。
詳細は資料の方を参照

SpringBoot x Mybatis x TestContainerでSQLテストを行う

SpringBoot x MyBatis x TestContainersでSQLテストを行う - Speaker Deck

  • DB
    • 環境構築のコストが高い
  • TestContainers
    • 環境構築をコード化できる
    • フリーで使える
    • Java用のAPIが充実している
  • テストデータの管理
  • まとめ
    • 導入が用意
    • 起動が早い

個人の感想

  • DBのユニットテストを書くのが最近の主流なのだろうか?
  • SQLのみのテストなのか、ビジネスロジック含めたテストなのかよく分からんかった。
    • 触って確認するしかない。
    • 個人的にはSQLのみのテストで、カバレッジまで見れるのが理想なんだが、そこまではできないような気がする
  • SQLテストしてた時は、SQLファイルで登録か、ファイルに書き出してあるやつをインポートさせるとかしてた。ただ、メンテナンスが難しすぎて辛かった記憶

Java Agent経由で簡単に混沌を注入しよう

Java Agent経由で簡単に混沌を注入しよう - Google スライド

  • 並列、マルチスレッドのテストの全ユースケースを書くのは難しい
    • カオスエンジニアリング -> 大袈裟
    • jepsen -> テストが書きにくい
  • 極力Javaのコードを書かずに遅延を注入
    • byteman
    • chaos-dukey
  • JavaAgent経由でやることで、コードの変更なしに、遅延や故障を発生させる
  • 質疑
    • どういったところをテストしてる? -> 入出力のあるところを集中してテストしてる

個人の感想

  • JavaAgent経由のメリットが理解できなかった。モック系のライブラリ使ってユニットテストするのはダメなのか?って思ってしまった。
    • おそらく、本番に近い挙動で再現するのか試したいのだろうと思ってる
    • たぶん、そういうテストライブラリを使って来なかったから、想像ができてないのだろうと思われる

プロジェクト新規参入者のリードタイム短縮の観点から見る、品質の高いコードとアーキテクチャを保つメリット

プロジェクト新規参入者のリードタイム短縮の観点から見る、品質の高いコードとアーキテクチャを保つメリット - Speaker Deck

  • 学び方の4事象
    • 反省型
    • 指導型
    • 観察型
    • 学問型
  • 指導/観察/学問は、開発チームでサポート可能
  • 効果のあった施策
    • オニオンアーキ
      • パッケージが理解するのに役立つ
    • 設計の標準化
      • ドキュメントの整備
    • リファクタの推奨
      • 知見の共有が進む
  • 質疑
    • 開発とどうやってバランスとってる?
      • 会社で合意をとってる。2割くらいの時間もらってる。負債になることを説得した

個人の感想

  • 100パーセントキャッチアップしたって言う人いるの?俺は口が裂けても言わない。
    • 俺だったら「あと3ヶ月かかります」ってのをいつ聞かれても答える気がする
  • これは自社内で開発してるからできることな気がしてる。外に出てる人は、厳しそう。
    • 自分は外に出てる。同じ会社の部下は、別な現場だったりするので、観察型の考え方を教え込んでるけど、できているのかは分からない。
  • 設計の標準化で、リファクタリング指標をドキュメント化してるのは、珍しいと思った
    • うちの会社ではしてないな。たぶん、意見が割れすぎてまとまらない気がする。
      • 混乱を導く急先鋒が俺な気がする
      • 押さえつけられたら反発したくなる性分
    • リファクタリング指標があることでコード品質やレビューの質が一定化するのではないかと思ったが、どうだろう?
  • 反省型は、上司部下の関係で育成するのかな?

テストが正しいかテストする?Mutation Testing入門!

JJUG CCC 2024 Fall mutation testing | ドクセル

  • テストコードのミス
    • assert書き忘れ
  • 意味のあるテストコードをする
    • コードレビュ
      • 人力
      • AIコードレビュー
    • テストをテスト
  • ミューテーションテスト
    • 誤りを入れて偽陰性チェック
      • 偽陽性:合格するべき箇所で不合格になる
      • 偽陰性:不合格になるべき箇所で合格する
  • Pitest
    • コードを意図的に変更
    • 早い
    • サポートの充実

個人の感想

  • 偽陽性は気にするんだけど、偽陰性を忘れることがたまにある。
  • 千葉は東京へのアクセスが悪いんだよなぁ。。。

プロダクトが変われば、テストも変わる。テストピラミッドの再構築

JJUG_CCC_2024 プロダクトが変われば、テストも変わる - Speaker Deck

  • やったこと
  • 単体テストの割合を増やす
  • ライブラリ・LLMの利用
  • レイヤごとにテスト分けてる

個人の感想

  • テストコードが増えてきてるとメンテナンスが難しくなりそうだが、どうなんだろう?
  • プロダクトを立ち上げるってのがうちの会社にはないから、テスト戦略はあんまり気にしたことはなかった。たぶん、最初は早くリリースする必要があったけど、だんだんと質を確保する必要が出てきたって感じなのだろうと思って聞いてた。

オブジェクト指向プログラミングの教え方・学び方

  • OOP目的
    • 再利用性の向上
    • メンテナンス性の向上
    • 複雑さへの対応
    • 抽象化の促進
    • モデリング
  • 目的はいくつかある
  • 提供する機構
  • 目的と機構が複雑に絡み合ってるのがOOP
  • 何かを行うのが一番大事
    • スモールゴールの設定が重要
    • 見える目標の設定
    • 演習で使った記憶にする
    • 最低ラインを決める
  • OOPで飯は食えるのか?
    • 食えません
  • OOPをどうやって覚えた?
    • 実践して覚えた
    • 実践ありきで座学

個人の感想

  • 実践で覚えるのには同意
    • 大抵の人は、経験してないと覚えられない
    • 座学で覚えて実践で使えるのは、ごく一部の天才だけ
  • レビューで学ぶことが多い
  • OOPは過度に適用すると問題があるからな
  • 俺は座学+実践+他人のコード見る
    • 実装していく中で、煩雑だったり、もっといい方法があるんじゃないか考えてたどり着いた結果がOOPの実装方法だったりしてた
    • OOPをなんとか学びたいと思っていろいろ探すと、デザインパターンに行き着く印象
  • 普段考えながら実装してないと、身につく速度が全然違う
  • CM
    • 身長差エグッくらいしか、感想が思いつかんかった。。。
    • シーサーは気づかなかった。たぶんSeaser2だろうな。日本国内の上の世代にしか伝わらない気が

アンカンファレンス ②どのエディタが至高か、どのO/Rマッパーが最強か

※逸脱した話やグレーゾーンの話は書いてない

  • どのエディタが至高か?
    • 秀丸
    • サクラエディタ
    • Emacs
    • vim
    • VSCode
    • クラウド系エディタ
      • ローカルエディタの時代終わった?
      • 日本語入力に難あり
    • nothion
      • aiが優秀
    • 今は選択肢があって何でもよくなった
    • 尖ったものがない
    • これからは、aiを利用したものが主流になりそう
  • どのO/Rマッパーが最強か?
    • mybatsが多い
    • 動的SQLのwhereはどうしてる
      • 1=1
    • 質疑
      • どのORマッパーいれるか迷ってる。どうやって決める?
        • 揉めてるのは健全?
        • 他にもなにか議論していた気がするが、メモと記憶に残ってない。。。

個人の感想

  • 始まる前にしてたSIerの話が気になった
    • そんなにスキルない奴いるのか?って疑問に思った
    • 組織が大きくなると、雇ってない世代が発生した場合、技術の継承が途絶える危険性があると感じた。特に就職氷河期の世代分離のツケが今来ているような気がした。
    • レビューできない管理者が大量にいるらしい
      • コピペが大量にあり、その結果、不要なコードだらけのものができあがり、ステップ数で見積もりが出てくるから高額になるらしい
      • 言っていることを鵜呑みはできない。最終的に市場原理が働いてそういう会社は消える気がする
  • やっぱり、会話に入るのは難しい
    • 言いたいことがありはしたが、口を閉ざしがち
    • 周りの目を気にしてしまう
  • 最近使ってるエディタは、Obsidian。ついでGoogle keep
    • 最初、IDEの話かと思ってた。。。
  • VSCodeテキストエディタとして利用している人が一定数いる
  • ORマッパー
    • 自分は、現場ではMybatis/Prepared、個人開発ではMirageSQL
      • MirageSQLはすごくマイナーだと感じた。。。
      • 結局、テンプレートエンジンの優秀さが鍵
      • 動的SQLの'1=1'は、みんな知ってた
        • まぁ、小技みたいなもんだし。。。
        • どのORマッパーでもやるんだな。。。
    • 2waySQLは一定の人気がある印象
    • Mybatisは、個人的にはあんまり使いたくはない。理由としては、比較演算子でイラッとするから。xmlの制約受けるのが辛たん
      • でも、事例が大量にあるせいで、説得はしやすい
      • そこまで情熱はないので、とりあえず今より楽になるならいいかの精神でmybatis導入させてる

最近のSpring Bootの便利機能を復習!

最近のSpring Bootの 便利機能を復習! - Google スライド

  • 注目の最新機能
    • 3.0
      • Observability
      • GraalVM Native Image
      • Java Interface Client
    • 3.1
      • Service Connection
      • SSL Bundle
    • 3.3
      • Class Data Sharing
  • Service Connection
    • データベースの接続情報の抽象化
    • ConnectionDetails インタフェース
  • Testcontainersサポート
    • コンテナのライフサイクル管理はSpring
  • Docker Composeサポート
    • Docker ComposeのライフサイクルがSpringによって管理される
    • Docker Composeで起動したコンテナ上のデータベースへ、プロパティを設定することなく自動で接続される (Service Connections)
  • SSL Bundle
  • ClassData Sharing
    • クラスのメタデータアーカイブファイルにキャッシュし、JVMの起動時間とメモリ使用量を削減する機能
    • CDS有効にするだけで40%程度早くなる

個人の感想

  • 前提知識が薄すぎてついていくのがやっとだった
  • docker compose使った開発をやってる人が多いように感じた。
    • ちょっと危機感を覚えた
      • セッションを聞きに来た人が偏ってるだけの可能性もあるが
    • dockerを開発に利用している現場が多い
  • ClassData Sharingなら、すぐにできそう
  • H2使っている人っているのだろうか?

全体通して

思ったこと羅列

  • TestContainerをいろんなところで聞いた気が。。。
  • dockerを使った開発を経験してないことに危機感を感じた
  • 試せることは試していかないと、身につかないのは誰でも一緒
  • チラシ配ったりする人って、なんで俺を確実に狙ってくるんだ?
    • 毎回入口に戻って中に入ると、必ず誰かがチラシを渡そうとしてくる
    • 一人でいるからかもしれない。。。
    • よく、何かの大型イベントに行く道中で、道端のキャチーに捕まっていたことを思い出した
  • もう5時過ぎたら結構暗い
  • 知識不足を結構感じた
    • アンテナの張り方が弱い?

関連ブログなど

JJUG CCC 2024 Fall ( #jjug_ccc ) - セッション資料の一覧 - 地平線に行く