実装(3)
2024年2⽉15⽇
浅海智晴
クラウドアプリケーションのための
オブジェクト指向分析設計講座
第32回
作業分野
SimpleModeling2021
• オブジェクト指向分析設計での共通範囲
• UML/UP
• 本講座で使⽤するUMLプロファイル
• プロファイル:SimpleModeling2021 (SM2021)
• オブジェクト指向分析設計の基本からの拡張部を明確化
• アジャイル開発
• Communication
• Embrace Change
• Travel Light
• Scaling
• Component-Based Development
• クラウド・アプリケーション
• モデル駆動開発
SM2021
Travel Light
Embrace Change
Cloud
Model-Driven
Scaling
CBD
Testability
Serviceability
• ⾮機能要件
• Testability
• Serviceability
第1部 基本編の構成(1)
• 概論 [第1回]
• 開発プロセス [第2回]
• 基本モデル [第3回]
• 静的モデル(1) [第4回]
• 静的モデル(2) [第5回]
• 動的モデル [第6回]
• 協調モデル [第7回]
• 関数モデル [第8回]
• 物理モデル [第9回]
• 作業分野 [第10回]
• ビジネス・モデリング [第11回]
• 要求 [第12回]
• 要求/ユースケース [第13回]
• 要求/シナリオ [第14回]
• 分析 [第15回]
• 分析/コンポーネント分析 [第16回]
• 分析/イベント駆動 [第17回]
• 作業分野
• 設計 [第18回]
• 設計/アーキテクチャ設計 [第19回]
• 設計/コンポーネント設計(1) [第20回]
• 設計/コンポーネント設計(2) [第21回]
• 設計/コンポーネント設計(3) [第22回]
• 設計/ドメイン設計(1) [第23回]
• 設計/ドメイン設計(2) [第24回]
• 設計/ドメイン設計(3) [第25回]
• 設計/ドメイン設計(4) [第26回]
• 設計/ドメイン設計(5) [第27回]
• 設計/原理 [第28回]
• 設計/ UX/UI設計 [第29回]
• 実装(1) [第30回]
• 実装(2) [第31回]
• 実装(3) [第32回]
• テスト [第33回]
第1部 基本編の構成(2)
• アプリケーション・アーキテクチャ [第34回]
• ドメイン・モデル [第35回]
• アプリケーション・モデル [第36回]
• プレゼンテーション・モデル [第37回]
• ケーススタディ[第38回]
• 要求モデル [第39回]
• 分析モデル [第40回]
• 設計モデル [第41回]
• 実装 [第42回]
• テスト [第43回]
本講座のアプローチ
• オブジェクト指向分析設計の基本を確認
• UML + UP(Unified Process)
• CBD (Component-Based Development)
• 最新技術でアップデート
• クラウド・コンピューティング
• イベント駆動、分散・並列
• ビッグデータ、AI、IoT
• コンテナ
• 関数型
• OFP(Object-Functional Programming), Reactive Streams
• ルール, AI
• DevOps
• アジャイル開発
• DX (Digital Transformation)
第25回 アプリケーション・アーキテクチャ
第2回 開発プロセス
第9回 物理モデル
第11回 ビジネス・モデリング
第2部 クラウド・アプリケーション編
第21回 設計/ドメイン設計
第20回 設計/コンポーネント設計
第2部 クラウド・アプリケーション編
原理 (Principle)
• Agile Software Development [ASD]
• SRP (The Single Responsibility Principle)
• OCP (The Open-Close Principle)
• LSP (The Liskov Substitution Principle)
• …
• GRASP (General Responsibility Assignment Software Patterns or principles)
• Low Coupling
• High Cohesion
• …
• Writing Effective Use Cases [WEUC]
• Scope
• …
パターン (Pattern)
• Design Patterns [DP]
• Observer, Strategy, …
• Domain Driven Design [DDD]
• Ubiquitous Language, Intention-
Revealing Interfaces, …
• Analysis Patterns [AP]
• Party, Quantity, …
• Pattern-Oriented Software
Architecture [POSA]
• Layers, Pipes and Filters, …
• Patterns of Enterprise
Application Architecture [PEAA]
• Unit of Work, Data Transfer Object,
…
• Enterprise Integration Patterns
[EIP]
• Message Bus, Aggregator, …
• Patterns for Effective Use
Cases [PEUC]
• CompleteSingleGoal,
VerbPhraseName, …
• AntiPatterns [AnP]
• Stovepipe System, Analysis
Paralysis, …
内容
• CI/CDパイプライン
• マイクロサービス
• UI
• ドキュメント
CI/CDパイプライン
CI/CDパイプライン
• 例として以下の組み合わせで検討
• GitHub : ソース管理システム
• AWS : クラウド・プラットフォーム
• ビルド
• Sbt
• ソースコード整形
• Scalafmt
• 検証
• Scalafix
• テスト
• Scalatest
• Scalacheck
• 仕様書
• Scaladoc
第30回 実装(1)
CIパイプライン
CI/CDパイプライン
val scalaversion = "3.3.0"
inThisBuild(
List(
scalaVersion := scalaversion,
semanticdbEnabled := true,
semanticdbVersion := scalafixSemanticdb.revision
)
)
lazy val integration = (project in file("integration"))
.dependsOn(root)
.settings(
publish / skip := true,
scalacOptions ++= Seq(
"-deprecation",
"-Xfatal-warnings"
),
libraryDependencies ++= Seq(
),
scalafixOnCompile := true,
(Compile / compile) := (Compile / compile).
dependsOn(Compile / scalafmtCheck).value
)
build.sbt
lazy val root = project
.in(file("."))
.enablePlugins(JavaAppPackaging)
.enablePlugins(DockerPlugin)
.settings(
scalaVersion := scalaversion,
name := "tryout",
libraryDependencies ++= Seq(
"org.scalatest" %% "scalatest" % "3.2.17" % Test,
"org.scalatestplus" %% "scalacheck-1-17" % "3.2.17.0" % Test
)
)
build.sbt
version=2.5.2
.scalafmt.conf
rules = [
DisableSyntax
]
DisableSyntax.noVars=true
DisableSyntax.noNulls=true
.scalafix.conf
addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.9.16")
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.11.1")
addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.0")
project/plugins.sbt
マイクロサービス
マイクロサービス
• マイクロサービスとは:
• 1つのアプリケーションをビジネス機能に沿った複数の⼩さいサービス
を疎結合した集合体として構成するアーキテクチャ
• SOA( Service-oriented Architecture)の⼀種と考えられる
• ⽂脈
• ハードウェア性能の向上
• クラウド・プラットフォーム
• アジャイル開発
• 基盤技術
• CI/CDパイプライン
• CBD
論点
• 粒度
• Bounded Context [DDD]、SubSystem、Domain Object、Backlog Itemなど
• 粒度が⼩さくなると開発は⼤変になる
• 本講座ではBounded Context [DDD]、SubSystemを採⽤
• 技術
• 分散システム
• 必然的に分散システムになる
• 本質的に開発の難易度が上がる
• トランザクション
• マイクロサービス間でトランザクションの共⽤が難しい
• 補償処理が必要になる
• 実⾏コンテキスト
• ユーザー情報やセキュリティ情報などの共有に⼯夫が必要
マイクロサービスの前提
• マイクロサービスを機能させるためには、各種の前提を満たす
必要がある
• 開発プロセス
• アジャイル開発
• 開発組織
• ⼩規模、疎結合、多機能チームのネットワーク
• ソフトウェア・アーキテクチャ
• 疎結合、テスト可能(testable)、配備可能(deployable)
マイクロサービスの⻑所と短所
• ⻑所
• 可⽤性 (availability)
• 柔軟性 (resiliency)
• モジュール性 (modularity)
• 凝集性 (cohesion)
• 関⼼の分離 (separation of concern)
• 抽象性 (abstraction)
• 結合性 (coupling)
• 短所
• 開発の難易度が上がる
• 性能低減
• 開発効率低減
Microserviceとモデリング
アーキテクチャ
⽐較
Modular Monolith ?
Tapirによるマイクロサービス化
• Tapir
• 宣⾔的、型安全Webエンド・ポイント・ライブラリ
• 機能
• 関数型プログラミングによりHttp4s&cats-effect or ZIOといったよう
な関数合成が可能
• Akka HttpやJDK HTTP, gRPCといった様々な通信ライブラリと組み合わせるこ
とができる
• サーバー側、クライアント側の両⽅をサポート
• ドキュメントの⽣成
• OpenAPI, AsyncAPI, Json Schema
• ComponentをTapir&通信ライブラリ(e.g. Http4s)によってサー
ビス化/マイクロサービス化することができる
object EndpointDefs {
val greetingRouting: PublicEndpoint[String, Unit, String, Any] =
endpoint.in("hello" / path[String]("name")).out(stringBody)
}
EndpointDefs.scala
object Routing {
def helloLogic[F[_]: Monad](name: String): F[Either[Unit, String]] =
Monad[F].pure(_hello_logic(name))
private def _hello_logic(name: String): Either[Unit, String] = Right("OK")
val greeting = EndpointDefs.greetingRouting.serverLogic(helloLogic[IO](_))
val endpointsV1 = List(
greeting
)
}
Routing.scala
object Server extends IOApp {
def run(args: List[String]): IO[ExitCode] =
{
EmberServerBuilder.
default[IO].
withHost(ipv4"0.0.0.0").
withHttpApp(
Router(
"/" -> apiV1,
"/" -> docsAsHttp4sRoutes
).orNotFound
).
build.
useForever.
as(ExitCode.Success)
}
val apiDocs = SwaggerInterpreter().
fromEndpoints[IO](
Routing.endpointsV1.map(_.endpoint),
"docs",
"0.1.0-SNAPSHOT"
)
val docsAsHttp4sRoutes =
Http4sServerInterpreter[IO]().
toRoutes(apiDocs)
val apiV1 = Http4sServerInterpreter[IO]().
toRoutes(
Routing.endpointsV1
)
}
Server.scala
本講座のアプローチ
• CBDを軸に開発を進める
• マイクロサービス化の必要条件
• CI/CDパイプライン
• アジャイル開発
• ネットワーク型の開発組織
• マイクロサービス化の要件
• 可能性 (availability)
• 柔軟性 (resiliency)
SM2021
UI
UI
• マルチ・スクリーン
• Web
• スマート・フォン
• タブレット
• デスクトップ
• レスポンシブ・デザイン
• プラットフォーム
• Web
• SSR (Server Side Rendering)
• SPA (Single Page Application)
• iOS/Android
• デスクトップ
ユースケース駆動開発 第30回 実装(1)
再掲
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
本講座のアプローチ
• UIはプレゼンテーション層としてアプリケーション層、ドメイ
ン層と分離して独⽴した枠組みで開発を考える
• 開発プラットフォームの多様化
• 開発要員
• 開発ターゲット
• マルチスクリーン
• ユースケース
• 短いライフサイクル
• 仕様追加・変更
• 技術の進化
• アプリケーション層、ドメイン層をScala(OOAD+関数型)で頑
丈につくり、UIとはRESTで通信する
SM2021
ドキュメント
ドキュメント
• 仕様書
• マニュアル
仕様書
• 各作業分野での成果物(モデル)をまとめる
• ビジネス・モデリング
• 要求
• 分析
• 設計
• プログラムとの連動性
• 動く仕様書
• 仕様書の充実度を決める
• 完璧な仕様書を⽬指す ⇔ プログラムの補完
仕様書とプログラム
マニュアル
• リファレンス・マニュアル
• コンポーネントAPI、サービス・マイクロサービスAPI
• ユーザー・マニュアル
• ユースケースを元に作成
• 利⽤者の⽬的毎にソフトウェアを使ってユースケースの物語を実現す
るための具体的な⼿順を記述
• その他、必要に応じて
ユースケース駆動開発 第30回 実装(1)
再掲
本講座のアプローチ
• 無駄なドキュメント作成は極⼒減らす
• プログラムを正として、プログラムを補完する情報をまとめる
• モデルはソフトウェア開発の起点となればよい
• 動く仕様書を活⽤
• Scalatest
• モデルを⽂章で補完
• Why/Whatを明記
• 必要な説明⽂章を加える
• 施⼯図
• ソフトウェアの開発結果を今後の拡張、保守・運⽤の観点でモデルとしてま
とめておく
• リファレンス・マニュアルはプログラムから⾃動⽣成を⽬指す
• Scaladoc, Javadoc, Tapir
SM2021
Travel Light
まとめ
• CI/CDパイプラインの具体例
• マイクロサービス
• UI
• ドキュメント Travel Light
参考⽂献
• The Unified Modeling Language Reference
Manual, 2nd (Rumbaugh他, 2004)
• The Unified Modeling Language User Guide,
2nd (Booch他, 2004)
• The Unified Software Development Process
(Jacobson他, 1999)
• The Object Constraint Language, 2nd (Warmer
他, 2003)
• UML 2 and the Unified Process: Practical
Object-Oriented Analysis and Design (Arlow
他, 2005)
• OMG Unified Modeling Language Version 2.5
(OMG, 2015)
• 上流⼯程UMLモデリング (浅海, 2008)
• The Essentials of Modern Software
Engineering: Free the Practices from the
Method Prisons! (Jacobson他, 2019)
• Modern Software Engineering : Doing What
Works to Build Better Software Faster (Farley,
2021)
• Continuous Integration: Improving Software
Quality and Reducing Risk (Duvall他, 2007)
• Continuous Delivery: Reliable Software
Releases through Build, Test, and Deployment
Automation (Humble他, 2010)

More Related Content

PDF
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
PDF
ケーススタディ/実装 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第46回】
PDF
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
PDF
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
PDF
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
PDF
ドメイン・サブシステム 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第36回】
PDF
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
PDF
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
ケーススタディ/実装 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第46回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
ドメイン・サブシステム 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第36回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】

Similar to 実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】 (20)

PDF
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
PDF
要求モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第42回】
PDF
DSL駆動によるクラウド・アプリケーション開発
PDF
Cloud Native Component Framework 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第39回】
PDF
プレゼンテーション・サブシステム 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第38回】
PDF
アプリケーション・サブシステム 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第37回】
PDF
ケーススタディ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第40回】
PDF
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
PDF
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
PDF
scala+liftで遊ぼう
PDF
設計モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第45回】
PDF
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
PDF
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
PDF
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
PDF
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
PDF
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
PDF
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
PDF
Azure IoT Edge で Custom Vision
PDF
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
PDF
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
Monadic Programmingのススメ - Functional Reactive Programmingへのアプローチ
要求モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第42回】
DSL駆動によるクラウド・アプリケーション開発
Cloud Native Component Framework 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第39回】
プレゼンテーション・サブシステム 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第38回】
アプリケーション・サブシステム 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第37回】
ケーススタディ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第40回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
TypeScript ファースト ステップ (v.0.9 対応版) ~ Any browser. Any host. Any OS. Open Sourc...
scala+liftで遊ぼう
設計モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第45回】
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
Object-Functional Analysis and Design : 次世代モデリングパラダイムへの道標
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
Azure IoT Edge で Custom Vision
Visual Studio 2012 Web 開発 ~ One ASP.NET から TypeScript まで ~
分析モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第44回】
Ad

More from Tomoharu ASAMI (11)

PDF
ケーススタディ/テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第47回】
PDF
要求モデル/BDD 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第43回】
PDF
ビジネス・モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第41回】
PDF
Cloud Native CBD 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第35回】
PDF
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
PDF
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
PDF
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
PDF
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
PDF
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
PDF
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
PDF
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
ケーススタディ/テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第47回】
要求モデル/BDD 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第43回】
ビジネス・モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第41回】
Cloud Native CBD 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第35回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
Ad

実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】