Spring Fest 2019 に行ってきた #jsug

Spring Fest 2019 に行ってきました。簡単に所感をまとめます。

springfest2019.springframework.jp

所感

3回目の参加。朝イチで仕事の打ち合わせが入ってしまい基調講演は聴けず。

GraalVM や RSocket, Quarkus, コンテナ/クラウドなど、個人的に気になるキーワードが並んでたのですが、このあたりは普段の JSUG 勉強会でもテーマになりそうかなと思って、今回はあえてそれ以外のテーマを中心にピックアップしてみました。とはいえ、コンテナ関連の話は聴いておけばよかったかな...。

個人的には Micrometer や Spring Cloud Contract + Pact あたりのセッションがよかったです。

以下、メモから抜粋。

Spring Boot爆速開発超絶技巧

  • キーマップはデフォルトがおすすめ (ペアプロが捗る)
  • 入力ソースはUSキーボードで
    • 日本語IMEの半角英数モードだとショートカットが衝突する
  • タッチバー無効化 (Fnキーの方が高機能)
  • 検索/ファイルオープン系
  • ナビゲーション系
  • ポップアップでは絞り込みを使う
  • 指定クラスの指定行にジャンプ
  • Tab/Enterの補完の違い
    • Tabで補完すると以前の記述を置換できる
  • ステートメントを完結 (その行をフォーマットしてセミコロンを付けてくれる)
  • Live Template
  • Postfix completion
  • ブレークポイントを条件指定で止める/標準出力
  • Spring Dashboard + Services
  • Docker コンテナないのファイルが見れる
  • Actuator のエンドポイントから HTTP リクエス
  • Git でコミット時にフォーマットしたり壊れたコードを検出したり
  • プルリクを作成したり確認したりコメント追加/確認したり
  • おすすめプラグイン
    • Key Promoter X
    • Presentation Assistant
    • Rainbow Bracket

普段は Eclipse ユーザーなのですが、IDE をこんな感じに使って生産性向上できるという視点で参考になりました。IntelliJ IDEA ならではの機能もあるかと思いますが、Eclipse でも同じようなことができるか試してみようかな。Postfix completion は便利そう。あと、Eclipse では View で表示されるものが IntelliJ IDEA ではポップアップで表示されたりしてていい。ブレークポイントを条件指定で止めたり、標準出力に処理結果を出力したりというのはよくやります。

ローコード開発プラットフォームと、ドメイン駆動設計と、Springの関係

yoshinorinie.hatenablog.com

  • 会社を横断して設計のノウハウを共有できないか (業界ごととか)
  • Wagby のデモ
  • ローコード開発 == 少ないコードで実装を進める
    • ノーコードを含む
    • 非エンジニアがツールで実装を手掛ける
  • Java 側の設計情報と実装コードを一致させる
  • 影響分析と自動更新
    • Excel 設計書とソースコードでは影響分析に時間がかかる
    • Excel 設計書からプログラムを自動生成するのは無理
  • ビジネスプロセスプログラミング
  • 自由度が高すぎると自動生成ができない

DDDとローコード開発の共通点は設計情報と実装コードの乖離をなくして変更容易性を向上すること。そこにローコード開発というか Wagby の自動更新を組み合わせることで常に変更可能な基盤を作ることがポイントっぽいです。

徹底解剖Spring MVCアーキテクチャー -DispatcherServletの中身を覗いてきました-

www.slideshare.net

  • HandlerMethodArgumentResolver インタフェース
    • 引数になりえるクラスがそれぞれ実装している
  • 引数に指定可能な型はあらかじめ設定してある (戻り値の型も同様)
    • RequestMappingHandlerAdapter#getDefaultArgumentResolvers
    • RequestMappingHandlerAdapter#getDefaultReturnValueHandlers
  • 戻り値が void の場合はリクエストURLが論理View名となる
  • DispatcherServlet#doDispatch

Spring でコードリーディングする際のポイントとして参考になる内容でした。次回は Spring Boot アプリの起動処理のセッションを期待。

実践 Spring Boot Actuator + Micrometer ⇒ 無茶振りMicrometerの話

docs.google.com

  • Micrometer 自体は Spring に依存しているわけではない
    • いろいろなバックエンドに対応
  • 運用やデバッグで役立つエンドポイント
  • Application metrics
    • アプリケーションだけが知っているメトリクス
  • Tag / dimension / label
  • レスポンスタイムやメモリ使用量のメトリクスをもとにアラートをあげる
  • Gauge
    • Up/Downする値を計測する
  • Counter
    • カウントアップする値を計測する
    • 基本的にクリアしない (バックエンドに送信するときにクリアするのもあり)
    • 値がオーバーフローしなければ問題ない
  • Timer
    • ストップウォッチ
    • 時間計測して max / average したり?
  • Distribution Summary
  • JVM など主要なメトリクスはデフォルトで収集してくれる
  • Actuator を depend に追加しておけば Controller のエンドポイントごとに処理時間を計測してくれる
  • デフォルトはインメモリ
  • バックエンドに送信する場合は必要なものを depend に追加する
    • Auto Configuration がなければ Bean を登録する
  • 複数のバックエンドに送信可
  • AWS Cloud Watch は対応済み、Zabbix は未対応
  • MeterRegistry からカスタムメトリクスを登録できる

代打セッションだったけど、個人的にいちばん興味深い内容でした。今、レガシーなシステムの保守をしていて、アプリケーションログをいい感じに集計するツールを作ろうかと思ってたけど、Micrometer でメトリクスを集計する仕組みを作ってもいいのかなと思いました。導入できそうかちょっと調べてみようかと。

Enterprise Angular Development

  • 画面デザインしてアプリケーションを作る
    • jQuery で実装されたデザインは Angular に移植しにくい
  • 構造をデザインしてアプリケーションを作る
  • Atomic Design
  • Angular Library
  • UI のコンポーネント構成を yaml で定義

もう少し Spring に絡めた内容を期待してましたが、割とフロント寄りの内容でした。JS フレームワークと Spring の組み合わせるときの事例紹介とか聴きたい。

JSP/JSF から Spring Web + Thymeleaf への移行

www.slideshare.net

  • 汎用テンプレートエンジン
  • Thymeleaf はソースコードがきれい
  • Standard dialect + Thymeleaf-Spring パッケージ
  • HTML5 対応済み
  • Spring との高い親和性
  • サーバー起動しなくてもブラウザでレンダリング可能
  • デフォルトの挙動がセキュア☆
  • カスタムタグの開発のしやすさ
  • 時代はクライアントサイドレンダリング?SPA?
  • カスタムダイアレクトによる共通化/再利用
    • (中級者向け) AbstractAttributeTagProcessor / AbstractElementTagProcessor
    • (上級者向け) AbstractElementModelProcessor
  • attoparser
    • HTML パーサー
  • unbescape
    • エスケープライブラリ

Thymeleaf はソースコードがきれいとのこと。パーサーやエスケープのライブラリもおすすめとのことなので、コードリーディングしてるか。

Springアプリケーションのテスト道具 使いどころ、使わないどころ

  • モックのパワフルさが設計を歪める
  • Boot 2.2 から JUnit 5 がデフォルトに
    • vintage は外して JUnit 4 のコードと混在しないようにする
  • CI のビルド/テスト、デプロイ、e2e テスト では Docker を使う
  • レイヤードアーキテクチャではテストは包含関係になりえる
    • どの単位でテストするか
    • できることとすることを区別する
  • 権限のテストは Controller でやる
  • テストしたいことの近くでテストすることが原則
  • 近いところでテストするためにモックがある
  • 使わないどころの判断
    • できる/できない、向き/不向き
    • 不向きなものを無理やり使わない
  • 評価軸☆
    • 作成、保守、実行、評価
  • MockRestServiceServer
  • モックを使うことで何がテストできて何がテストできなくなるか

「モックのパワフルさが設計を歪める」「どのようなテストでも何かしらをモックしている」などのメッセージはなるほどという感じ。普段、気が付かない観点だったり、分かってはいるけどできてないことだったり、評価軸のあたりは参考になりました。

Spring with React for Enterprise Application

  • 要件定義/設計はイベントストーミングで
    • データだけで業務が回っているわけではない
    • モデル化するべき業務プロセスの開始点を探る (Domain Event)
    • (Domain Event) 何が起こったか、起こる条件、与える影響
  • Bounded Context で Deployment unit がわかる
  • モデリングして作ろうとしているものを共有する
  • 一貫性のあるUI、変更に強いUI
    • styled components
    • Storybook
    • Atomic Design
  • サービス/モジュール分割
    • Bounded Context で分割する
    • 各サービスは Boot アプリケーション
    • 各サービスがどのように連携するか (Query or Pub/Sub)
  • Spring のエコシステムは何を使うか
    • 作る機能の特徴によって何を使うか
    • Spring Data REST, Spring MVC, Spring Cloud Stream, ...
  • TDD
  • Integration Test
    • 連携するサービスがたくさんあると大変
    • 起動が遅い
    • モックは信用できない
  • Contract Testing
    • Pact
    • Contract = Pact file
    • Consumer 側でモックを使ってテスト
      • リクエストとレスポンスの期待値を Contract として出力する
    • Broker に Contract ファイルを渡す (モック?)
    • Spring Cloud Contract が Pact から Contract を取得してテストする?
    • モックの信頼性向上

このセッションもとても面白かったです。Spring エコシステムに何を使うか、Spring Cloud Contract + Pact の組み合わせ、などいろいろ興味深い話が聴けました。Spring Fest 2018 でもセッションがあったっぽい。要復習。

blog.tagbangers.co.jp

その他

あとで読む。

www.slideshare.net

www.slideshare.net

docs.google.com