Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

1.483 Aufrufe

Veröffentlicht am

JSUG Spring I/O 2017 報告会でのスライドです。

Veröffentlicht in: Internet
  • Als Erste(r) kommentieren

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

  1. 1. Spring I/O 2017での 拡張のお話 株式会社タグバンガーズ 佐々木
  2. 2. 佐々木亜里沙 株式会社タグバンガーズ JSUGお手伝い Spring I/Oは2回目の参加 自己紹介 2
  3. 3. • Spring Cloud Functionのお話 • Spring Auto REST Docsの拡張のお話 おしながき 3
  4. 4. Spring Cloud Function について 4 聴講セッション Road to Serverless by Dave Sayer @Pivotal http://presos.dsyer.com/decks/road-to-serverless.html
  5. 5. • ServerlessとFunction • Spring Cloud Functionのメリット • Spring Cloud Functionのもつ機能 • 実行の流れ • サンプル おしながき 5
  6. 6. サーバーレスな環境を提供してくれるサービスたち ServerlessとFunction 6 • AWS lambda • Google Cloud Functions • Azure Function • IBM OpenWhisk • Fission • Kubeless • … イベントやストリームデータを トリガーにしてコードを実行できる インフラのメンテナンスを気にしなくて良い
  7. 7. 7 イベント (ファイルアップロードなど) ストリームデータ (クリックイベント 行動分析など) Function実行 S3 Kinesis Lambda 利用シーン例 こいつを Spring管理下の Beanにしよう
  8. 8. Spring Cloud Function 8 サーバレスアーキテクチャに対する Spring Bootのアプローチ SpringでFunctionを書いて サーバレスな環境で実行できる https://github.com/markfisher/spring-cloud-function ※Experimental project Springプロジェクトに入ることが決定しました! (by @making)
  9. 9. • Spring(DI,連携、autoconfiguration)と ビルドツール(テスト・CI、ローカル実行)を使って サーバレスの恩恵を受けられる Spring Cloud Functionのメリット 9 Spring使ってる開発者 FaaS API/UIをネイティブで利用するより 少なくわかりやすいステップで書ける Function信者 Springについて知る必要がない
  10. 10. Spring Cloud Functionのメリット 10 • 実行プラットフォームからビジネスロジックのライフスタイル を疎結合にする 同じコードをwebエンドポイント/ストリームプロセッサ/タスク として実行できる サーバレスプロバイダ、スタンドアロンな環境(ローカルやPaaS)でも 同じプログラミングモデルで実行することができる
  11. 11. • @Bean としてjava.util.Function(Supplier, Consumerも)を登録でき る • @FunctionScan(Function向けのComponentScan) • function のコードをコンパイルして実行できる • 孤立したクラスローダでデプロイできる(JVM Packing) • AWS Lambdaなどサーバレスなサービスプロバイダに対するアダ プタを提供 Spring Cloud Functionの機能 11
  12. 12. 12 関数を用意してwebのエンドポイントとして提供
  13. 13. 13 関数を用意してストリームのイベントプロセッサを提供
  14. 14. 14 サーバレスなサービス、PaaSにデプロイするためのアダプタも提供
  15. 15. 実行の流れ 15 AWS Lambdaの#handleRequestが呼ばれる Springコンテナの初期化(1回だけ) SpringコンテナからfunctionのBeanを取得 ※AWS Lambda Functionの場合 ❶ ❷ ❸ Configurationクラスを探してコンテナ作る functionを探す FluxFunction で wrap される❹ 実行される❺
  16. 16. S3のバケットに画像をアップロードしたらAWS Lambda Functionが 実行されてリサイズしたものを別のバケットに入れてくれるサンプ ル https://github.com/bourbonizable/spring-cloud-function-adapter-aws-sample サンプルアプリ 16 ファイルアップロード Function実行 S3 Lambda SpringのBean イベント検知 関数実行
  17. 17. 17 AWS Lambdaの#handleRequestが呼ばれる public class SpringBootRequestHandler<E, O> extends SpringFunctionInitializer implements RequestHandler
  18. 18. 18
  19. 19. 19
  20. 20. AWS Lambdaにjarをアップロード 20
  21. 21. Spring Auto REST Docs について 21 聴講セッション Introducing Spring Auto REST Docs by Florian Benz @ScalableCapital https://www.slideshare.net/fbenz/introducing-spring-auto-rest-docs
  22. 22. • ドキュメント作成の方法 • Spring REST Docs? • 書き方 • Spring Auto REST Docs おしながき 22
  23. 23. 23 Spring REST Docsに関するもっと詳しい解説や書き方、運用方法は楽天 さんのスライドを参照ください! https://www.slideshare.net/241takahiro/spring- onewebdocument https://www.slideshare.net/rakutentech/springsprin g-day-2016
  24. 24. 24 仕様ドリブンなドキュメンテーション ドキュメント作成の方法 コードとドキュメントは同期しない コード ドキュメント 仕様
  25. 25. 25 テストドリブンなドキュメンテーション ドキュメント作成の方法 テストを通った内容がドキュメント化される コードとドキュメントが同期される = 正確なドキュメント コード ドキュメント テスト Spring REST Docs
  26. 26. • テストを通ると HTTPリクエストやレスポンスが記載された ドキュメントのもと(スニペット, 部品)を 生成してくれるツール • asciidoc形式で生成される(Markdownもサポート) • 対応しているテストコード: • Junit + Spring MVC Test, TestNG, REST Assured Spring REST Docs? 26 https://www.slideshare.net/jylee1229/spring-rest-doc-58313717
  27. 27. • http://asciidoctor.org/ • https://github.com/asciidoctor/asciidoctor 補足:Asciidoctor 27 AsciiDocという軽量なマークアップ言語の拡張版
  28. 28. 28 作り方 pom.xml or build.gradleにビルドの設定を記述 **Documentation.java クラスを作る テストコードを書き、 ドキュメント用の記述を追記 テスト実行 テストが通ったAPIごとに スニペットが生成される ちょっとまとめる できあがり!!! ❶ ❷ ❸ ❹ ❺
  29. 29. 29 ドキュメント用のコードの書き方
  30. 30. デフォルトで生成されるスニペット • curl-request.adoc • http-request.adoc • http-response.adoc • httpie-request.adoc • request-body.adoc • response-body.adoc 生成されるスニペット 30 [source,bash] ---- $ curl 'http://localhost:8080/tags' -i -X POST -H 'Content-Type: application/hal+json' -d '{ "name" : "REST" }' ---- |=== |Path|Type|Description |`name` |`String` |The name of the tag |=== [source,http,options="nowrap"] ---- HTTP/1.1 201 Created Location: http://localhost:8080/tags/7 ---- curl-request.adoc request-fields.adoc http-response.adoc
  31. 31. 31 [[resources-tags-create]] === Creating a tag A `POST` request is used to create a note operation::tags-create-example[snippets='request- fields,curl-request,http-response'] [[resources-note]] == Note The Note resource is used to retrieve, update, and delete individual notes [[resources-note-links]] === Links include::{snippets}/note-get-example/links.adoc[] スニペットをまとめる snippet.adoc まとめ.adoc snippet.adoc snippet.adoc snippet.adoc
  32. 32. 32
  33. 33. もっともっとメンテナンス性を高くしたい! コードとドキュメントを もっと短く書きたい。 33
  34. 34. 34 テストコードにDSLを書く JSONを表すPOJOとJavadocを使って ドキュメンテーションを生成する サードパーティーなライブラリ Spring Auto REST Docs Benzさん
  35. 35. • JSON構造全体を認識し、フィールドのJavadocと一般的 なvalidationアノテーションをドキュメント化してくれる (@NotNull, @NotEmpty,@NotBlank,独自制約(個別・グループ) • パスパラメータ、クエリパラメータが自動でドキュメント化 される • 他のスニペットをインクルードしたスニペットを作ってくれ るので少ないコードで書ける • ドキュメント認証 Auto REST Docsが持つ機能 35
  36. 36. 36
  37. 37. 37
  38. 38. 38 例:手書きでまとめている部分
  39. 39. 39
  40. 40. 40
  41. 41. 41 例:Path Parameters
  42. 42. 42
  43. 43. 43
  44. 44. https://github.com/ScaCap/spring-auto-restdocs https://scacap.github.io/spring-auto-restdocs/#gettingstarted 使ってみたい! 44 Spring REST Docsのプロジェクトを用意 pom.xml or build.gradleに拡張の記述を追記 MockMvcの設定 ❶ ❷ ❸
  45. 45. Thank you!

×