Upgrade to Pro — share decks privately, control downloads, hide ads and more …

第五回 自分だけのSandboxをつくろう

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

第五回 自分だけのSandboxをつくろう

Avatar for ta28masa

ta28masa

July 07, 2021
Tweet

More Decks by ta28masa

Other Decks in Technology

Transcript

  1. 1 © 2021 IBM Corporation ⾃⼰紹介 正⽊ 達也 Tatsuya Masaki

    Advisory IT Architect Solution Strategy, FSS Business Solutions, GBS, IBM Japan 経歴 2009年 ⽇本IBM⼊社。 2009-2015年 インターネットバンキングシステムのデリバリー担当。 ITスペシャリストとして⼤規模更改プロジェクト等を経験。 2016-2020年 シンガポール赴任。邦銀の海外拠点向けコアバンクシステム更改 プロジェクト等を歴任。 2020年末帰任 ⾦融機関向けソリューション戦略チームに在籍。 スキル Java, Web関連 (HTML, CSS, JavaScript) Linux, AIX, Windows, VMWare, bash, ksh, Powershell, Python, Excel VBA, etc. テスト⾃動化(Selenium, JMeter, etc.), 構築⾃動化(Ansible) (鋭意勉強中) IBM Cloud, OpenShift, Kafka,モバイル(React Native) https://www.linkedin.com/in/tatsuya-masaki-ta28093 https://www.ibm.com/think/jp-ja/business/dsp-front-2021/ DX成功の鍵を握るフロントサービスの変⾰に向けて、IBMが提供する「共創の場」 - IBM THINK Business Blog
  2. 2 © 2021 IBM Corporation 講義の進め⽅ • 講義中の質問 : WebExのQ&Aにて受け付け、

    サポートメンバーにより可能な限り回答します。 また参加者の皆様に関係があるご質問については、 講義後の時間が許す限りで回答します。 • 講義後の質問︓ Connpass申込ページのFeed機能にて 頂戴した質問についても確認します。 (確実な回答を保証するものではありません。) • 講義+ハンズオンの形式で実施します。 講義資料は追ってConnpass上にリンクを⽤意します。 ハンズオンはゆっくり進めるよう⼼がけますが、追いつけない場合も鑑み ⼿順書をお⼿元にご⽤意いただくことを推奨します。 本講申込ページの[Media]よりアクセス可能です。 • 講義後アンケート︓ 下記URLから回答をいただけますと幸いです。 https://app.sli.do/event/gw5p2hnu • 講義中の進捗確認 : ハンズオンの要所要所で、WebExのPoll機能にて 様⼦を確認します。
  3. 5 © 2021 IBM Corporation 1-2.DSPとその価値 IBMの提唱する「次世代アーキテクチャ」では、デジタルサービス層がフロントサービスの柔軟・迅速な開発を可能にします。 デジタルサービスプラットフォーム(DSP)は、このデジタルサービス層をクラウド上に構築、共同利⽤するソリューションです。 [ 価値

    ] フロントサービスとの容易な接続性 オープンAPIにより外部接続を標準化 事前準備された機能・サービス 重要な差別化要素となる 新しい⾦融サービス開発への専念が可能 デジタル開発の効率化 共通サービスの共同利⽤ 安全・安⼼のクラウド利⽤ DSP基盤 ソフトウェア / コンテナ層 アプリケーション層 CICD 資⾦移動 ⼝座管理 諸届 共通機能 ⽣体認証 多要素認証 認証 AI 分析 既存業務 新業務 ユーティリティ部品 API API API API API API フロントサービス (特定銀⾏) ホワイトラベル (銀⾏間) 外部サービス (FinTech 等) IBM⾦融業界 ソリューション 基 幹 系 連 携 バ ック エ ン ド ア ダ プ タ ー 銀⾏ 勘定系システム 共同化 基幹系システム フロントサービス層 デジタルサービス層 ビジネスサービス層
  4. 6 © 2021 IBM Corporation 1-3.DSP Open API Sandbox環境 DSP

    OpenAPI Sandboxは、このDSPの応答を擬似的に体験できる環境です。 本シリーズでは、この環境を⽤いてどのようなことができるかを「実際に動かして」体験していただきます。 基盤 ソフトウェア / コンテナ層 アプリケーション層 CICD 資⾦移動 ⼝座管理 諸届 共通機能 ⽣体認証 多要素認証 認証 AI 分析 既存業務 新業務 ユーティリティ部品 API API API API API API 基 幹 系 連 携 バ ック エ ン ド ア ダ プ タ ー Sandbox 擬似応答環境 第1回 第2回 第3回 第4回 第5回 2 課題に寄り添った継続的改善 1 早期のプロトタイピングと洗練 3 より具体的で実現可能性の⾼い企画⽴案 コスト、リスク、サービスインまでの時間の低減が期待できます。 実際に動くプロトタイプをでの実証と、早期のフィードバックから、 より的確なゴールへ到達できるようになります。 利⽤者に近い⽴場の⽅が迅速かつ継続的に改善を続けることで、 社内外のシステム評価を⾼めることができます。 広がる活躍の機会
  5. 7 © 2021 IBM Corporation 1-4.全5回のゴール 全5回で、APIを使⽤したフロントサービス開発に関して、知識・スキルを広げていただけるように準備しています。 ⾃分だけの経験、知識、問題意識、 アイディアと掛け合わせて 今までにない顧客体験を「共創」しよう︕

    いろいろ作れそう︕ でも実際のテストではもっと 応答パターンあるよね。 第2回 DSP Sandboxで考える銀⾏システム • 銀⾏の各種サービスで、システムがどう連携するかをイメージできる、図⽰できる • 銀⾏のシステム間の「責務」について語れる 第3回 DSP Sandboxでメッセージングアプリ残⾼照会 • DSP SandboxのAPIを使って、残⾼照会サービスを構築できる • 他のAPIと組み合わせた銀⾏サービスについて具体的にイメージできる 第1回 さわってみようDSP Sandbox • APIとは何か、なぜ良いのかを語れる • フロントサービス層の銀⾏システムになったつもりでAPIを呼び出せる 第4回 DSP Sandboxでモバイルアプリを作ろう DSP Sandboxのサービスを呼ぶモバイルアプリを作れる モバイルアプリのアーキテクチャについて語れる 第5回 ⾃分だけのSandboxを作ろう Open APIを活⽤して⾃在に応答を操作できるスタブを作れる APIファースト開発について語れる
  6. 9 © 2021 IBM Corporation 2-1.Mockプログラムの必要性 フロントシステム開発プロジェクトの全テスト⼯程において、「後段システムのテスト環境が準備できていて、⾃在に利⽤できる」 状況は⾮常に稀です。多かれ少なかれ、後段システムを代替する⼿段が必要です。 https://ja.wikipedia.org/wiki/Vモデル 単体テストフェーズ

    • 後段サーバの準備ができていない可能性 • ホワイトボックステストにのための応答パターン実現*に⼯数が膨らむ可能性 (* 各パターンのデータ準備、エラー応答、異常応答(桁溢れ、型不⼀致など)) 結合テストフェーズ • 後段サーバの準備ができていない可能性 • 性能テストスコープに後段サーバが含まれない可能性 システムテストフェーズ • 環境制約の可能性 • ⼀気通貫の性能テストが⾏えない可能性 受け⼊れテストフェーズ • 環境制約の可能性 (例︓後段サーバ接続済みの環境はユーザ部打鍵の環境として使われ、 バグ修正のリグレッションテストは別の環境で実施する) 各フェーズでMockプログラム*が必要となる (* “スタブ”と異なり、動的応答にも対応したもの。)
  7. 10 © 2021 IBM Corporation 2-2.APIファースト開発 API定義の合意を優先的に⾏い、そのAPI仕様から提供者と利⽤者双⽅がトップダウン・アプローチ*で開発を⾏うことを 「APIファースト開発」と呼びます。 *仕様から実装を作成する⽅式。反対に実装(コード等)から仕様を作成する⽅式をボトムアップと呼ぶ。 DSP基盤

    ソフトウェア / コンテナ層 アプリケーション層 CICD 資⾦移動 ⼝座管理 諸届 共通機能 ⽣体認証 多要素認証 認証 AI 分析 既存業務 新業務 ユーティリティ部品 API API API API API API フロントサービス 基 幹 系 連 携 バ ック エ ン ド ア ダ プ タ ー APIファーストで... 開発の並列化 API提供者と利⽤者は合意したAPI仕様に基づき並⾏開発 コスト低減 定義ファイルやコードを再利⽤ スピードアップ API定義ファイルからドキュメントやコードを⾃動⽣成 開発者負荷低減 再利⽤と⾃動化ツールにより作業量低減 標準化による学習コスト低減 失敗リスク低減 再利⽤と⾃動⽣成により⼈的ミスが発⽣する可能性を低減 (参照) https://swagger.io/blog/api-development/api-first-approach-with-swagger/ 勘定系 システム API利⽤者 API提供者 • API定義に合意 • 定義された仕様に基づ きAPIを利⽤するプログ ラムを構築 • API定義に合意 • 後段サービスとの接続 • 定義された仕様に基づきAPIを提供 API仕様 トップダウン
  8. 11 © 2021 IBM Corporation 2-3.API定義 Open API (Swagger)では、API仕様ファイルの仕様が定義されています。 YAML/JSONまたはの形式で定義します。

    https://swagger.io/specification/ ⾃動⽣成 API仕様ドキュメント サーバ(API提供者)コード サーバ(API提供者)モック クライアント(API利⽤者) コード クライアント(API利⽤者) ドライバ 他、各種ツールに読込
  9. 12 © 2021 IBM Corporation (余談) YAMLとは YAML(*.yml, *.yaml)は構造化データの表現形式の1つです。 YAML

    Ain't a Markup Languageの略*で、 「XMLやHTMLみたいなタグ囲い(マークアップ) じゃないけど、構造を表現できるやつ︕」 といった意味です。 user: ␣- name: nobita ␣␣age: 10 ␣␣mail: ␣␣␣- [email protected] ␣␣␣- [email protected] ␣- name: shizuka ␣␣age: 11 ␣␣mail: ␣␣␣- [email protected] JSONとの棲み分け - JSONもYAMLも、構造化データを表現でき る軽量なデータ表現形式 - JSONは機械が記述・解釈できることを優先 改⾏やインデントは除去可能。 → システム間の通信に多く使われる - YAMLは⼈間が記述・解釈できることを優先 改⾏やインデントが意味を持つ。 → ⼈間がシステムに定義を渡す場⾯で多く使われる 親⼦(⼊れ⼦)関係は インデント(スペースやタブ)で表現 繰り返しは”-”(ハイフン)で羅列 * 再帰的頭字語(recursive acronym) (参照) http://yaml.org/spec/1.2/spec.html#id2759572
  10. 14 © 2021 IBM Corporation 3-1.YAMLファイルのダウンロード 開発者ポータルにアクセスしてダウンロードしてください。ログインは不要です。 https://ibm.biz/portal_devcom [API製品] >

    [DSP Open API] > [普通預⾦MS] 1 1 中央部右上、[Open API]リンクより、ダウンロードしてください ハンズオンの流れ YAMLファイルのダウンロード 3-1 前提ソフトウェアの確認 3-2 モックの⽣成 3-3 3-6 モックの起動 3-4 モックの動作確認 (1) ブラウザから (2) Curlコマンドから 3-5 モックの編集
  11. 15 © 2021 IBM Corporation 3-2.前提ソフトウェアの確認 前提となるソフトウェアがインストールされているか確認します。 1 1 java

    -version : Javaがインストールされていることを確認してください。 2 3 2 mvn -v : Apache Mavenがインストールされていることを確認してください。 3 openapi-generator --version または openapi-generator-cli version : Open API Generator がインストールされていることを確認してください。 ハンズオンの流れ YAMLファイルのダウンロード 3-1 前提ソフトウェアの確認 3-2 モックの⽣成 3-3 3-6 モックの起動 3-4 モックの動作確認 (1) ブラウザから (2) Curlコマンドから 3-5 モックの編集
  12. 16 © 2021 IBM Corporation 3-3.モックの⽣成 Open API GeneratorでSpring bootのモックを⽣成します。

    1 ダウンロードしたYAMLファイルのあるディレクトリに移動してください 2 1 2 下記コマンドでMockを生成してください。 コード openapi-generator generate -i 普通預⾦\ MS.yaml -o ./mock-ordinarydeposit -g spring ハンズオンの流れ YAMLファイルのダウンロード 3-1 前提ソフトウェアの確認 3-2 モックの⽣成 3-3 3-6 モックの起動 3-4 モックの動作確認 (1) ブラウザから (2) Curlコマンドから 3-5 モックの編集
  13. 18 © 2021 IBM Corporation Open API GeneratorでSpring bootのモックを⽣成します。 1

    生成したMockのディレクトリに移動してください 2 1 2 アプリケーションを起動してください コード cd mock-ordinarydeposit コード mvn spring-boot:run 3-4.モックの起動 ハンズオンの流れ YAMLファイルのダウンロード 3-1 前提ソフトウェアの確認 3-2 モックの⽣成 3-3 3-6 モックの起動 3-4 モックの動作確認 (1) ブラウザから (2) Curlコマンドから 3-5 モックの編集
  14. 19 © 2021 IBM Corporation Webブラウザからモックにアクセスし、正常稼働を確認します。 http://localhost:8080 3-5.モックの動作確認 (1) 1

    Webブラウザを起動し、下記URLにアクセスして画面が表示されることを確認してください ※環境によりポートは異なる可能性があります。 ハンズオンの流れ YAMLファイルのダウンロード 3-1 前提ソフトウェアの確認 3-2 モックの⽣成 3-3 3-6 モックの起動 3-4 モックの動作確認 (1) ブラウザから (2) Curlコマンドから 3-5 モックの編集
  15. 20 © 2021 IBM Corporation CurlコマンドによりAPI要求に応答できることを確認します。 3-5.モックの動作確認 (2) 1 別のTerminal(コマンドプロンプト)を起動し、Curlリクエストを送信してください

    curl --request POST \ --url http://localhost:8080/ordinarydeposit/v1.2.0/ordinaryDeposi t/accounts/balance/inquiry \ --header 'accept: application/json' \ --header 'content-type: application/json' \ --data '{"commonRequestHeader":{"bankCode":"0000","userID":"0 00001","userIDForLogging":"000001","applicationID":"app0 000001","clientID":"client0000001","deviceID":"device0000 001","userString":"","userMap":{}},"inquireAccount":[{"branc hNumber":"001","accountType":"001","accountNumber":"12 34567"}]}' コード 1 ハンズオンの流れ YAMLファイルのダウンロード 3-1 前提ソフトウェアの確認 3-2 モックの⽣成 3-3 3-6 モックの起動 3-4 モックの動作確認 (1) ブラウザから (2) Curlコマンドから 3-5 モックの編集
  16. 21 © 2021 IBM Corporation 3-6.モックの編集 ソースコードを編集して、応答を変えます。 1 生成したMockの”OrdinaryDepositApi.java”をエディタで開いてください 2

    1 2 普通預金の残高照会APIのコードから、応答のJSONを設定している箇所を編集し、保存してください 3 手順3−4で起動していたコンソールでアプリケーションを再起動してください [Ctrl+c]で停止、再度[mvn spring-boot:run]で起動です 4 手順3−5(2)で実行したCurlコマンドを再度実行し、変更が反映されていることを確認してください ハンズオンの流れ YAMLファイルのダウンロード 3-1 前提ソフトウェアの確認 3-2 モックの⽣成 3-3 3-6 モックの起動 3-4 モックの動作確認 (1) ブラウザから (2) Curlコマンドから 3-5 モックの編集
  17. 23 © 2021 IBM Corporation // Common Response Header PostOrdinaryDepositAccountsStatementsInquiry200CommonResponseHeader

    crh = new PostOrdinaryDepositAccountsStatementsInquiry200CommonResponseHeader(); crh.setUserString(Objects.toString(body.getCommonRequestHeader().getUserString(),"")); if (Objects.isNull(body.getCommonRequestHeader().getUserMap())){ crh.setUserMap(new LinkedHashMap<String,String>()); } else { crh.setUserMap(body.getCommonRequestHeader().getUserMap()); } // Inquiry List<PostOrdinaryDepositAccountsBalanceInquiry200InquireResult> ias = new ArrayList<>(); for(PostOrdinaryDepositAccountsBalanceInquiryInquireAccount acc : body.getInquireAccount() ){ //リクエストの口座数に応じてループ PostOrdinaryDepositAccountsBalanceInquiry200InquireResult ia = new PostOrdinaryDepositAccountsBalanceInquiry200InquireResult(); ia.setBranchNumber(acc.getBranchNumber()); // Echo ia.setBranchKanjiName("日本橋支店"); // Static ia.setBranchName("ニホンバシシテン"); // Static ia.setAccountNumber(acc.getAccountNumber()); // Echo ia.setAccountType(acc.getAccountType()); // Echo ia.setCurrentAmount("1010000"); // Static ia.setAvailableAmount("1000000"); // Static ia.setRecordDate(LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE)); // Dynamic ia.setRecordTime(LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); // Dynamic ias.add(ia); ia = null; } // Response PostOrdinaryDepositAccountsBalanceInquiry200 resp = new PostOrdinaryDepositAccountsBalanceInquiry200(); resp.setCommonResponseHeader(crh); resp.setInquireResult(ias); ObjectMapper mapper = new ObjectMapper(); String exampleString = ""; try { exampleString = mapper.writeValueAsString(resp); } catch (JsonProcessingException e) { } ApiUtil.setExampleResponse(request, "application/json", exampleString); break; } } 4-1.もっとモックを編集 応答のJSONを編集し、パラメータ毎に動的・静的・オウム返しで値を返すこともできます。 リクエストパラメータを使って データベースから値を抽出する⽅式もOK。 (でも応答時間と可搬性が下がるかも。) リクエストパラメータからファイル名を動的⽣成して ファイルの中⾝を取ってくる仕組みもいいね。 例えばこんなテスト要件があります。 - ⽇付時刻は現在のものにしたい - 要求と応答の取引IDは⼀致させたい - 顧客によって⼝座番号を変えたい - ⼝座番号によって残⾼を変えたい - リクエストの⼝座数・⼝座番号と⼀致させたい - 応答まで数分スリープさせたい(タイムアウト検証) - 0.5秒スリープして応答させたい(性能テスト)
  18. 26 © 2021 IBM Corporation 5-1.全5回の成果 第2回 DSP Sandboxで考える銀⾏システム •

    銀⾏の各種サービスで、システムがどう連携するかをイメージできる、図⽰できる • 銀⾏のシステム間の「責務」について語れる 第3回 DSP Sandboxでメッセージングアプリ残⾼照会 • DSP SandboxのAPIを使って、残⾼照会サービスを構築できる • 他のAPIと組み合わせた銀⾏サービスについて具体的にイメージできる 第4回 DSP Sandboxでモバイルアプリを作ろう • DSP Sandboxのサービスを呼ぶモバイルアプリを作れる • モバイルアプリのアーキテクチャについて語れる 第5回 ⾃分だけのSandboxを作ろう Open APIを活⽤して⾃在に応答を操作できるスタブを作れる APIファースト開発について語れる 第1回 さわってみようDSP Sandbox • APIとは何か、なぜ良いのかを語れる • フロントサービス層の銀⾏システムになったつもりでAPIを呼び出せる ⾃分だけの経験、知識、問題意識、 アイディアと掛け合わせて 今までにない顧客体験を「共創」しよう︕ ここまでの全5回で、APIを活⽤した開発をさまざまな切り⼝から体験いただきました。
  19. 27 © 2021 IBM Corporation 5-2.シーズン2準備中︕ Developer Dojo DSP Sandboxシリーズ・シーズン2を鋭意検討中です︕

    - この業務領域・技術領域にフォーカスして欲しい - もっとインタラクティブな開催形式がいい - 横のつながりを作りたい - もっと具体的な構築の話 or もっと抽象的な上流の話がいい などなど、ご意⾒をアンケートに頂戴できますと幸いです︕ 講義後アンケート︓ 下記URLから回答をお願いします。 https://app.sli.do/event/gw5p2hnu
  20. 30 © 2021 IBM Corporation 免責事項 公開している資料は個⼈の⾒解であり、必ずしも所属法⼈の⽅針や意向を表すものではありません。 IBM Developer Dojoは開発者の⽅を対象に、IBM

    Cloudを主とした技術情報をお伝えする⽬的で開催し ております。講師や運営スタッフにより、開催毎に最適と判断した内容でお届けしています。 ハンズオンを伴う講義はお客様の費⽤負担が発⽣しない環境と⼿順にてご案内しております。 クラウド上に構築した製作物は、お客様ご⾃⾝で適切に削除をお願い致します。 クレジットカード情報の登録を伴わない場合は費⽤は⼀切発⽣しませんが、ご登録いただいているお客様 はご注意下さい。 講師陣は皆様のご利⽤状況を個別に確認することはできません。ご理解とご協⼒をお願い致します。 当シリーズではサードパーティのサービスやソフトウェア(LINE API、React Native、VS Codeなど)を使 ⽤しますが、本番環境での使⽤をこれに限定するものではありません。 ご⾃⾝の状況等を鑑み、適切にご判断いただきますよう、お願い申し上げます。 当シリーズで提供するソースコードは講義⽤のものです。実際の⾦融機関で使⽤するにはセキュリティや エラーハンドリングなど数々の考慮、設計、実装が必要です。このハンズオンでは『動くものを作ってみ る』ことに主眼を置いていますので、そういった点は含まれないことをご了承ください。 本⽇はご参加いただき、誠にありがとうございました。