$30 off During Our Annual Pro Sale. View Details »

NIFTY Tech Day 2022 クリーンアーキテクチャはこの3年間で私たちのチームに何をもたらしたのか

NIFTY Tech Day 2022 クリーンアーキテクチャはこの3年間で私たちのチームに何をもたらしたのか

NIFTY Tech Day 2022 セッション資料

ニフティのオプションサービスの設計開発にクリーンアーキテクチャを導入しました。私たちだからこそ語れるクリーンアーキテクチャのあれこれを実体験を交えてお話しします。

本セッションのアーカイブ動画:
https://youtu.be/FHqf5eBAohU

NIFTY Tech Day 2022 アーカイブ動画一覧:
https://www.youtube.com/playlist?list=PLYJnnMO84Y4ScTbh4EB5F-xVwgmPv_cM3

ニフティ株式会社

November 22, 2022
Tweet

More Decks by ニフティ株式会社

Other Decks in Programming

Transcript

  1. Copyright ©NIFTY Corpora2on All Rights Reserved. クリーンアーキテクチャは この3年間で 私たちのチームに 何をもたらしたのか

    会員システムグループ 第二開発チーム 三浦 拓実
  2. 自己紹介 Copyright © NIFTY Corporation All Rights Reserved. 三浦 拓実(みうら

    たくみ) 2019年4月入社(4年目) 趣味 •バイク •スニーカー
  3. 担当プロダクトの紹介 Copyright © NIFTY Corporation All Rights Reserved. インターネット上の脅威からあなたのPCを守る 総合セキュリティソフト

    あなたの個人情報流出をいち早く検知し 被害を最小限に抑える インターネットにつながるあらゆる機器を保護する ネットセキュリティの新しいカタチ
  4. 目次 Copyright © NIFTY Corpora2on All Rights Reserved. クリーンアーキテクチャをざっくり説明 ビジネスロジックにこだわる姿勢

    チームが成長するための「指針」 スクラムでクリーンアーキテクチャを考える土壌
  5. Copyright ©NIFTY Corporation All Rights Reserved. クリーンアーキテクチャを ざっくり説明

  6. 『Clean Architecture 達人に学ぶソフトウェアの構造と設計』 Copyright © NIFTY Corporation All Rights Reserved.

    Robert C.Martin 著 角 征典、高木 正弘 訳 KADOKAWA ISBN: 978-4-04-893065-9
  7. Copyright © NIFTY Corporation All Rights Reserved. Controller Controller Use

    Case Output Port Use Case Input Port Use Case Interactor Entities Use Cases Controllers External Interfaces みなさんが見たことがあるかもしれない図 (The Clean Architecture / p.200) 1. クリーンアーキテクチャとは
  8. Copyright © NIFTY Corporation All Rights Reserved. みなさんが見たことがあるかもしれない図 (WEBベースのシステムの典型的なシナリオ /

    p.204) Controller Input Boundary Use Case Interactor DataAcces s Interface DataAcces s En;;es Input Data Output Data Data Base Output Boundary Presenter View Model View 1. クリーンアーキテクチャとは
  9. 2. クリーンアーキテクチャを取り入れる理由 Copyright © NIFTY Corporation All Rights Reserved. 「ソフトウェアアーキテクチャの目的は、

    求められるシステムを構築・保守するために必要な人材を 最小限に抑えることである」(p.34) アーキテクチャを改善することが本質ではない 構築と保守にかかるコストを削減するためにア ーキテクチャを改善することが本質
  10. Copyright © NIFTY Corporation All Rights Reserved. • フレームワーク非依存 •

    テスト可能 • UI非依存 • データベース非依存 • 外部エージェント非依存 という特性を持つ 構造(アーキテクチャ) 2. クリーンアーキテクチャを取り入れる理由
  11. Copyright © NIFTY Corporation All Rights Reserved. 核となるビジネスロジックを守りながら、 変更容易性を維持し続ける •

    フレームワーク非依存 • テスト可能 • UI非依存 • データベース非依存 • 外部エージェント非依存 という特性を持つ 構造(アーキテクチャ) 2. クリーンアーキテクチャを取り入れる理由
  12. Copyright © NIFTY Corporation All Rights Reserved. プロダクトの「ビジネスルール」を具体化した「実装」 3. ビジネスロジックとは

    ビジネスルール • プロダクトに存在する仕様 • システムに依存せず、自然言語で表現ができる
  13. Copyright © NIFTY Corporation All Rights Reserved. 1. システムよりまず先にビジネスルールを洗い出す →プロダクトの曖昧なルールを明確にする

    1. ビジネスルールを基にビジネスロジックを定義する 1. ビジネスロジックをドメイン(プロダクトに登場する エンティティ)の振る舞いとする 3. ビジネスロジックとは
  14. Copyright ©NIFTY Corporation All Rights Reserved. ビジネスロジックに こだわる姿勢

  15. Copyright © NIFTY Corporation All Rights Reserved. 核となるビジネスロジックを守りながら、 変更容易性を維持し続ける •

    フレームワーク非依存 • テスト可能 • UI非依存 • データベース非依存 • 外部エージェント非依存 という特性を持つ 構造(アーキテクチャ) 1. クリーンアーキテクチャにした動機
  16. 1. クリーンアーキテクチャにした動機 Copyright © NIFTY Corpora2on All Rights Reserved. はじまりは

    PC・スマホのトラブルを365日電話で解決できる! 有償の電話相談サービス
  17. 1. クリーンアーキテクチャにした動機 Copyright © NIFTY Corpora2on All Rights Reserved. •

    サーバーサイドに書かれるべきロジックが フロントエンドに流出 →ビジネスロジックを見直し、サーバーサイドに集約する
  18. 1. クリーンアーキテクチャにした動機 Copyright © NIFTY Corporation All Rights Reserved. •

    サーバーサイドに書かれるべきロジックが フロントエンドに流出 →ビジネスロジックを見直し、サーバーサイドに集約する • 社内で既存サービスを内製化し、 継続的に改善していくことが求められる →変更容易性を保つことができるシステムを設計する
  19. 2. ビジネスルールと向き合う Copyright © NIFTY Corporation All Rights Reserved. 仕様が不明・過去の経緯が失われているといった状態でも

    ビジネスルールを追求し、再定義しなければならない →エンジニアだけで決められないルールが多数存在する →関係者とのコミュニケーションが最も重要
  20. 2. ビジネスルールと向き合う Copyright © NIFTY Corporation All Rights Reserved. ユーザー

    コールセンター 請求処理 • 初回申込かどうか? • 決済情報を登録しているニフティ会員か? • 何の特典を付与する必要があるか? • このユーザーは申込可能/申込中か? • ユーザーの相談を受け付けられるのか? • ユーザーが持つ特典を適用できるのか? 申し込み したい! 電話が かかって きました 月に1度 料金を請求 します • そもそも請求が必要か? • 請求金額は? • 申込と解約が同じ月に複数回行われたら どう請求するのか?
  21. 2. ビジネスルールと向き合う Copyright © NIFTY Corporation All Rights Reserved. ユーザー

    コールセンター 請求処理 • 初回申込かどうか? • 決済情報を登録しているニフティ会員か? • 何の特典を付与する必要があるか? • このユーザーは申込可能/申込中か? • ユーザーの相談を受け付けられるのか? • ユーザーが持つ特典を適用できるのか? 特定の申込方法でのみ申込時に過去の申込履歴を 考慮せずに初回申込とする xxxx年x月までに申込をしたユーザーには 相談の料金をzzz円で案内する xxxx年x月に特別なキャンペーンページから 申込したユーザーにのみ特典を適用する • そもそも請求が必要か? • 請求金額は? • 申込と解約が同じ月に複数回行われたら どう請求するのか? 申し込み したい! 電話が かかって きました 月に1度 料金を請求 します
  22. 2. ビジネスルールと向き合う Copyright © NIFTY Corporation All Rights Reserved. ビジネスルールを整理し

    ビジネスロジックとして振る舞いを定義すると・・・
  23. 2. ビジネスルールと向き合う Copyright © NIFTY Corporation All Rights Reserved. ビジネスルールを整理し

    ビジネスロジックとして振る舞いを定義すると・・・ • 変更容易性の維持 ◦ ビジネスルールがどこに定義されているか明確になる ◦ 仕様変更時の変更箇所が明確に ▪ 改修工数の大幅な削減に繋がった • ドメインエキスパート(プロダクトに精通した存在)になる ◦ エンジニアの枠を超えた施策の提案、売上貢献に 繋がった
  24. Copyright © NIFTY Corporation All Rights Reserved. • ビジネスロジックを見直し、サーバーサイドに集約する →達成!

    フロントとバックエンドは別でリリースが可能に • 変更容易性を保つことができるシステムを設計する →達成! 機能追加の際に変更箇所を1箇所に絞ることができる 2. ビジネスルールと向き合う
  25. Copyright © NIFTY Corporation All Rights Reserved. なぜクリーンアーキテクチャを考える上で ビジネスロジックが重要なのか?

  26. 3. アーキテクチャに固執したケース Copyright © NIFTY Corpora2on All Rights Reserved. ユーザー情報のキューイングを行うシステムに

    The Clean Architectureのレイヤードアーキテクチャを導 入した システムA キュー システム システムC システムB ユーザーIDを登録 ユーザーIDを登録 ユーザーIDに紐づく情報が 更新されたのか毎日確認する
  27. 3. アーキテクチャに固執したケース Copyright © NIFTY Corporation All Rights Reserved. さて、ビジネスロジックは・・・?

    システムA キュー システム システムC システムB ユーザーIDを登録 ユーザーIDを登録 ユーザーIDに紐づく情報が 更新されたのか毎日確認する
  28. Copyright © NIFTY Corporation All Rights Reserved. • 補助的なシステムかつ機能が少ないため、 ビジネスロジックがほぼ存在しない

    • システム自体が他のシステムを前提として存在する →2年以上の間ほぼ改修が入っていない →今後も変更される可能性は少ない 3. アーキテクチャに固執したケース
  29. Copyright © NIFTY Corporation All Rights Reserved. • 補助的なシステムかつ機能が少ないため、 ビジネスロジックがほぼ存在しない

    • システム自体が他のシステムを前提として存在する →2年以上の間ほぼ改修が入っていない →今後も変更される可能性は少ない レイヤードアーキテクチャは1次開発のコストが増加 →それに見合う恩恵(保守するためのコストの削減)を 十分に得られない 3. アーキテクチャに固執したケース
  30. Copyright © NIFTY Corporation All Rights Reserved. アーキテクチャの形式にこだわり 「このシステムは何のためにあるのか?」 が見えてなかった結果、1次開発で遠回りをした

    3. アーキテクチャに固執したケース このシステムは何のためにあるのか? →ビジネスルール、ビジネスロジックの深掘り ビジネスロジックを深掘りした結果に基づいて最適な アーキテクチャを選定することが必要。
  31. Copyright © NIFTY Corporation All Rights Reserved. チームが担当する複数のプロダクトでクリーンアーキテ クチャを元にしたリプレイス・運用を実施してきた 4.

    ビジネスロジック考慮不足のケース
  32. Copyright © NIFTY Corporation All Rights Reserved. 企画担当者 ユーザーの 過去の申込履歴を

    集計して、 解約したユーザーが 再申込したときの 傾向を知りたい 4. ビジネスロジック考慮不足のケース
  33. Copyright © NIFTY Corporation All Rights Reserved. ユーザーAの申込1 ・申込日 ・解約日

    ユーザーAの申込 ・初回申込日 ・最新の申込日 ・前回の解約日 ... ユーザーAの申込2 ・申込日 ・解約日 ユーザーAの申込3 ・申込日 ・解約日 集計しやすそうなのは? データ更新ごとの 履歴 4. ビジネスロジック考慮不足のケース
  34. Copyright © NIFTY Corporation All Rights Reserved. ユーザーAの申込1 ・申込日 ・解約日

    ユーザーAの申込 ・初回申込日 ・最新の申込日 ・前回の解約日 ... ユーザーAの申込2 ・申込日 ・解約日 ユーザーAの申込3 ・申込日 ・解約日 集計しやすそうなのは? データ更新ごとの 履歴 4. ビジネスロジック考慮不足のケース
  35. Copyright © NIFTY Corporation All Rights Reserved. ユーザーAの申込1 ・申込日 ・解約日

    ユーザーAの申込 ・初回申込日 ・最新の申込日 ・前回の解約日 ... ユーザーAの申込2 ・申込日 ・解約日 ユーザーAの申込3 ・申込日 ・解約日 結局開発チームが選んだのは・・・ データ更新ごとの 履歴 4. ビジネスロジック考慮不足のケース
  36. Copyright © NIFTY Corporation All Rights Reserved. ユーザーAの申込1 ・申込日 ・解約日

    ユーザーAの申込 ・初回申込日 ・最新の申込日 ・前回の解約日 ... ユーザーAの申込2 ・申込日 ・解約日 ユーザーAの申込3 ・申込日 ・解約日 結局開発チームが選んだのは・・・ データ更新ごとの 履歴 理由: 分からない 4. ビジネスロジック考慮不足のケース
  37. Copyright © NIFTY Corporation All Rights Reserved. ユーザーAの申込1 ・申込日 ・解約日

    ユーザーAの申込 ・初回申込日 ・最新の申込日 ・前回の解約日 ... ユーザーAの申込2 ・申込日 ・解約日 ユーザーAの申込3 ・申込日 ・解約日 結局開発チームが選んだのは・・・ データ更新ごとの 履歴 集計用に長大なSQLを 作成 →運用負荷の増大 4. ビジネスロジック考慮不足のケース
  38. Copyright © NIFTY Corporation All Rights Reserved. クリーンアーキテクチャ自体は正しく導入できていたが 一部のビジネスロジックはそこまで重視されていなかった →ビジネスロジックを深掘りしきれていない。

    →レポート利用者とのコミュニケーションが行われていない 4. ビジネスロジック考慮不足のケース
  39. Copyright © NIFTY Corporation All Rights Reserved. クリーンアーキテクチャ自体は正しく導入できていたが 一部のビジネスロジックはそこまで重視されていなかった →ビジネスロジックを深掘りしきれていない。

    →レポート利用者とのコミュニケーションが行われていない • レポートがしにくいドメイン設計に進んでしまった • 変更容易性も維持することができなくなった 4. ビジネスロジック考慮不足のケース
  40. 5. まとめ Copyright © NIFTY Corporation All Rights Reserved. •

    ビジネスロジックは クリーンアーキテクチャの中でも 最も重要でこだわる必要がある • ビジネスロジックをこだわった結果が システムの完成度、変更容易性、 コストの削減に直結する
  41. Copyright ©NIFTY Corporation All Rights Reserved. スクラムで クリーンアーキテクチャを 考える土壌

  42. 1. チームでの価値観の不一致 Copyright © NIFTY Corporation All Rights Reserved. •

    立ち上げの支援として参加 • 長期間に渡って運用される システムのため、クリーン アーキテクチャの考えを 取り入れた。 マイニフティ @nifty会員様向けのサポートアプリ • スクラムでのチーム開発を実施 XXXXXXX
  43. 1. チームでの価値観の不一致 Copyright © NIFTY Corporation All Rights Reserved. •

    支援メンバーはクリーンアーキテクチャは理解して いるがスクラム開発は初めて • 他のチームメンバーはスクラム開発経験は豊富だが、 クリーンアーキテクチャは初めて。
  44. 1. チームでの価値観の不一致 Copyright © NIFTY Corpora2on All Rights Reserved. 開発のスタンスをめぐって、スクラムメンバーと

    協調しきれない場面が出てしまった • 支援メンバーはクリーンアーキテクチャは理解して いるがスクラム開発は初めて • 他のチームメンバーはスクラム開発経験は豊富だが、 クリーンアーキテクチャは初めて。
  45. 1. チームでの価値観の不一致 Copyright © NIFTY Corpora2on All Rights Reserved. スクラムの目的

    価値を生み出す スプリントごとに ゴールを設定する クリーン アーキテクチャの目的 ソフトウェアの 変更容易性を維持し コストを最小限に 抑える
  46. 1. チームでの価値観の不一致 Copyright © NIFTY Corpora2on All Rights Reserved. スクラムの目的

    価値を生み出す スプリントごとに ゴールを設定する クリーン アーキテクチャの目的 ソフトウェアの 変更容易性を維持し コストを最小限に 抑える スクラムの進め方 ゴールの達成に集中。 成果物をレビューし 次のスプリントで改善 クリーン アーキテクチャの 進め方 ビジネスロジックの 深掘り→設計 →機能別に開発
  47. 1. チームでの価値観の不一致 Copyright © NIFTY Corporation All Rights Reserved. スクラムの目的

    価値を生み出す スプリントごとに ゴールを設定する クリーン アーキテクチャの目的 ソフトウェアの 変更容易性を維持し コストを最小限に 抑える ↔ アプローチの違いが 意見の相違につながった 完成させる ビジネスロジックの 深掘りだけは先にやる スクラムの進め方 ゴールの達成に集中。 成果物をレビューし 次のスプリントで改善 クリーン アーキテクチャの 進め方 ビジネスロジックの 深掘り→設計 →機能別に開発
  48. Copyright © NIFTY Corporation All Rights Reserved. • クリーンアーキテクチャを全てのメンバーが 理解している

    • スクラム開発を全てのメンバーが理解している • ステークホルダーとコミュニケーションが 取りやすい環境にある スクラム+クリーンアーキテクチャの 理想は? 2. 導入するときにやるべきこと
  49. Copyright © NIFTY Corporation All Rights Reserved. 1. ソースコードからの学習 •

    社内事例があれば、ソースコードを写経する • 紹介記事、GitHubなどで公開されているサンプルコード から学習する • The Clean Architectureに対して理解を深める 2. 導入するときにやるべきこと
  50. Copyright © NIFTY Corporation All Rights Reserved. 1. ソースコードからの学習 •

    社内事例があれば、ソースコードを写経する • 紹介記事、GitHubなどで公開されているサンプルコード から学習する • The Clean Architectureに対して理解を深める 2. 書籍での学習 • 学習したThe Clean Architectureに至るまでの変遷を知る • ビジネスロジックの深掘りなどの概念を学習 • クリーンアーキテクチャの本質的な理解 2. 導入するときにやるべきこと
  51. Copyright © NIFTY Corpora2on All Rights Reserved. 1. ソースコードからの学習 •

    社内事例があれば、ソースコードを写経する • 紹介記事、GitHubなどで公開されているサンプルコード から学習する • The Clean Architectureに対して理解を深める 2. 書籍での学習 • 学習したThe Clean Architectureに至るまでの変遷を知る • ビジネスロジックの深掘りなどの概念を学習 • クリーンアーキテクチャの本質的な理解 3. 実践 • 担当プロダクトに対してクリーンアーキテクチャを 当てはめる • ビジネスロジックについて議論し、ドメインを作成する 2. 導入するときにやるべきこと
  52. 3. マイニフティチームはクリーンアーキ テクチャについて今どう感じているか Copyright © NIFTY Corporation All Rights Reserved.

    チーム内で考えを 共通化できるので 意思疎通がしやすく みんなのコードが読み やすい ユニットテスト を導入しやすい
  53. Copyright © NIFTY Corpora2on All Rights Reserved. チーム内で考えを 共通化できるので 意思疎通がしやすく

    みんなのコードが読み やすい コードが 長くなりやすく、 小さな機能を 実装するのには やや冗長 ユニットテスト を導入しやすい 学習コストが 高い 3. マイニフティチームはクリーンアーキ テクチャについて今どう感じているか
  54. 4. まとめ Copyright © NIFTY Corporation All Rights Reserved. •

    スクラムとクリーンアーキテクチャは 目的も手法も違うが、それぞれのメリット を取り入れられれば強いチームになる • クリーンアーキテクチャを広めるためには 実践的な学習を取り入れると良い
  55. Copyright ©NIFTY Corpora2on All Rights Reserved. チームが成長するための 「指針」

  56. クリーンアーキテクチャから広がる世界 Copyright © NIFTY Corporation All Rights Reserved. 変更容易性の 維持

    運用コストを 抑える 深掘り された ビジネス ルール スクラムで クリーンア ーキテクチ ャを 考える土壌 レイヤード アーキテク チャ
  57. クリーンアーキテクチャから広がる世界 Copyright © NIFTY Corporation All Rights Reserved. 変更容易性の 維持

    運用コストを 抑える 深掘り された ビジネス ルール 技術 選定 テストに よる 品質維持 施策の 提案 スクラムで クリーンア ーキテクチ ャを 考える土壌 レイヤード アーキテク チャ プロダクト への 理解度向上 TDD
  58. クリーンアーキテクチャから広がる世界 Copyright © NIFTY Corpora2on All Rights Reserved. 変更容易性の 維持

    運用コストを 抑える 深掘り された ビジネス ルール 売上、 利益へ の貢献 チャレンジ 精神 技術 選定 テストに よる 品質維持 施策の 提案 チーム メンバー の成長 スクラムで クリーンア ーキテクチ ャを 考える土壌 レイヤード アーキテク チャ プロダクト への 理解度向上 TDD
  59. Copyright © NIFTY Corporation All Rights Reserved. 変更容易性の 維持 運用コストを

    抑える 深掘り された ビジネス ルール 売上、 利益へ の貢献 チャレンジ 精神 技術 選定 テストに よる 品質維持 施策の 提案 チーム メンバー の成長 スクラムで クリーンア ーキテクチ ャを 考える土壌 レイヤード アーキテク チャ プロダクト への 理解度向上 TDD クリーンアーキテクチャは さまざまな技術を取り入れる際の 「指針」 クリーンアーキテクチャは プロダクトの理解の始まりとなる クリーンアーキテクチャから始まる 技術の道のりが 今後も続いていく
  60. Copyright ©NIFTY Corporation All Rights Reserved. To Be Con)nued…