Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
実装パターンとテストパターンの紹介と組み合わせ方
Search
suzuki masayuki
September 19, 2023
Programming
270
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
実装パターンとテストパターンの紹介と組み合わせ方
suzuki masayuki
September 19, 2023
More Decks by suzuki masayuki
See All by suzuki masayuki
AIでの開発を楽にするために もう1つAIを使う
suzukimar
0
39
なぜ書き込みDBと 読み取りDBを分けるのか?
suzukimar
0
260
緊張をしちゃう人用_のLTのやりかた
suzukimar
1
140
UseCaseクラスを使って FatControllerやFatModelにしない
suzukimar
3
720
ChatGPT にいる 9人の生成AIロールとの日常
suzukimar
1
460
CQRS/ESのクラスとシステムフロー ~ RailsでフルスクラッチでCQRSESを組んで みたことから得た学び~
suzukimar
0
550
バイブコーディング_TDD.pdf
suzukimar
0
230
RailsでCQRS/ESをやってみたきづき
suzukimar
2
2.5k
ドメイン駆動設計の考えをもとに競合優位性や アウトカムを得る
suzukimar
0
300
Other Decks in Programming
See All in Programming
Intent as Code
shoppingjaws
6
1.1k
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
570
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
770
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.9k
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.3k
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.1k
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
140
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.1k
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
170
Verilogで学ぶCPU自作入門.pdf
uyuki234
3
2k
新卒PdEのリアル
ryu1013
1
510
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
260
Featured
See All Featured
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Crafting Experiences
bethany
1
350
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Amusing Abliteration
ianozsvald
1
310
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Embracing the Ebb and Flow
colly
88
5.2k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Darren the Foodie - Storyboard
khoart
PRO
4
3.9k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
Transcript
実装パターンとテストパターンの 紹介と組み合わせ方
© 2023 • Azit Inc. 株式会社Azitでラストワンマイル配送サービスの CREW Expressの開発をしているプログラマ 書いた記事 安全にプロダクト品質を改善できる!ほぼ100%のテストカバレッジがある世界
2022年に開発チームのコミュニケーションを改善するためにおこなったこと 理解するのが難しいシステムをドメインモデリングによって生産性をあげた話 (Qiitaのミノ駆動さん QiitaEngineerFesta_設計 のコンテスト受賞) プライベート活動 女子プロレス団体の広報活動 (登録者数が5万人をこえるYouTube チャンネルの運営) 自己紹介 鈴木まー 主な 役割 Rai lsにお ける DDDの 導入 リ ファク タリン グ 社 内勉強会な どを 含めたチームビルデ ィン グ 技術情報発 信 技術的負債が発生しないよ うにする
© 2023 • Azit Inc. LearningDDDの社内勉強会をした中で図をもとにDDDだけ に限らない実装パターンやテスト戦略などの習得に役に立 ちましたのでそれを紹介します 今日話すこと
© 2023 • Azit Inc. 役に立った図
© 2023 • Azit Inc. 今回はDDDをやっていなくても役にたつ ビジネスロジック実装とテスト戦略について話します 今回扱う範囲
© 2023 • Azit Inc. ビジネスロジック の実装
© 2023 • Azit Inc. トランザクションスクリプト アクティブレコード ドメインモデル イベント駆動 ビジネスロジックの実装
© 2023 • Azit Inc. トランザクションスクリプト 単純な業務ロジックを一つの手続きで完結させる設計パターン CLI, AWS Lamdaなど
アクティブレコード ドメインモデル イベント駆動 ビジネスロジックの実装
© 2023 • Azit Inc. トランザクションスクリプト 単純な業務ロジックを一つの手続きで完結させる設計パターン CLI, AWS Lamdaなど
アクティブレコード クラスをテーブルとして扱い、インスタンスをテーブルの行としてあつかう設計パターン RailsのActiveRecordなどのORMの実装時に利用される ドメインモデル イベント駆動 ビジネスロジックの実装
© 2023 • Azit Inc. トランザクションスクリプト 単純な業務ロジックを一つの手続きで完結させる設計パターン CLI, AWS Lamdaなど
アクティブレコード クラスをテーブルとして扱い、インスタンスをテーブルの行としてあつかう設計パターン RailsのActiveRecordなどのORMの実装時に利用される ドメインモデル アクティブレコードでは実装するのが難しい複雑なビジネスロジックとビジネスルールをドメインのクラスで実装する イベント駆動 ビジネスロジックの実装
© 2023 • Azit Inc. トランザクションスクリプト 単純な業務ロジックを一つの手続きで完結させる設計パターン CLI, AWS Lamdaなど
アクティブレコード クラスをテーブルとして扱い、インスタンスをテーブルの行としてあつかう設計パターン RailsのActiveRecordなどのORMの実装時に利用される ドメインモデル アクティブレコードでは実装するのが難しい複雑なビジネスロジックとビジネスルールをドメインのクラスで実装する イベント駆動 ドメインモデルなどを利用して外部からのイベントに応じて動作するビジネスロジックを実装 するパターン ビジネスロジックの実装
© 2023 • Azit Inc. 単純な業務ロジックを一つの手続きで完結させるための設計パターンです。このパターンは特 に、データ構造がシンプルで処理が少ない場合や、小規模なプロジェクトに適しています。具 体的な使用例としては、CLIツールやAWS Lambdaのようなサーバーレス関数があります。 この設計パターンの主な利点は、そのシンプリシティと効率性です。短期間での開発が必要な
場合や、複雑なビジネスロジックが不要な場合には、トランザクションスクリプトが非常に有 用です。また、このパターンは「グルーコード」としてもよく用いられ、異なるシステムや サービスを繋げる際にも役立ちます。 ただし、ビジネスロジックが複雑になると、設計が破綻します。そのような場合は、レイヤー アーキテクチャにリファクタをしたほうがいいです トランザクションスクリプト
© 2023 • Azit Inc. この設計パターンでは、クラスをデータベースのテーブルとして扱い、そのインスタンスを テーブルの行として扱います。CRUD操作は、このオブジェクト自体が行います。それにより DBを隠蔽して実装をすることができます アクティブレコードにバリデーションや関連付けを実装してRailsなどのActiveRecordとして 実装をしています
ただアクティブレコードに複雑なビジネスロジックやビジネスルールなどのドメイン知識も実 装をすると肥大化してしまうため、ドメインモデルクラスの実装を考えたほうがいいです アクティブレコード
© 2023 • Azit Inc. ビジネスロジックとビジネスルールなどのドメイン特有のことを実装しています。 内部にORMなどを利用することで、DB層(永続化層)を外部のクラスに移譲をすることでドメ インの実装に専念をすることができます。 DDDにおけるエンティティに該当していて、このクラスにバリューオブジェクトのインスタン
スをもたせる実装が一般的な実装スタイルです。 ただ、クラス関係が複雑になるのでドメインモデルを作成するかアクティブレコードで完結す るかのトレードオフを気にしたほうがいいです。 ドメインモデル
© 2023 • Azit Inc. イベント駆動とは、ユーザーが何かをしたり、システムが何かを感知したりしたときに確実に 動作することを保証する設計パターンです。例えば、銀行でお金を引き出すとき、システムは その動きに反応していろいろな作業をします。これは、何がどこで起きたかをしっかり記録し たい場合や、後で確認したい場合に便利です。 この方法は、いろいろなマイクロサービスが連携して動く場合によく使われます。
ただ、データベースのトランザクション処理について考える必要があるため実装難易度と実装 にかかる時間が多くなってしまいます。 そのため、確実に実行することを保証する実装をする場合だけこの実装方法を利用するのが良 いです イベント駆動
© 2023 • Azit Inc. テスト戦略
© 2023 • Azit Inc. このプレゼンテーションでは、統合テストを「リクエストスペック」とし て扱います。リクエストスペックは、特にRailsなどのWebフレームワーク でよく用いられる考え方で、HTTPリクエストとレスポンスをテストしま す。 これにより、APIやWebアプリケーションのエンドポイントが期待通りに動
作するかを確認します。 その前にここでいう統合テストについて
© 2023 • Azit Inc. テストピラミッド テスティングダイアモンド リバーステストピラミッド テスト戦略
テストピラミッド ユニットテストが最も多く、統合テスト、E2Eテストが次第に少なくなる テスト戦略 テスティングダイアモンド リバーステストピラミッド テスト戦略
© 2023 • Azit Inc. テストピラミッド ユニットテストが最も多く、統合テスト、E2Eテストが次第に少なくなる テスト戦略 テスティングダイアモンド ユニットテストと統合テストが多く、E2Eテストが少なめで、特に統合テ
ストに重点を置くテスト戦略。 リバーステストピラミッド テスト戦略
© 2023 • Azit Inc. テストピラミッド ユニットテストが最も多く、統合テスト、E2Eテストが次第に少なくなる テスト戦略 テスティングダイアモンド ユニットテストと統合テストが多く、E2Eテストが少なめで、特に統合テ
ストに重点を置くテスト戦略。 リバーステストピラミッド E2Eテストが最も多く、統合テスト、ユニットテストが次第に少なくな る、特定の状況のみで有用なテスト戦略。 テスト戦略
© 2023 • Azit Inc. コンテンツ タイトル
© 2023 • Azit Inc. ユニットテストが最も多く、統合テスト、エンドツーエンド(E2E)テストが次第に少なくなります。ア リケーションの開発にも役に立ちますが、一般的なAPIの開発にも有効ですが特にイベント駆動のような複 雑な実装にも有効 ユニットテストが多いことで高速なフィードバックを提供し、E2Eテストが少ないことでテストの実行時 とコストを削減します。
テストピラミッド ユニットテスト E2E 統合テスト
© 2023 • Azit Inc. E2Eテストが最も多く、統合テストとユニットテストが次第に少なくなります。特に、CLIツールのようなイ ンターフェースがあまり変更しない、またはシンプルなアプリケーションのみで有用です。 トランザクションスクリプトは単純な業務ロジックを一つの手続きで完結させるため、全体としての動作確 認が重要です。そのため、E2Eテストが多いリバーステストピラミッドは、このようなシンプルなアプリ ケーションの全体テストに適しています。
リバーステストピラミッド E2E 統合テスト ユニット テスト
© 2023 • Azit Inc. ユニットテストと統合テストが多く、E2Eテストが少なめです。特に、一般的なAPIを実装す るときに統合テストを書くのは有用です。この戦略のメリットは、統合テストが多いことでシ ステムの各部分がうまく連携しているかを確認しやすく、高速なフィードバックが得られる点 です。さらに、統合テストが多いため、シンプルなAPIの実装ではユニットテストを省略する ことも可能です。
テスティングダイアモンド ユニットテスト E2E 統合テスト
© 2023 • Azit Inc. まとめ
© 2023 • Azit Inc. 弊社は様々な技術的話題に詳しいひとや興味を持っている 人を現在の技術スタック関係なく絶賛採用募集中です WE ARE HIRING!