「JSUG勉強会 Spring I/O報告会」に行ってきたよ!レポート

f:id:yasay:20170710131153j:plain
Springは他のフレームワークの開発終了やJava EEの開発遅延などによって
より進化の早いフレームワークを求める人達が活用している印象があります。

開発者からしてみればデファクトスタンダードだろうがなんだろうが
今現場で使用しているフレームワークをないがしろにできないのが正直な所です。

個人的にはSpring Boot大好きです。
そんな中、今年もSpringの大規模なイベントがバルセロナで開催されました。
http://2017.springio.net/

その報告会が六本木で行われました。行ってきたのでレポートや所感など書いていきます!
jsug.doorkeeper.jp

レポート

キーノート

  • Spring IO 2017年が6回目
    • 今年からチケットの入手が大変になった。
    • 43セッション
    • ReactiveやMicroserviceなどキーワードを絡めて幅広く技術要素が扱われた
  • 基調講演の内容
    • The Only Constant Is Change 唯一変わらないことは、変わり続けるということ
    • leon megginson 唯一生き残るのは変化できる者
    • 変化する世界の中有益で有り続けることだ。 @jessitron
    • J2EEのアンチテーゼからSpring Initializrへ
    • Thymeleafのシェアが圧倒的に多い

Spring 5.0 Reactive関連

  • http://lanyrd.com/2017/spring-io/
  • @Java Day Tokyo 2017のキーノート資料が参考になる
  • Reactiveのおさらい(誤解を恐れない表現)
    • blockしない処理の塊を細切れにする
    • エンジンは細切れ処理をいつでも実行可能なよう管理
  • Reactive Stream
    • JDK9に取り込まれる予定
    • back pressureにより合理的に処理を実行
  • MonoとFlux
    • ReactorにおけるPublisherの実装
    • Reactive StreamsをStream API風に記述できる
    • Monoは0/1個、Fluxは0個以上の値を発行可能
  • Spring5でのReactive
    • spring-webflux
    • MonoやFluxが使えるController的な
    • 無限ストリームの返却
      • 一定間隔毎にデータを作っていくような
      • SSEのStreamとして解釈される機能←いいねこれ!
  • Functional Framework
    • 関数スタイル記述によるフレームワーク
    • framework << library(明示的かつカスタムが容易)
    • spring-webflux向け限定
  • RouterFunctionとHandlerFunctionの組み合わせ
  • Router Function
    • URLやリクエスト内容に応じて、呼び出す処理の振り分けルールを定義
  • Handler Function
    • ルーターで条件にマッチした場合に呼び出される処理を定義
  • HandlerFilterFunction
  • 様々な選択肢があることが重要的な。
  • Spring DataのReactive対応
    • 2.0になる。Reactive対応する。
    • APIの破壊的変更も含まれる
    • 対応しているデータソースが限られる。JPAはNG
    • JDBCドライバがblockするので意味がない的な

ThymeleafのWebflux対応

www.slideshare.net

  • Getting Thymeleaf Ready for Spring 5 and Reactive
  • TemplateとResponseがBlockingになっているから
  • ResponseをPublisherに
  • FULLモード
    • HTMLを一括生成して一括出力
  • CHUNKED
    • HTMLを一定のバイト数毎に区切って生成
  • FULL/CHUNKEDの共通の課題
    • resolveAsyncAttributeのリスト変換をMonoにするので、待ちが発生する的な
  • DATA-DRIVENモード
    • wrapすることでresolutionを回避
    • ThymeleafがProcessorのように振る舞う
  • DATA-DRIVEN & SSE
    • DATA-DRIVENモードの場合はデータ1件ごとに部分的なHTMLをSSEで送信可能
  • まとめ
    • ReactiveなView出力
    • 見どころ満載のデモ

Spring I/O 2017 行ってみてわかったSpringBoot

www.slideshare.net

  • SpringBootApplication
    • 別のパッケージにあるクラスファイルを使いたい場合は@ComponentScan
    • @ConditionalOn
  • WebMvcTest, DataJpaTest, RestClientTest

Spring I/O 2017での拡張のお話

www.slideshare.net

  • Spring Cloud Function
    • lamdaみたいなもの。
    • SpringでFunctionを書いてサーバレスな環境を実行できる?
    • →話を聞いている限りだとLambdaで動かすSpringみたいな印象を受けましたが・・どうなの
  • Spring Auto REST Docsの拡張
    • Spring REST Docs テストを通った内容がドキュメント化される
    • つまり、正確なドキュメントが作れる

Re:ゼロから始めるオープンソース生活

www.slideshare.net

  • コントリビュートはソースコードの追加・修正だけではない
    • コミュニティ活動、不具合の報告、ドキュメント周り(整備、翻訳とか)
  • コントリビュータになるために
    • Gitの知識と、GitHubのお作法
    • 修正内容の議論、推敲、反映
    • CLA(ライセンス条項)への同意
    • 忍耐
  • spring.ioで情報収集
    • READMEとか読む、プロジェクトの好みを知る(Merge vs Rebase, Code Style)
    • 自分だけのForkの中で自由にコードをいじってみることが大事
  • よいPull Requestのために
    • Issueに自分が作業していることを明記
    • 簡潔明瞭のコミットメッセージ
    • 機能追加の場合は、単体テストも追加
    • ビルドが正しく完了することを確認
    • PR先のbranchを間違えないように確認
  • PRのライフサイクル
    • CLA -> CI -> PR議論 -> PR内容修正 ->反応なしの場合忍耐
    • リジェクトの場合もめげずに次がある!受理はおめでとう!
    • PRを上手に引き継ぐことが大事?
  • まとめ
    • 始めるなら今がチャンス
    • Spring5に向けて改善点がたくさんあるから

所感

ピザおいしかったです。ありがとうございました。

f:id:yasay:20170710131246j:plain
OSSに貢献するチャンスではあるようなんですが、
自分のやりたいことがまだ消化できていない状況なので、
片付いたら貢献したい気持ち。サーバレスアーキテクチャとかやってます。

あと、リアクティブに関する説明はとても分かりやすかったと思っています。
登壇者の方は"誤解を恐れないで"という言葉を使っていましたが、
私も"誤解を恐れないで"言うと昨年のSpring Day 2016当時の私よりは
今回の話を聞くことでそこそこ理解できレベルアップしたと思います(笑)。

リアクティブなフレームワークも一つの選択肢ということなんだと思っています。
個人的にはリアクティブなフレームワークが主流になるのかが気になっていますが、
主流になった時に学習できていないと追いついていないということになるので、
やはり継続的な学習とアウトプットが大事かと。

久しぶりの六本木は新鮮な気分になれました。また行くぞ!
以上です。