この記事は アーキテクチャテスト Advent Calendar 2020 - Qiita の 25 日目のエントリです。
こんにちわ。株式会社ラクスで「楽楽労務」を開発している @kawanamiyuu です。遅くなりましたが、先月開催された JJUG CCC 2020 Fall の登壇レポートです。
イベント概要
日時 | 2020 年 11 月 7 日 (土) |
開催形式 | オンライン(事前録画放送+リアルタイムQ&A) |
公式サイト | https://ccc2020fall.java-users.jp/ |
タイムテーブル | https://confengine.com/jjug-ccc-2020-fall/schedule |
タイムライン | #jjug_ccc since:2020-11-07_00:00:00_JST until:2020-11-08_00:00:00_JST - Twitter Search |
発表動画リスト | 2020-11-07 JJUG CCC 2020 Fall - YouTube |
プロポーザル
jjug-ccc-2020-fall - マイクロサービスアーキテクチャをあきらめないための、モノリスで始めるアーキテクチャテスト | ConfEngine - Conference Platform
マイクロサービスアーキテクチャにチャレンジしたい!しかし、プロダクト立ち上げ時においては、
- 業務ドメインに対する知識の少なさから、適切な粒度のサービス分割が難しい
- そもそも売れるか分からない、仮説検証を高速にまわしていかなければいけない段階で、MSAで開発・運用するオーバーヘッドが大きい
- 手段が目的化している感
といった理由から、モノリシックなアプリケーションとして開発を開始するケースは少なくないと思います。一方で、あとから分割すればよいと開発を始めたモノリスで、いざ分割を検討する段階でアプリケーション内の依存関係が複雑に絡み合い、分割したくとも解きほぐすのが困難になってしまっているケースも少なくないはずです。
モノリスで適切なモジュール分割を実現するためにドメイン駆動設計や、具体的な設計パターンとしてクリーンアーキテクチャやレイヤードアーキテクチャなどの方法をとることが多い最近のソフトウェア開発において、モノリシックなアプリケーションを構成するレイヤーやドメイン、各パッケージ・クラスの依存関係をいかに適切に維持し続け、将来アーキテクチャを発展させる可能性を残すか。
この発表ではその1つの有力な方法としての「アーキテクチャテスト」についてお話します。
登壇資料
登壇資料のサマリー
登壇に対する反応
依存関係を適切に設計したいだけ
— Kei Kondoh (@kei_kondoh) 2020年11月7日
いい言葉だ#jjug_ccc #jjug_ccc_b
私のところは今は人数が少ないのでアーキテクチャに対するレビューもできるし直してももらえるけど人が増えてきたりするとアーキテクチャの維持って厳しいよなー#jjug_ccc_b
— uuuu.kt (@yushi_koga) 2020年11月7日
ここでも ArchUnit ! #jjug_ccc #jjug_ccc_b
— YujiSoftware ☕ (@YujiSoftware) 2020年11月7日
派手さはないけど落ち着いた議論でいいっすな #jjug_ccc #jjug_ccc_b
— kabao (@kabao) 2020年11月7日
「ソフトウェアが「ソフト」であるための選択肢を残す」
— YujiSoftware ☕ (@YujiSoftware) 2020年11月7日
いいメッセージ!#jjug_ccc #jjug_ccc_bhttps://t.co/O7zYARquNL
ハンズオンモデラーがいないとアーキテクチャの維持は難しいっていう印象があったけど、アーキテクチャテストがあれば、少しはそれがマシになりそう#jjug_ccc_b
— uuuu.kt (@yushi_koga) 2020年11月7日
今日は arch unit のことを初めて知った。たしかに正しくない依存の記述を、コードレビューで目で見るのは大変なので、自動テストの中でテストできるのは便利&品質の維持に繋がりますね #jjug_ccc #jjug_ccc_b
— Yuusuke Masaki (@makky55makky55) 2020年11月7日
ArchUnit、使ってみたい #jjug_ccc #jjug_ccc_b
— lethe2211 / Shuhei Shogen (@lethe2211) 2020年11月7日
登壇を終えて
まず今回、当日参加された方、タイムテーブルをご覧になった方はお気づきになったかと思いますが、まさかのアーキテクチャテストネタかぶりでした! (もう一つの発表はこちら)
アーキテクチャテストをテーマにした登壇は、過去に 2 回(ArchUnit で Java アプリケーションのアーキテクチャを CI する - JJUG CCC 2019 Spring、ドメイン駆動設計を支えるアーキテクチャテスト - Object-Oriented Conference 2020)行っていて、今回はそれらの内容も整理しながら、「マイクロサービスアーキテクチャをあきらめないための、モノリスで始めるアーキテクチャテスト」という主題で登壇内容をまとめました。
私のこれまでのカンファレンス規模のイベント登壇経験としては、最長でも 20 分枠の発表だったため、今回初めて 40 分という枠を満足させるボリュームと質の発表内容を作り上げることできるか不安でした。しかし、資料を作り始めてみるとなんだかんだでなんとか、30 分程度の発表に仕上がりました。資料としては 100 ページを超えていたため、もしかすると時間が足りないかも?と一時は思いましたが、事前録画方式だったので淡々としゃべってしまい余裕で時間枠内に収まりました。コロナ禍で無聴衆(オンライン)での発表は何度か経験していますが、目の前に聴衆がいないと、発表中の間のとり方が難しいです。
さて、今回でアーキテクチャテスト 3 部作 (?) の完結編として、いったん今時点で私がアーキテクチャというものに対して考えていることは言語化できました。今後もアーキテクチャテストを実際のプロダクト開発の中で実践的に取り組んでいきたいと思っているのと、この手の話は、プログラミング言語に関係なく通じるもので 他の言語でのアーキテクチャテスト も試してみて、別の言語コミュニティでもアーキテクチャテストを布教していきたいと思っています。
それでは、また。
今回はオンラインかつ事前録画だったからかなりましだったけど、登壇する当日までは一定のマインドシェアを持って行かれるので登壇終わったらしばらく何も考えずゆっくりしたいと思うんだけど、終わったら終わったで何か物足りなくて次の機会を探してしまう現象に名前付けたい。(文字数まであとちょっ
— ゆう (@kawanamiyuu) 2020年11月7日