Spring Fest 2019に参加しました
2019年12月18日(水)に開催されたSpring Fest 2019に行ってきました。
自分の学び・メモと所感をまとめておきます。
基調講演:From Spring Boot 2.2 to Spring Boot 2.3
学び、メモ
- Spring Initializr
- 1ヶ月で1M以上のプロジェクトが生成されている
- 中国、アメリカ、インドがトップ3。日本は6位
- クライアントはIDEが大半。Webが20%くらい、CLIは5%くらい。中国を除くとWebとIDEが半々くらい。
- Spring Boot 2.3
- Containerサポート、Kubernetesサポート
- Spring Dataの依存ライブラリアップデート
- リリース周期の短縮
- サポートポリシー
- 2019年08月 Spring Boot 1.X EOL
- 2019年10月 Spring Boot 2.2 GA
- 2020年01月 Spring Framework 5.0/4.3 last release
- 2020年04月 Spring Boot 2.3 GA
- 2020年10月 Spring Framework 5.3 / Spring Boot 2.4 GA
- 2020年11月 Spirng Boot 2.1 EOL
所感
Spring Boot 2.2についてはJJUG CCC 2019 Fallで槙さんの発表を聞いていたため、特段大きな発見はありませんでした。
昨年はKotlinサポートについて触れられていましたが、今年はほとんど触れられておらず、その辺りの対応も一段落したのかなーという印象です。
ちなみにバナーの話はここでも結構時間をとって話していました。やはり開発チーム、Banner大好きなのか…。笑
Spring Boot爆速開発超絶技巧
サムライズムの山本さんによる発表。資料はこちら
学び、メモ
- タッチバーは無効化しよう。ファンクションキーの方が高性能
- 何でも実行: Ctrl×2
- ナビゲーション:
- バージョン管理ペイン:Cmd + 9
- Recent Locations: Shift + Cmd + E
- 開いた後にもう一回Shift + Cmd + Eを押すと、最近編集した箇所だけになる
- コロン+行番号→その検索ファイルの指定行数に飛べる
- メソッド候補を補完完了するときは、Tabで完了したほうがよい。置換してくれる。
- Live Template
- Services
- Spring Bootを表示できる
- コンテナはServicesに表示したり、コンテナ内のファイルも見たりできる。
- パンくずリストに移動:Cmd + ↑
所感
過去に参加したIntelliJ IDEAのセミナーの要約版という感じでした。
ただ、セミナーでは触れられていなかった機能や、その後に追加された機能もあったため、収穫はありました。
むしろセミナーを受けたのに「これ実践ではまだ使いこなせてないなー」と気付かされる点もあり、普段の使い方を振り返るよい機会になりました。
IntelliJ IDEAを使いこなすことは生産性向上に直結するので、今後も時々フォローアップしていきたいと思います。
ローコード開発プラットフォームと、ドメイン駆動設計と、Springの関係
ジャスミンソフトの贄さんの発表。内容はこちら。
実は昨年もジャスミンソフトさんのセッションを聞きましたが、この社長の方のプレゼンはすごく引き込まれて面白かったです。
ドメイン駆動設計に関しては違和感を覚える箇所もありましたが、DDDは自社製品を引き合いに出すために触れたのだと思うので、突っ込むのは止めておきます。
ランチセッションですし。
ITの未来を本気で考えて危惧されていることを事業にしており、業界全体からプログラマーの現場まで、課題やトレンドまで理解しようとする向き合い方が素晴らしいと思いました。
システム間連携を担うSpring Integrationのエンタープライズ開発での活用
NTTデータの方による発表。資料はこちら。
学び、メモ
- Spring Integrationで重要な3つの概念
- Message
- 送受信の最小単位
- HeaderとPayloadから構成
- Channel
- 流通方式:Point-to-Point, Pub/Sub
- 受信方式:Subscribable, Pollable
- Endpoint
- 始点・終点:アプリケーションとの連携部分
- メッセージフロー内部:Messageの加工に使う
- Message
- 実案件へ適用する際の課題と工夫
- コンポーネントの再利用
- 普通に作ると(連携元システム数×連携先システム数)に比例する数だけGatewayやTransformerが必要
- 処理の標準化
- 自由度が高く、そのまま実装すると無秩序になるため、一連の処理を「サービスコネクタ」として標準化
- Inceptorによるログ出力
- エラーの発生箇所を特定できるログを出力するため、Interceptorによってメッセージフローに割り込み処理
- ServiceActivatorの拡張
- ServiceActivatorに毎回同じ処理を書かなくても良いようにする
- コンポーネントの再利用
所感
EIPのためのライブラリにはApache Camelもありますが、Springと使うのであればIntegrationの方がいいんだろうなーと思っているので、聞いてきました。
Spring Integrationは日本語の情報が少ないので、こういった発表が出てくるのは非常にありがたいです。
このセッションの内容で概要は掴めるので、あとは公式ドキュメントを読みつつ色々試行錯誤してみようと思います。
余談ですが、こういう発表やTERASOLUNAのサイトを見るに、NTTデータさんは今でもXMLが主流なようです。
XMLが悪と言うつもりはありませんが、個人的にはアノテーションのほうが使いやすいと思っているので、この辺りについての考え方が気になります。
大規模なシステムが多そうなので、設定は一箇所に集約したいとか、既存のプロジェクトも含めるとアノテーションに移行するのが大変とか、いろいろあるのでしょうか…。
大規模基幹システムにSpring Cloudを使いたい!
学び、メモ
あまりきれいにメモできていないけど、資料が非公開なようなのでメモをそのまま。発表資料公開してほしい…。
- エンタープライズ(基幹業務システム)こそマイクロサービスである
- 新たな製品やサービス、ビジネスモデルを素早く投入する
- 画面の数ページ追加に半年かかる現実
- 顧客や市場の変化に迅速に対応
- 技術的負債を減らして戦略的投資にシフト
- 新たな製品やサービス、ビジネスモデルを素早く投入する
- 個人的な思い
- ミッションクリティカルに柔軟性を導入したいのもある
- 減点主義のエンタープライズを変革したい(できて当たり前)
- 抵抗勢力(オンプレのままでいいのでは?)について
- まずはオンプレでSpring Cloudでもよい。ただし監視機構とIaCは必須
- オートスケールは努力目標
- 思考を転換する。(サーバはペットではなく家畜)
- スキルのばらつき
- 大人数だとスキルがばらついて品質が低下する
- 関心事を分離し、サービスの仕様と品質を統制する
- スキルのばらつき対策
- 開発者にはSpring Cloudを意識させない。関わる人を限定する
- Spring Cloudに関わるボイラープレートはアーキチームが準備
- OpenAPI(Swagger), CDC Testing
- データ整合性
- 環境依存値とアプリ固有値をいかに切り離せるか
- モノリスDBの分割
- モノリスDBを残しながら、ドメイン駆動で段階的に移動する
- 投資対効果の説明が必要になる
- 投資対効果は出づらい。危機感を煽って説得する
- 技術的負債が…では駄目。「やらないと会社が沈む」ということを伝える
- 組織的にやるしかない。成功するにはトップダウンしかない
所感
Spring Cloudというよりは、マイクロサービス寄りの内容という印象でした。
期待していた内容とはちょっと違いましたが、非常に面白かったです。
特に最後の方のモノリス分割や投資対効果については多くの方が頷きながら聞いており、大きな社会的課題なのだと強く実感。
役に立つというよりは、勇気づけられる面が大きいセッションでした。
その他、気になった資料など
- 徹底解剖Spring MVCアーキテクチャー -DispatcherServletの中身を覗いてきました-
- RSocket徹底入門
- Springアプリケーションのテスト道具 使いどころ、使わないどころ
- あたりまえのことをあたりまえにやる、というスタンスが共感できて好き。あんまりできてないけど。
全体の所感
今回もいろいろと収穫はありましたが、昨年に比べると収穫が少なかったかな…という印象を持ちました。
もし自身がスキルアップしていることが理由であればそれは良いのですが、いろんなセッションを聞く度に未熟さを思い知り、まだまだだなーと実感します。
Spring関係者のセッションではReactiveに関する内容が非常に多く、現在注力しているのを強く感じました。
ReactiveはWeb MVCやThymeleafと共存することはできるようですが、一番のネックはDBになりそうです。
自分の中で、今後のTODOに落とし込むべきは以下と認識。
- Spring Integration:ドキュメント読み解いたり、実際に使ってみる
- IntelliJ IDEA:ちゃんと使いこなせるようになる
- Reactive:必要になる場面は限られそうなので、優先度低めで継続的にキャッチアップ
発表者の方、スタッフの方、おかげさまで充実した一日になりました。
今回もありがとうございました!