SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Downloaden Sie, um offline zu lesen
Copyright©2018 NTT corp. All Rights Reserved.
Spring I/O 2018 報告会
2018年7月30日
NTTソフトウェアイノベーションセンタ
岩塚 卓弥
2Copyright©2018 NTT corp. All Rights Reserved.
• 名前:岩塚 卓弥
• 所属:NTT ソフトウェアイノベーションセンタ
• NTTの研究所のうちソフトウェアを専門に扱う
• 自部署ではソフトウェア工学を研究
• Springベースのグループ共通フレームワークの整備を担当
• Spring I/O は今年で4回目
• レポートも書きました(共著)
• https://codezine.jp/article/detail/10930
自己紹介
3Copyright©2018 NTT corp. All Rights Reserved.
• Documenting RESTful APIs with Spring REST
Docs and RAML
• スライド:
https://speakerdeck.com/mduesterhoeft/documenting-
restful-apis-with-spring-rest-docs-and-raml
• 動画:
https://www.youtube.com/watch?v=VwKc34W96Cw&li
st=PLe6FX2SlkJdRCNFdhWgpRmJybXafo-Uqk&index=20
• Consumer driven contracts in a polyglot world
• スライド:
https://docs.google.com/presentation/d/19BFGJiTElU3
VVIbpF3Gqac26m4uaNpPEQpVB1eIPa90/edit#slide=id.
p
• 動画:
https://www.youtube.com/watch?v=sKlwNJeQMV4&list
=PLe6FX2SlkJdRCNFdhWgpRmJybXafo-Uqk&index=25
今日のトピック
4Copyright©2018 NTT corp. All Rights Reserved.
REST Docs (and RAML)のセッションのQ&Aで
Spring Cloud Contract との関連を問う質問があった
→ セッションの内容とはコンテキストが違い,要領を得ず
キーワードレベル(API, テスト)で共通しているため,
うまく整理できていない人が多いのかも…
きっかけ
5Copyright©2018 NTT corp. All Rights Reserved.
RESTful API 開発
6Copyright©2018 NTT corp. All Rights Reserved.
用途による分類
Public API Internal API
App
API
3rd party App 3rd party App
3rd party App
• 誰がどう使うかわからない
• API変更時に利用側の合意は不要
• そもそも全員の合意は取れない
• 外部の開発者に使ってもらうための
諸々を用意する必要がある
• 使う人・使用方法がわかっている
• API変更時に利用側の合意が必要
• 勝手に変えると他のサービスが
壊れる場合がある
• 内部の開発者が使えればよい
App
API
App
App
AppAPI API
API
7Copyright©2018 NTT corp. All Rights Reserved.
使えない / 使いたくない API
• そもそも欲しい機能がAPI化されていない
• ドキュメントがない
• ドキュメントが古い
• ドキュメントがわかりにくい
合体技
わかりにくいドキュメントをくまなく調べた結果
欲しい機能がAPIとして提供されていないことがわかる
使ってもらうためにドキュメントは必須
特に Public API の場合は充実したドキュメントがあるとよい
APIドキュメントの必要性
8Copyright©2018 NTT corp. All Rights Reserved.
多くの開発者の共通認識
• メンテナンスされたドキュメントは重要である
• ドキュメントのメンテナンスは面倒である
ドキュメントのメンテナンス
なんらかの方法でドキュメントが勝手に実装に追従してくれると嬉しい
→ いくつかのアプローチがあるが,いずれにせよ何らかの妥協が必要
9Copyright©2018 NTT corp. All Rights Reserved.
機械可読の仕様から実装もドキュメントも生成
API仕様からの生成
Spec
本当に仕様から吐き出されるソースコードと付き合っていけるか?
→ できないと結局ドキュメントのメンテナンス面倒問題と同じ構図に
記法は様々
・OpenAPI
・RAML
・API Blueprint
・...
ツールによって用途も様々
ドキュメント
ソースコード
スタブ(モック)サーバ
...
10Copyright©2018 NTT corp. All Rights Reserved.
実装そのものからドキュメントを生成
一般に,ソースコードだけでは情報が足りないので補完が必要
ソースコードからの生成
e.g. Springfox
• 実装方法に依存する
• ソースコードが読みづらくなる
• 実装内容と補完情報が乖離していないことは保証されない
11Copyright©2018 NTT corp. All Rights Reserved.
APIのテストコードからドキュメントの一部を生成
• API実装側の実装方法に依存しない
• テストされた確実な内容を出力
• デフォルトでは Asciidoctor のスニペットとして出力
• テストが失敗した場合は出力しない
Spring REST Docs
...
12Copyright©2018 NTT corp. All Rights Reserved.
Spring REST Docs ドキュメント例
生成したスニペットをincludeしてドキュメントを作成
13Copyright©2018 NTT corp. All Rights Reserved.
Spring REST Docs
• テストを利用した正確な出力 😊
• Asciidoctor (or Markdown) のスニペットを出力 😐
• ドキュメントが静的かつ簡素
• 用途が限定的
Spring REST Docs RAML Integration
• RAML形式の出力をサポートしたサードパーティ拡張
• https://github.com/ePages-de/restdocs-raml
• 実装との乖離を防ぎつつ RAML のエコシステムを活用
Spring REST Docs の拡張
14Copyright©2018 NTT corp. All Rights Reserved.
restdoc-raml の入力例
Spring REST Docs を拡張
15Copyright©2018 NTT corp. All Rights Reserved.
restdoc-raml の出力例
RAML
JsonSchema
リクエスト例
16Copyright©2018 NTT corp. All Rights Reserved.
RAMLの活用(raml2html)
17Copyright©2018 NTT corp. All Rights Reserved.
RAMLの活用(raml2html)
18Copyright©2018 NTT corp. All Rights Reserved.
RAMLの活用 (API console)
19Copyright©2018 NTT corp. All Rights Reserved.
RAMLの活用 (API console)
20Copyright©2018 NTT corp. All Rights Reserved.
Documenting RESTful APIs with Spring REST Docs
and RAML
• Public API を使ってもらうためにドキュメントが必要
• テストから生成する Spring REST Docs のアプローチを採用
• Asciidoctor の静的なドキュメントでは物足りない
→ テストから RAML を生成する拡張を作った
RAMLのエコシステムを活用できるようになった
- 動的なドキュメント
- ブラウザで動作するクライアント
- スタブ(モック)サーバの作成
- …
ここまでのまとめ
21Copyright©2018 NTT corp. All Rights Reserved.
【再掲】用途による分類
Public API Internal API
App
API
3rd party App 3rd party App
3rd party App
• 誰がどう使うかわからない
• API変更時に利用側の合意は不要
• そもそも全員の合意は取れない
• 外部の開発者に使ってもらうための
諸々を用意する必要がある
• 使う人も使われ方もわかっている
• API変更時に利用側の合意が必要
• 勝手に変えると他のサービスが
壊れる場合がある
• 内部の開発者が使えればよい
App
API
App
App
AppAPI API
API
22Copyright©2018 NTT corp. All Rights Reserved.
Consumer-driven Contracts (CdC)
App API
App
App
App
提供者 (Provider)
利用者 (Consumer)Contract
Contract
• API提供者と利用者のリクエスト/レスポンスに関する取り決め
• 各利用者はAPIのレスポンスのすべてを使いたいとは限らない
• 利用者の必要な部分だけの取り決め = Consumer Contract
• 提供者は各利用者との Contract に合意し,これを守る
Contract を前提とすることで対向をスタブ化したテストが可能になる
23Copyright©2018 NTT corp. All Rights Reserved.
Spring Cloud Contract – Contractの記述
App API App
提供者 (Provider) 利用者 (Consumer)
Contract
Groovy DSL または YAML で記述
24Copyright©2018 NTT corp. All Rights Reserved.
Spring Cloud Contract – Providerのテスト
App API App
提供者 (Provider) 利用者 (Consumer)
Contract
テストテストテスト テストコードの生成
リクエストに対して
Contractの通りレスポンスするか
25Copyright©2018 NTT corp. All Rights Reserved.
Spring Cloud Contract – テスト用スタブ
App API App
提供者 (Provider) 利用者 (Consumer)
Contract
スタブ
スタブを生成
実体は jar ファイル
Contract に対応した
WireMock用のjsonが
入っている
26Copyright©2018 NTT corp. All Rights Reserved.
Spring Cloud Contract – Consumerのテスト
App API App
提供者 (Provider) 利用者 (Consumer)
Contract
スタブ
スタブを利用してテスト
使用するスタブを指定
27Copyright©2018 NTT corp. All Rights Reserved.
Microservices ではJVM言語以外も自然に混在しえる
→ Java, maven に依存しないやり方が必要
Spring Cloud Contract の Polyglot 対応
• Contract の記述
→ Groovy DSL 以外に YAML でも記述可能
• Provider のテストコードの生成
→ Docker でテスト生成&実行
• Consumer テスト用のスタブ生成
→ Docker でスタブ生成&実行
Polyglot 対応
28Copyright©2018 NTT corp. All Rights Reserved.
Polyglot 対応 – Contractの記述
App API App
提供者 (Provider) 利用者 (Consumer)
Contract
YAML で記述
29Copyright©2018 NTT corp. All Rights Reserved.
Polyglot 対応 – Providerのテスト
App API App
提供者 (Provider) 利用者 (Consumer)
Contract
テストテストテスト
生成
起動しておく マウント
spring-cloud-contract
Providerにリクエストして
レスポンスを検証
30Copyright©2018 NTT corp. All Rights Reserved.
Polyglot 対応 – テスト用スタブ
App API App
提供者 (Provider) 利用者 (Consumer)
Contract
スタブ
生成
Artifactoryへpublishされる
31Copyright©2018 NTT corp. All Rights Reserved.
Polyglot 対応 – Consumerのテスト
App API App
提供者 (Provider) 利用者 (Consumer)
Contract
スタブ
spring-cloud-contract-stub-runner
Artifactoryから
取得して起動
テストのリクエストに
レスポンスを返す
32Copyright©2018 NTT corp. All Rights Reserved.
REST Docs を利用すると以下が可能
• テストコードからのスタブ生成
• テストコードからのContract生成
→ 既にSpring MVCのテストがあるプロジェクトで,
Spring Cloud Contract を新しく導入するときに便利
Spring Cloud Contract + REST Docs
33Copyright©2018 NTT corp. All Rights Reserved.
• Documenting RESTful APIs with Spring REST
Docs and RAML
• 実装と対応したドキュメントを作成するにはテストをソースに
するとよい
• Spring RESTDocs のコンセプトはそのままにRAMLのエコシ
ステムを利用できる拡張を作った
• Consumer driven contracts in a polyglot world
• 内部APIの連携の試験にはCdCが便利
• Spring Cloud Contract は非JVM環境にも対応
• 目的に沿った技術を使う
• キーワードだけで捉えると見誤る
• ツールに振り回されないようにコンテキストを整理すること
まとめ

Weitere ähnliche Inhalte

Was ist angesagt?

[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...Tomoya Hibi
 
ACRi_webinar_20220118_miyo
ACRi_webinar_20220118_miyoACRi_webinar_20220118_miyo
ACRi_webinar_20220118_miyoTakefumi MIYOSHI
 
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介NTT Communications Technology Development
 
オープンソースデータベース GridDBとそのオープンコミュニティ活動
オープンソースデータベース GridDBとそのオープンコミュニティ活動オープンソースデータベース GridDBとそのオープンコミュニティ活動
オープンソースデータベース GridDBとそのオープンコミュニティ活動griddb
 
MEC (Mobile Edge Computing) + GPUコンピューティングについて
MEC (Mobile Edge Computing) + GPUコンピューティングについてMEC (Mobile Edge Computing) + GPUコンピューティングについて
MEC (Mobile Edge Computing) + GPUコンピューティングについてVirtualTech Japan Inc.
 
Osc2018tokyo spring-20180224
Osc2018tokyo spring-20180224Osc2018tokyo spring-20180224
Osc2018tokyo spring-20180224Tomoya Hibi
 
WebRTC NextVersion時代のJavaScript開発
WebRTC NextVersion時代のJavaScript開発WebRTC NextVersion時代のJavaScript開発
WebRTC NextVersion時代のJavaScript開発Yusuke Naka
 
WebRTCハンズオン
WebRTCハンズオンWebRTCハンズオン
WebRTCハンズオンYusuke Naka
 
Mk vpp for-containers-vppug
Mk vpp for-containers-vppugMk vpp for-containers-vppug
Mk vpp for-containers-vppugMiya Kohno
 
IPv6移行の現状 〜 宅内端末から見た IPv6 と IPv4〜
IPv6移行の現状 〜 宅内端末から見た IPv6 と IPv4〜IPv6移行の現状 〜 宅内端末から見た IPv6 と IPv4〜
IPv6移行の現状 〜 宅内端末から見た IPv6 と IPv4〜Akira Nakagawa
 
Lagopus workshop@Internet weekのそば
Lagopus workshop@Internet weekのそばLagopus workshop@Internet weekのそば
Lagopus workshop@Internet weekのそばYoshihiro Nakajima
 
Webrtc最新動向
Webrtc最新動向Webrtc最新動向
Webrtc最新動向Yusuke Naka
 
Telecom Infra Projectの取り組み -光伝送におけるハードとソフトの分離-
Telecom Infra Projectの取り組み -光伝送におけるハードとソフトの分離-Telecom Infra Projectの取り組み -光伝送におけるハードとソフトの分離-
Telecom Infra Projectの取り組み -光伝送におけるハードとソフトの分離-HidekiNishizawa
 

Was ist angesagt? (20)

[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
[D20] 高速Software Switch/Router 開発から得られた高性能ソフトウェアルータ・スイッチ活用の知見 (July Tech Fest...
 
Lagopus Router
Lagopus RouterLagopus Router
Lagopus Router
 
ACRi_webinar_20220118_miyo
ACRi_webinar_20220118_miyoACRi_webinar_20220118_miyo
ACRi_webinar_20220118_miyo
 
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
 
AWS re:Invent2017で見た AWSの強さとは
AWS re:Invent2017で見た AWSの強さとは AWS re:Invent2017で見た AWSの強さとは
AWS re:Invent2017で見た AWSの強さとは
 
オープンソースデータベース GridDBとそのオープンコミュニティ活動
オープンソースデータベース GridDBとそのオープンコミュニティ活動オープンソースデータベース GridDBとそのオープンコミュニティ活動
オープンソースデータベース GridDBとそのオープンコミュニティ活動
 
MEC (Mobile Edge Computing) + GPUコンピューティングについて
MEC (Mobile Edge Computing) + GPUコンピューティングについてMEC (Mobile Edge Computing) + GPUコンピューティングについて
MEC (Mobile Edge Computing) + GPUコンピューティングについて
 
Osc2018tokyo spring-20180224
Osc2018tokyo spring-20180224Osc2018tokyo spring-20180224
Osc2018tokyo spring-20180224
 
YJTC18 A-1 データセンタネットワークの取り組み
YJTC18 A-1 データセンタネットワークの取り組みYJTC18 A-1 データセンタネットワークの取り組み
YJTC18 A-1 データセンタネットワークの取り組み
 
WebRTC NextVersion時代のJavaScript開発
WebRTC NextVersion時代のJavaScript開発WebRTC NextVersion時代のJavaScript開発
WebRTC NextVersion時代のJavaScript開発
 
WebRTCハンズオン
WebRTCハンズオンWebRTCハンズオン
WebRTCハンズオン
 
2015-ShowNet-報告資料
2015-ShowNet-報告資料2015-ShowNet-報告資料
2015-ShowNet-報告資料
 
Mk vpp for-containers-vppug
Mk vpp for-containers-vppugMk vpp for-containers-vppug
Mk vpp for-containers-vppug
 
Argo CDについて
Argo CDについてArgo CDについて
Argo CDについて
 
WebRTCで動かす“テレイグジスタンス”ロボット
WebRTCで動かす“テレイグジスタンス”ロボットWebRTCで動かす“テレイグジスタンス”ロボット
WebRTCで動かす“テレイグジスタンス”ロボット
 
IPv6移行の現状 〜 宅内端末から見た IPv6 と IPv4〜
IPv6移行の現状 〜 宅内端末から見た IPv6 と IPv4〜IPv6移行の現状 〜 宅内端末から見た IPv6 と IPv4〜
IPv6移行の現状 〜 宅内端末から見た IPv6 と IPv4〜
 
Lagopus workshop@Internet weekのそば
Lagopus workshop@Internet weekのそばLagopus workshop@Internet weekのそば
Lagopus workshop@Internet weekのそば
 
Webrtc最新動向
Webrtc最新動向Webrtc最新動向
Webrtc最新動向
 
Telecom Infra Projectの取り組み -光伝送におけるハードとソフトの分離-
Telecom Infra Projectの取り組み -光伝送におけるハードとソフトの分離-Telecom Infra Projectの取り組み -光伝送におけるハードとソフトの分離-
Telecom Infra Projectの取り組み -光伝送におけるハードとソフトの分離-
 
2015-ShowNetステージ-ファシリティ
2015-ShowNetステージ-ファシリティ2015-ShowNetステージ-ファシリティ
2015-ShowNetステージ-ファシリティ
 

Ähnlich wie Spring I/O 2018 報告会

Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!CData Software Japan
 
デバイスWebAPI/Symphonyを軸としたIoTの展開について
デバイスWebAPI/Symphonyを軸としたIoTの展開についてデバイスWebAPI/Symphonyを軸としたIoTの展開について
デバイスWebAPI/Symphonyを軸としたIoTの展開についてDevice WebAPI Consortium
 
Jazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & RobotJazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & RobotNobuyuki Matsui
 
Introduction to NetOpsCoding
Introduction to NetOpsCodingIntroduction to NetOpsCoding
Introduction to NetOpsCodingTaiji Tsuchiya
 
WebRTCを始めよう! HTML5fun 第一回勉強会
WebRTCを始めよう! HTML5fun 第一回勉強会WebRTCを始めよう! HTML5fun 第一回勉強会
WebRTCを始めよう! HTML5fun 第一回勉強会Yusuke Naka
 
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張典子 松本
 
チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発Satoshi Takano
 
SkyWay国内唯一のCPaaS
SkyWay国内唯一のCPaaSSkyWay国内唯一のCPaaS
SkyWay国内唯一のCPaaSKensaku Komatsu
 
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能Takuya Iwatsuka
 
第六回コンテナ型仮想化情報交換会_LinuxContainerLivemigrationCRIU
第六回コンテナ型仮想化情報交換会_LinuxContainerLivemigrationCRIU第六回コンテナ型仮想化情報交換会_LinuxContainerLivemigrationCRIU
第六回コンテナ型仮想化情報交換会_LinuxContainerLivemigrationCRIUKengo Okitsu
 
情報処理学会第77回全国大会 3月17日 於 京都大学 1G-07 国際標準における 参照ソフトウエアと特許の扱い
情報処理学会第77回全国大会 3月17日 於 京都大学 1G-07 国際標準における参照ソフトウエアと特許の扱い情報処理学会第77回全国大会 3月17日 於 京都大学 1G-07 国際標準における参照ソフトウエアと特許の扱い
情報処理学会第77回全国大会 3月17日 於 京都大学 1G-07 国際標準における 参照ソフトウエアと特許の扱いItaru Kaneko
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話
自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話
自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話和也 大木
 

Ähnlich wie Spring I/O 2018 報告会 (20)

Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
Angular でもっとAPIファースト・もっとモダンデザインなWebアプリケーションを作ろう!
 
OSS光と闇
OSS光と闇OSS光と闇
OSS光と闇
 
Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
 
[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック
[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック
[GrapeCity Web TECH FORUM 2018]レガシーからの移行 - 株式会社日本プロテック
 
Spring social の基礎
Spring social の基礎Spring social の基礎
Spring social の基礎
 
デバイスWebAPI/Symphonyを軸としたIoTの展開について
デバイスWebAPI/Symphonyを軸としたIoTの展開についてデバイスWebAPI/Symphonyを軸としたIoTの展開について
デバイスWebAPI/Symphonyを軸としたIoTの展開について
 
Jazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & RobotJazug-8th: Azure AKS & FIWARE & Robot
Jazug-8th: Azure AKS & FIWARE & Robot
 
Introduction to NetOpsCoding
Introduction to NetOpsCodingIntroduction to NetOpsCoding
Introduction to NetOpsCoding
 
WebRTCを始めよう! HTML5fun 第一回勉強会
WebRTCを始めよう! HTML5fun 第一回勉強会WebRTCを始めよう! HTML5fun 第一回勉強会
WebRTCを始めよう! HTML5fun 第一回勉強会
 
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張
【Logic Apps編】ノンコーディングでデキる!お問い合わせフォーム機能拡張
 
Spring tools4
Spring tools4Spring tools4
Spring tools4
 
【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう
 
チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発
 
SkyWay国内唯一のCPaaS
SkyWay国内唯一のCPaaSSkyWay国内唯一のCPaaS
SkyWay国内唯一のCPaaS
 
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
Spring I/O 2019 報告 Spring Frameworkのロードマップと5.2の新機能
 
第六回コンテナ型仮想化情報交換会_LinuxContainerLivemigrationCRIU
第六回コンテナ型仮想化情報交換会_LinuxContainerLivemigrationCRIU第六回コンテナ型仮想化情報交換会_LinuxContainerLivemigrationCRIU
第六回コンテナ型仮想化情報交換会_LinuxContainerLivemigrationCRIU
 
YJTC18 A-1 大規模サーバの戦略
YJTC18 A-1 大規模サーバの戦略YJTC18 A-1 大規模サーバの戦略
YJTC18 A-1 大規模サーバの戦略
 
情報処理学会第77回全国大会 3月17日 於 京都大学 1G-07 国際標準における 参照ソフトウエアと特許の扱い
情報処理学会第77回全国大会 3月17日 於 京都大学 1G-07 国際標準における参照ソフトウエアと特許の扱い情報処理学会第77回全国大会 3月17日 於 京都大学 1G-07 国際標準における参照ソフトウエアと特許の扱い
情報処理学会第77回全国大会 3月17日 於 京都大学 1G-07 国際標準における 参照ソフトウエアと特許の扱い
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話
自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話
自前でcloud foundryを構築してgooのビッグサービスをカットオーバーした話
 

Mehr von NTT Software Innovation Center

A Global Data Infrastructure for Data Sharing Between Businesses
A Global Data Infrastructure for Data Sharing Between BusinessesA Global Data Infrastructure for Data Sharing Between Businesses
A Global Data Infrastructure for Data Sharing Between BusinessesNTT Software Innovation Center
 
企業間データ流通のための国際データ基盤
企業間データ流通のための国際データ基盤企業間データ流通のための国際データ基盤
企業間データ流通のための国際データ基盤NTT Software Innovation Center
 
企業間データ流通のための国際データ基盤
企業間データ流通のための国際データ基盤企業間データ流通のための国際データ基盤
企業間データ流通のための国際データ基盤NTT Software Innovation Center
 
Hybrid Computing Platform for Combinatorial Optimization with the Coherent Is...
Hybrid Computing Platform for Combinatorial Optimization with the Coherent Is...Hybrid Computing Platform for Combinatorial Optimization with the Coherent Is...
Hybrid Computing Platform for Combinatorial Optimization with the Coherent Is...NTT Software Innovation Center
 
2-in-1 Cluster Integration: Batch and Interactive GPU Computing
2-in-1 Cluster Integration: Batch and Interactive GPU Computing2-in-1 Cluster Integration: Batch and Interactive GPU Computing
2-in-1 Cluster Integration: Batch and Interactive GPU ComputingNTT Software Innovation Center
 
Hybrid Sourcing for Overcoming “Digital Cliff 2025”
Hybrid Sourcing for Overcoming “Digital Cliff 2025”Hybrid Sourcing for Overcoming “Digital Cliff 2025”
Hybrid Sourcing for Overcoming “Digital Cliff 2025”NTT Software Innovation Center
 
データ分析をビジネスに活かす!データ創出・活用から、分析、課題解決までのDX時代のデータ活用事例のご紹介 ~不揃いのデータとの格闘~
データ分析をビジネスに活かす!データ創出・活用から、分析、課題解決までのDX時代のデータ活用事例のご紹介 ~不揃いのデータとの格闘~データ分析をビジネスに活かす!データ創出・活用から、分析、課題解決までのDX時代のデータ活用事例のご紹介 ~不揃いのデータとの格闘~
データ分析をビジネスに活かす!データ創出・活用から、分析、課題解決までのDX時代のデータ活用事例のご紹介 ~不揃いのデータとの格闘~NTT Software Innovation Center
 
Network Implosion: Effective Model Compression for ResNets via Static Layer P...
Network Implosion: Effective Model Compression for ResNets via Static Layer P...Network Implosion: Effective Model Compression for ResNets via Static Layer P...
Network Implosion: Effective Model Compression for ResNets via Static Layer P...NTT Software Innovation Center
 
Why and how Edge Computing matters enterprise IT strategy
Why and how Edge Computing matters enterprise IT strategyWhy and how Edge Computing matters enterprise IT strategy
Why and how Edge Computing matters enterprise IT strategyNTT Software Innovation Center
 
外部キー制約を考慮した特徴量削減手法
外部キー制約を考慮した特徴量削減手法外部キー制約を考慮した特徴量削減手法
外部キー制約を考慮した特徴量削減手法NTT Software Innovation Center
 
デジタルサービスプラットフォーム実現に向けた技術課題
デジタルサービスプラットフォーム実現に向けた技術課題デジタルサービスプラットフォーム実現に向けた技術課題
デジタルサービスプラットフォーム実現に向けた技術課題NTT Software Innovation Center
 
Building images efficiently and securely on Kubernetes with BuildKit
Building images efficiently and securely on Kubernetes with BuildKitBuilding images efficiently and securely on Kubernetes with BuildKit
Building images efficiently and securely on Kubernetes with BuildKitNTT Software Innovation Center
 
Real-time spatiotemporal data utilization for future mobility services
Real-time spatiotemporal data utilization for future mobility servicesReal-time spatiotemporal data utilization for future mobility services
Real-time spatiotemporal data utilization for future mobility servicesNTT Software Innovation Center
 
NTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービス
NTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービスNTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービス
NTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービスNTT Software Innovation Center
 
Challenges for Implementing PMEM Aware Application with PMDK
Challenges for Implementing PMEM Aware Application with PMDKChallenges for Implementing PMEM Aware Application with PMDK
Challenges for Implementing PMEM Aware Application with PMDKNTT Software Innovation Center
 
RDMA programming design and case studies – for better performance distributed...
RDMA programming design and case studies – for better performance distributed...RDMA programming design and case studies – for better performance distributed...
RDMA programming design and case studies – for better performance distributed...NTT Software Innovation Center
 

Mehr von NTT Software Innovation Center (20)

A Global Data Infrastructure for Data Sharing Between Businesses
A Global Data Infrastructure for Data Sharing Between BusinessesA Global Data Infrastructure for Data Sharing Between Businesses
A Global Data Infrastructure for Data Sharing Between Businesses
 
企業間データ流通のための国際データ基盤
企業間データ流通のための国際データ基盤企業間データ流通のための国際データ基盤
企業間データ流通のための国際データ基盤
 
企業間データ流通のための国際データ基盤
企業間データ流通のための国際データ基盤企業間データ流通のための国際データ基盤
企業間データ流通のための国際データ基盤
 
企業間データ流通のための国際基盤
企業間データ流通のための国際基盤企業間データ流通のための国際基盤
企業間データ流通のための国際基盤
 
企業間データ流通のための国際基盤
企業間データ流通のための国際基盤企業間データ流通のための国際基盤
企業間データ流通のための国際基盤
 
Hybrid Computing Platform for Combinatorial Optimization with the Coherent Is...
Hybrid Computing Platform for Combinatorial Optimization with the Coherent Is...Hybrid Computing Platform for Combinatorial Optimization with the Coherent Is...
Hybrid Computing Platform for Combinatorial Optimization with the Coherent Is...
 
2-in-1 Cluster Integration: Batch and Interactive GPU Computing
2-in-1 Cluster Integration: Batch and Interactive GPU Computing2-in-1 Cluster Integration: Batch and Interactive GPU Computing
2-in-1 Cluster Integration: Batch and Interactive GPU Computing
 
Hybrid Sourcing for Overcoming “Digital Cliff 2025”
Hybrid Sourcing for Overcoming “Digital Cliff 2025”Hybrid Sourcing for Overcoming “Digital Cliff 2025”
Hybrid Sourcing for Overcoming “Digital Cliff 2025”
 
データ分析をビジネスに活かす!データ創出・活用から、分析、課題解決までのDX時代のデータ活用事例のご紹介 ~不揃いのデータとの格闘~
データ分析をビジネスに活かす!データ創出・活用から、分析、課題解決までのDX時代のデータ活用事例のご紹介 ~不揃いのデータとの格闘~データ分析をビジネスに活かす!データ創出・活用から、分析、課題解決までのDX時代のデータ活用事例のご紹介 ~不揃いのデータとの格闘~
データ分析をビジネスに活かす!データ創出・活用から、分析、課題解決までのDX時代のデータ活用事例のご紹介 ~不揃いのデータとの格闘~
 
Network Implosion: Effective Model Compression for ResNets via Static Layer P...
Network Implosion: Effective Model Compression for ResNets via Static Layer P...Network Implosion: Effective Model Compression for ResNets via Static Layer P...
Network Implosion: Effective Model Compression for ResNets via Static Layer P...
 
Why and how Edge Computing matters enterprise IT strategy
Why and how Edge Computing matters enterprise IT strategyWhy and how Edge Computing matters enterprise IT strategy
Why and how Edge Computing matters enterprise IT strategy
 
外部キー制約を考慮した特徴量削減手法
外部キー制約を考慮した特徴量削減手法外部キー制約を考慮した特徴量削減手法
外部キー制約を考慮した特徴量削減手法
 
デジタルサービスプラットフォーム実現に向けた技術課題
デジタルサービスプラットフォーム実現に向けた技術課題デジタルサービスプラットフォーム実現に向けた技術課題
デジタルサービスプラットフォーム実現に向けた技術課題
 
Building images efficiently and securely on Kubernetes with BuildKit
Building images efficiently and securely on Kubernetes with BuildKitBuilding images efficiently and securely on Kubernetes with BuildKit
Building images efficiently and securely on Kubernetes with BuildKit
 
Real-time spatiotemporal data utilization for future mobility services
Real-time spatiotemporal data utilization for future mobility servicesReal-time spatiotemporal data utilization for future mobility services
Real-time spatiotemporal data utilization for future mobility services
 
MVSR Schedulerを作るための指針
MVSR Schedulerを作るための指針MVSR Schedulerを作るための指針
MVSR Schedulerを作るための指針
 
NTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービス
NTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービスNTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービス
NTTのR&Dを支えるNTTコミュニケーションズのIT基盤サービス
 
Challenges for Implementing PMEM Aware Application with PMDK
Challenges for Implementing PMEM Aware Application with PMDKChallenges for Implementing PMEM Aware Application with PMDK
Challenges for Implementing PMEM Aware Application with PMDK
 
RDMA programming design and case studies – for better performance distributed...
RDMA programming design and case studies – for better performance distributed...RDMA programming design and case studies – for better performance distributed...
RDMA programming design and case studies – for better performance distributed...
 
Introducing PMDK into PostgreSQL
Introducing PMDK into PostgreSQLIntroducing PMDK into PostgreSQL
Introducing PMDK into PostgreSQL
 

Spring I/O 2018 報告会

  • 1. Copyright©2018 NTT corp. All Rights Reserved. Spring I/O 2018 報告会 2018年7月30日 NTTソフトウェアイノベーションセンタ 岩塚 卓弥
  • 2. 2Copyright©2018 NTT corp. All Rights Reserved. • 名前:岩塚 卓弥 • 所属:NTT ソフトウェアイノベーションセンタ • NTTの研究所のうちソフトウェアを専門に扱う • 自部署ではソフトウェア工学を研究 • Springベースのグループ共通フレームワークの整備を担当 • Spring I/O は今年で4回目 • レポートも書きました(共著) • https://codezine.jp/article/detail/10930 自己紹介
  • 3. 3Copyright©2018 NTT corp. All Rights Reserved. • Documenting RESTful APIs with Spring REST Docs and RAML • スライド: https://speakerdeck.com/mduesterhoeft/documenting- restful-apis-with-spring-rest-docs-and-raml • 動画: https://www.youtube.com/watch?v=VwKc34W96Cw&li st=PLe6FX2SlkJdRCNFdhWgpRmJybXafo-Uqk&index=20 • Consumer driven contracts in a polyglot world • スライド: https://docs.google.com/presentation/d/19BFGJiTElU3 VVIbpF3Gqac26m4uaNpPEQpVB1eIPa90/edit#slide=id. p • 動画: https://www.youtube.com/watch?v=sKlwNJeQMV4&list =PLe6FX2SlkJdRCNFdhWgpRmJybXafo-Uqk&index=25 今日のトピック
  • 4. 4Copyright©2018 NTT corp. All Rights Reserved. REST Docs (and RAML)のセッションのQ&Aで Spring Cloud Contract との関連を問う質問があった → セッションの内容とはコンテキストが違い,要領を得ず キーワードレベル(API, テスト)で共通しているため, うまく整理できていない人が多いのかも… きっかけ
  • 5. 5Copyright©2018 NTT corp. All Rights Reserved. RESTful API 開発
  • 6. 6Copyright©2018 NTT corp. All Rights Reserved. 用途による分類 Public API Internal API App API 3rd party App 3rd party App 3rd party App • 誰がどう使うかわからない • API変更時に利用側の合意は不要 • そもそも全員の合意は取れない • 外部の開発者に使ってもらうための 諸々を用意する必要がある • 使う人・使用方法がわかっている • API変更時に利用側の合意が必要 • 勝手に変えると他のサービスが 壊れる場合がある • 内部の開発者が使えればよい App API App App AppAPI API API
  • 7. 7Copyright©2018 NTT corp. All Rights Reserved. 使えない / 使いたくない API • そもそも欲しい機能がAPI化されていない • ドキュメントがない • ドキュメントが古い • ドキュメントがわかりにくい 合体技 わかりにくいドキュメントをくまなく調べた結果 欲しい機能がAPIとして提供されていないことがわかる 使ってもらうためにドキュメントは必須 特に Public API の場合は充実したドキュメントがあるとよい APIドキュメントの必要性
  • 8. 8Copyright©2018 NTT corp. All Rights Reserved. 多くの開発者の共通認識 • メンテナンスされたドキュメントは重要である • ドキュメントのメンテナンスは面倒である ドキュメントのメンテナンス なんらかの方法でドキュメントが勝手に実装に追従してくれると嬉しい → いくつかのアプローチがあるが,いずれにせよ何らかの妥協が必要
  • 9. 9Copyright©2018 NTT corp. All Rights Reserved. 機械可読の仕様から実装もドキュメントも生成 API仕様からの生成 Spec 本当に仕様から吐き出されるソースコードと付き合っていけるか? → できないと結局ドキュメントのメンテナンス面倒問題と同じ構図に 記法は様々 ・OpenAPI ・RAML ・API Blueprint ・... ツールによって用途も様々 ドキュメント ソースコード スタブ(モック)サーバ ...
  • 10. 10Copyright©2018 NTT corp. All Rights Reserved. 実装そのものからドキュメントを生成 一般に,ソースコードだけでは情報が足りないので補完が必要 ソースコードからの生成 e.g. Springfox • 実装方法に依存する • ソースコードが読みづらくなる • 実装内容と補完情報が乖離していないことは保証されない
  • 11. 11Copyright©2018 NTT corp. All Rights Reserved. APIのテストコードからドキュメントの一部を生成 • API実装側の実装方法に依存しない • テストされた確実な内容を出力 • デフォルトでは Asciidoctor のスニペットとして出力 • テストが失敗した場合は出力しない Spring REST Docs ...
  • 12. 12Copyright©2018 NTT corp. All Rights Reserved. Spring REST Docs ドキュメント例 生成したスニペットをincludeしてドキュメントを作成
  • 13. 13Copyright©2018 NTT corp. All Rights Reserved. Spring REST Docs • テストを利用した正確な出力 😊 • Asciidoctor (or Markdown) のスニペットを出力 😐 • ドキュメントが静的かつ簡素 • 用途が限定的 Spring REST Docs RAML Integration • RAML形式の出力をサポートしたサードパーティ拡張 • https://github.com/ePages-de/restdocs-raml • 実装との乖離を防ぎつつ RAML のエコシステムを活用 Spring REST Docs の拡張
  • 14. 14Copyright©2018 NTT corp. All Rights Reserved. restdoc-raml の入力例 Spring REST Docs を拡張
  • 15. 15Copyright©2018 NTT corp. All Rights Reserved. restdoc-raml の出力例 RAML JsonSchema リクエスト例
  • 16. 16Copyright©2018 NTT corp. All Rights Reserved. RAMLの活用(raml2html)
  • 17. 17Copyright©2018 NTT corp. All Rights Reserved. RAMLの活用(raml2html)
  • 18. 18Copyright©2018 NTT corp. All Rights Reserved. RAMLの活用 (API console)
  • 19. 19Copyright©2018 NTT corp. All Rights Reserved. RAMLの活用 (API console)
  • 20. 20Copyright©2018 NTT corp. All Rights Reserved. Documenting RESTful APIs with Spring REST Docs and RAML • Public API を使ってもらうためにドキュメントが必要 • テストから生成する Spring REST Docs のアプローチを採用 • Asciidoctor の静的なドキュメントでは物足りない → テストから RAML を生成する拡張を作った RAMLのエコシステムを活用できるようになった - 動的なドキュメント - ブラウザで動作するクライアント - スタブ(モック)サーバの作成 - … ここまでのまとめ
  • 21. 21Copyright©2018 NTT corp. All Rights Reserved. 【再掲】用途による分類 Public API Internal API App API 3rd party App 3rd party App 3rd party App • 誰がどう使うかわからない • API変更時に利用側の合意は不要 • そもそも全員の合意は取れない • 外部の開発者に使ってもらうための 諸々を用意する必要がある • 使う人も使われ方もわかっている • API変更時に利用側の合意が必要 • 勝手に変えると他のサービスが 壊れる場合がある • 内部の開発者が使えればよい App API App App AppAPI API API
  • 22. 22Copyright©2018 NTT corp. All Rights Reserved. Consumer-driven Contracts (CdC) App API App App App 提供者 (Provider) 利用者 (Consumer)Contract Contract • API提供者と利用者のリクエスト/レスポンスに関する取り決め • 各利用者はAPIのレスポンスのすべてを使いたいとは限らない • 利用者の必要な部分だけの取り決め = Consumer Contract • 提供者は各利用者との Contract に合意し,これを守る Contract を前提とすることで対向をスタブ化したテストが可能になる
  • 23. 23Copyright©2018 NTT corp. All Rights Reserved. Spring Cloud Contract – Contractの記述 App API App 提供者 (Provider) 利用者 (Consumer) Contract Groovy DSL または YAML で記述
  • 24. 24Copyright©2018 NTT corp. All Rights Reserved. Spring Cloud Contract – Providerのテスト App API App 提供者 (Provider) 利用者 (Consumer) Contract テストテストテスト テストコードの生成 リクエストに対して Contractの通りレスポンスするか
  • 25. 25Copyright©2018 NTT corp. All Rights Reserved. Spring Cloud Contract – テスト用スタブ App API App 提供者 (Provider) 利用者 (Consumer) Contract スタブ スタブを生成 実体は jar ファイル Contract に対応した WireMock用のjsonが 入っている
  • 26. 26Copyright©2018 NTT corp. All Rights Reserved. Spring Cloud Contract – Consumerのテスト App API App 提供者 (Provider) 利用者 (Consumer) Contract スタブ スタブを利用してテスト 使用するスタブを指定
  • 27. 27Copyright©2018 NTT corp. All Rights Reserved. Microservices ではJVM言語以外も自然に混在しえる → Java, maven に依存しないやり方が必要 Spring Cloud Contract の Polyglot 対応 • Contract の記述 → Groovy DSL 以外に YAML でも記述可能 • Provider のテストコードの生成 → Docker でテスト生成&実行 • Consumer テスト用のスタブ生成 → Docker でスタブ生成&実行 Polyglot 対応
  • 28. 28Copyright©2018 NTT corp. All Rights Reserved. Polyglot 対応 – Contractの記述 App API App 提供者 (Provider) 利用者 (Consumer) Contract YAML で記述
  • 29. 29Copyright©2018 NTT corp. All Rights Reserved. Polyglot 対応 – Providerのテスト App API App 提供者 (Provider) 利用者 (Consumer) Contract テストテストテスト 生成 起動しておく マウント spring-cloud-contract Providerにリクエストして レスポンスを検証
  • 30. 30Copyright©2018 NTT corp. All Rights Reserved. Polyglot 対応 – テスト用スタブ App API App 提供者 (Provider) 利用者 (Consumer) Contract スタブ 生成 Artifactoryへpublishされる
  • 31. 31Copyright©2018 NTT corp. All Rights Reserved. Polyglot 対応 – Consumerのテスト App API App 提供者 (Provider) 利用者 (Consumer) Contract スタブ spring-cloud-contract-stub-runner Artifactoryから 取得して起動 テストのリクエストに レスポンスを返す
  • 32. 32Copyright©2018 NTT corp. All Rights Reserved. REST Docs を利用すると以下が可能 • テストコードからのスタブ生成 • テストコードからのContract生成 → 既にSpring MVCのテストがあるプロジェクトで, Spring Cloud Contract を新しく導入するときに便利 Spring Cloud Contract + REST Docs
  • 33. 33Copyright©2018 NTT corp. All Rights Reserved. • Documenting RESTful APIs with Spring REST Docs and RAML • 実装と対応したドキュメントを作成するにはテストをソースに するとよい • Spring RESTDocs のコンセプトはそのままにRAMLのエコシ ステムを利用できる拡張を作った • Consumer driven contracts in a polyglot world • 内部APIの連携の試験にはCdCが便利 • Spring Cloud Contract は非JVM環境にも対応 • 目的に沿った技術を使う • キーワードだけで捉えると見誤る • ツールに振り回されないようにコンテキストを整理すること まとめ