SlideShare a Scribd company logo
1 of 46
Download to read offline
DDDとクリーンアーキテク
チャでサーバーアプリケー
ションを作っている話
#jjug_ccc #ccc_a8
JJUG CCC 2018 Spring
2018/05/26
自己紹介
• 株式会社ジャストシステム 福嶋 航
• Twitter @fukushiw
• Java歴約20年、JavaでWebサービス作っています
• #Java100 本ノックの人
https://github.com/JustSystems/java-100practices
このセッションについて
• 現在進行中の開発プロジェクトでの試行内容を共
有いたします
• 未リリースのWebサービスのため、サービス名称や
サービスの内容は明らかにしていません
• DDD(ドメイン駆動設計)やクリーンアーキテクチャを
採用しているつもりですが、間違いがあるかもしれま
せん
• 試行錯誤過程にあるため、ぜひセッション後や懇親
会でぜひ情報交換させてください
セッションの流れ
1.DDDやクリーンアーキテクチャを
採用した理由
2.設計段階で行ったこと
3.実装前に準備したこと
4.実装してみてわかったこと
5.やってよかったことと変えたいこと
6.まとめ
セッションの流れ
1.DDDやクリーンアーキテクチャを
採用した理由
2.設計段階で行ったこと
3.実装前に準備したこと
4.実装してみてわかったこと
5.やってよかったことと変えたいこと
6.まとめ
Java
っぽい
ところ
1
DDDやクリーン
アーキテクチャを
採用した理由
突貫工事はうまくいかない
• コンセプトは決まった
• 主要な機能について、仕様概要は決まった
• コア機能のいくつかはパーツが存在していたので
それらを使って動くものが早く見たい
• 機能仕様を作りながらプロトタイピングを進めた
• いろいろ押し押しになりプロトタイプがいつの間に
かプロダクションコードになりそうになった
このプログラムはリリースされなかった。
いや、リリースできなかった。
当時のシステム構成図(模式図)
THE WEB SERVER
コア機能 外部連携
THE RDB
キャッシュ
キャッシュキャッシュ
もろもろの反省と対策
過去の
失敗
対策
サーバから全データをクライア
ントにダウンロードして処理
全コンポーネントが外部連携
先のデータモデルと強く結合
ビジネスロジックの主体となる
コンポーネントが不在
• 異常なトラフィック量
• クライアント処理負荷増
• 外部連携先の仕様変更
の反映が全コンポーネント
に影響
• 各コンポーネントはコアロ
ジックに集中できず変換
処理を負担
必要なデータを必要なだけ
処理する
データ統合を廃止し各コン
ポーネントで独立してDBアク
セスする
ビジネスロジックを独立したコ
ンポーネントとする
ドメイン駆動設計+クリーンアーキテクチャを導入
※社内での説明資料をほぼコピーしています
2
設計段階で
行ったこと
知識をつける
設計の順番
ドメイン駆動設計の進め方は顧客業務(ドメイン)を分析し、それをどう解決(境界
づけられたコンテキスト)するかを決めることである。これを実践するために以下の順序
で分析・設計を進めた。
(このサービス)とは何であるか(エレベーターピッチ)を定義
機能仕様・利用シナリオを定義
ロバストネス分析
境界づけられたコンテキストの抽出
コンテキストマップの作成
非機能
要件も
定義
※社内での説明資料をほぼコピーしています
設計の順番
ドメイン駆動設計の進め方は顧客業務(ドメイン)を分析し、それをどう解決(境界
づけられたコンテキスト)するかを決めることである。これを実践するために以下の順序
で分析・設計を進めた。
(このサービス)とは何であるか(エレベーターピッチ)を定義
機能仕様・利用シナリオを定義
ロバストネス分析
境界づけられたコンテキストの抽出
コンテキストマップの作成
非機能
要件も
定義
※社内での説明資料をほぼコピーしています
次のページから
このあたりを説明
ロバストネス分析
• ロバストネス分析は、ユースケースのように文章
で記述された要求から分析レベルのオブジェクト
を見つけ、適切な単位にまとめることができるもの
です。
https://www.ogis-ri.co.jp/otc/hiroba/technical/RobustnessAnalysis/RA1/
より引用
ロバストネス分析をどう使ったか
• あらかじめユースケースシナリオを作成しておく
• シナリオを満たす機能をどう作ったらよいか考える
• バウンダリ、エンティティ、コントロールでそれを表
現する
バウンダリ・・・ 外部とのインタフェース。○○画面とか、cronなどを割り当てた。
エンティティ・・・ 管理するデータ。RDBなどに保存するものなどを割り当てた。
コントロール・・・ 処理。ユーザー認証とか、値の取得などを割り当てた。
ロバストネス分析の成果物(一部)
• ノートに手書き
• 書いては消し
• 二人で分析し
良さそうな方を
採用
コンテキストマップ
• ロバストネス図で出てきた機能について、似たも
のを集めて「境界づけられたコンテキスト」を規定
• 書いて→直して→書いて→直して
• コンテキスト間の関係について慎重に判断した
• パートナーシップ
• 顧客/供給者
• 順応者
(コア)
(業務)
(メイン1)
(業務)
(メイン2)
(業務)
(メイン3)
(業務)
(メイン4-1)
(メイン4-2)
(業務)
(サブ2)
(業務) (サブ3)
(業務)
(サブ1-1) (サブ1-2)
(サブ1-3)
(業務)
(サブ4-1) (サブ4-2)
(業務)
ユーザー
管理
ユーザー管理
ログ
監視
(事業)
↔ : パートナーシップ
→ → → : 顧客/供給者
→ : 順応者(下流側に腐敗防止層を用意)
汎用サブドメイン
支援サブドメイン
コアドメイン
境界づけられたコンテキスト
新システム構成(模式図)
UI
コア機能 外部連携
RDB
キャッシュ
キャッシュ
キャッシュ
主要機能3 RDB
主要機能2 RDB
主要機能1 RDB
サブ機能3
サブ機能2
サブ機能1
サブ機能6
サブ機能5
サブ機能4
RDB
キャッシュ
キャッシュ
キャッシュ
RDB
キャッシュ
サブ機能7 RDB
各機能(コンテキスト)は
それぞれDockerコンテナとして動作
(複数配置しALBで分散)し、
REST APIでやりとり
:
One more thing...
ユビキタス言語
• コンテキストごとに独自の用語を制定
• システムとしてはコンテキスト間で用語を統一し
た方がわかりやすく、同じ用語を別コンテキストで
別の意味で使う、ということはしていない
• プログラム上での命名も決めた→これは好評
3
実装前に
準備したこと
ルール
• Gitリポジトリの運用ルール
• コーディング規約
• クリーンアーキテクチャでの実装
• パッケージの分け方
• リポジトリの実装
• REST API規約
• REST APIのエラー応答に使用する例外クラス
• ログレベル
• 利用するサードパーティソフトウェア
など
ルール
• Gitリポジトリの運用ルール
• コーディング規約
• クリーンアーキテクチャでの実装
• パッケージの分け方
• リポジトリの実装
• REST API規約
• REST APIのエラー応答に使用する例外クラス
• ログレベル
• 利用するサードパーティソフトウェア
など
次のページから
このあたりを説明
コーディング規約
• 自社コーディング規約に準ずる
• Oracle のコード規約
http://www.oracle.com/technetwork/art
icles/javase/codeconvtoc-136057.html
+独自条項いくつか
• ソースコードレビュー観点(「テストにここ出ます」)
• 特に重要な4つの心構え「別の人が保守できるの
か」「今後の拡張性はあるか」「無駄はないか」「影
響範囲が広すぎないか」をベースに言語共通29項
目+Java固有11項目をWikiに記載
ソースコードレビュー観点(抜粋1)
• 基本
• APIの使い方が妥当か(目的に即したAPIをAPI
の仕様通りに使用しているか)
• 数値でよいところを文字列で処理していないか。
• 適切な型を使うべき
• 保守性
• 必要十分なコメントが書けているか。
• 実装の理由や背景をコメントに詳しく書く(コードの内容
そのものよりもコードで表現できないものを残す)
• クラスやメソッド・関数のドキュメントもきちんと書く(例外
もぬかりなく)
ソースコードレビュー観点(抜粋2)
• 安全性
• 渡されてきた引数は使用する前にバリデーションされ
ているか。
• マルチスレッドでアクセスされる変数の値の書き換え
はアトミックな代入が保証されているか。
• キャッシュを利用する場合に、作りっぱなしではなくラ
イフサイクルが考慮されているか。
• ストリームが閉じられているか。ExceptionやError
が起きても大丈夫か。
• メソッドの戻り値が不必要にnullになっていないか?
(呼び出し元でnullになりうる意識があるか)
各コンテキスト内のアーキテクチャ
パッケージ構成
com.justsystems.(サービス名)
.(コンテキスト名)
.interfaces
.controller
.presenter
.gateway
.usecases
.domains
.model
.(集約名)
.utils
Controller, Translator
Presenter, Translator
Gateway, Translator
Usecase
Entity, ValueObject,
Service, Repository
特別なパッケージ
• com.justsystems.(サービス名).pl
• 公開された言語 (Published Language)
• このパッケージ配下に (コンテキスト名) のパッケージを
作り、そのコンテキストの入出力データを定義
• 各コンテキストは呼び出し先の pl 配下のクラスを使用
• com.justsystems.(サービス名).library
• ビジネスロジックに全く関与しない、複数コンテキスト間
で共有する価値のあるライブラリ
リポジトリの実装
• RDBへはSpring Data JPA (Hibernate)で
アクセス
• Domainではインタフェースだけ定義して
Gatewayで実処理
Usecase Domain Gateway
class
Hoge
Usecase
interface
Hoge
Repository
interface
JpaHoge
Repository
class
Hoge
Repository
Impl
現在
絶賛コーディング・
テスト中
4
実装してみて
わかったこと
DDD/クリーンアーキテクチャの恩恵
• 関心事に集中できる
• @Transactional で考えないといけない範囲が狭
くてイイ!
• 用語が統一されているので外部仕様からコードまで
すっきりとつながる!
• 処理の流れがパターン化されているので追いや
すい
• 道を外れているのも気づきやすく、コードレビューで
フィードバック
変換の嵐...
• ControllerのTranslator
• PL→ドメインオブジェクトの変換
• GatewayのTranslator
• ドメインオブジェクト→PLの変換
• PL→ドメインオブジェクトの変換
• ドメインオブジェクト→RDB用エンティティの変換
• RDB用エンティティ→ドメインオブジェクトの変換
• PresenterのTranslator
• ドメインオブジェクト→PLの変換
変換の嵐:図にするとこんな感じ
Controller Gateway Presenter
Translator Translator Translator Translator
他のコンテキストやストレージとの間で変換が走る
Domain Object
PL PL
PL Entity
変換の嵐:より正確にはこんな感じ
変換が必要なオブジェクトごとにTranslatorを準備
Controller Gateway Presenter
Translator Translator Translator Translator
Domain Object
PL PL
PL Entity
Translator
Translator
Translator
Translator
Translator
Translator
Translator
Translator
Translator
Translator
Translator
Translator
Translator
Translator
Translator
Translator
規約で決めたこと以外はみんなバラバラ
• REST API通信の実装
• RestTemplate を使用することは決めていた
• 各コンテキストでそれぞれ RestTemplate を使った
通信ロジックが生まれそうになった(リトライ処理等)
→早くできた人のものを共通ライブラリ化 (library)
• サービスのビジネスロジックに全く依存しない部分を基底ク
ラスで定義
• 各コンテキストでサブクラスを作成し必要なところだけオー
バーライド(通信先のコンフィグなど)
nullチェックの方法もバラバラ
• @lombok.NonNull
• Objects.requireNonNull(argument)
• if (argument == null) {
throw new IllegalArgumentException(...);
}
これは統一をあきらめた
(適材適所)
本当にバラバラ
• @lombok.RequiredArgsConstructor vs
@lombok.Builder
• 中にはコンストラクタも @Builder もあるクラスも…
• static な Translator vs
DI可能なTranslator
• Stream API vs `for`
• java.text.SimpleDateFormat vs
java.time.format.DateTimeFormatter
• これはさすがに DateTimeFormatter にそろえた
5
やってみてよかった
ことと変えたいこと
よかった:モノリスからの解放
• 各担当者が自分の担当部分のビジネスロジック
に集中できる
• RDB/キャッシュ分離で責任範囲が明確
• 他コンテキストのRDBには一切アクセスできない
• データの重複保持もない
よかった:新技術への挑戦
• Docker
• AWS ECS
• AWS Fargate にしたかったがまだ日本に来ておら
ずレイテンシの観点から断念
• GitLab CI
and more
改善の余地あり:ルールの徹底
• キックオフ時に説明会を開催
• こういうアーキテクチャで~
• こういうコーディング規約で~
• 質問は控えめ
(ゼロではなかった)
• そしてテストに出すといったところがアウト
• マージリクエストへのコメントに同じことをよく書いているの
でATOKが覚える
規約の浸透方法や内容に課題があるのかもしれない
6
まとめ
まとめ
• 過去の失敗からDDDやクリーンアーキテクチャを
採用するに至った
• シナリオ→ロバストネス分析→コンテキストマップ
• ユビキタス言語でプログラム上の命名も定義
• 規約・レビュー観点などルールを決めた
• 決めていないところはバラバラになった
• アーキテクチャをパッケージに落とし込んだ
• 新しいことに挑戦できたことはよかった
• ルールの徹底方法は改善の余地あり

More Related Content

What's hot

世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計増田 亨
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと増田 亨
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話Koichiro Matsuoka
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し増田 亨
 
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜Yoshiki Nakagawa
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方増田 亨
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?kwatch
 
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3  ドメイン駆動設計 戦略的設計3週連続DDDその3  ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計増田 亨
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する増田 亨
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめpospome
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門増田 亨
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門増田 亨
 

What's hot (20)

世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
ドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったことドメイン駆動設計に15年取り組んでわかったこと
ドメイン駆動設計に15年取り組んでわかったこと
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話DDD x CQRS   更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
 
3週連続DDDその3 ドメイン駆動設計 戦略的設計
3週連続DDDその3  ドメイン駆動設計 戦略的設計3週連続DDDその3  ドメイン駆動設計 戦略的設計
3週連続DDDその3 ドメイン駆動設計 戦略的設計
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
 
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 

Similar to DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話

2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化Issei Hiraoka
 
20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructurePreferred Networks
 
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】DeNA
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1Y Watanabe
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話JustSystems Corporation
 
Container deployment on Azure
Container deployment on AzureContainer deployment on Azure
Container deployment on AzureTsukasa Kato
 
Raybarcodeイベント参加者管理でも使い方ガイド
Raybarcodeイベント参加者管理でも使い方ガイドRaybarcodeイベント参加者管理でも使い方ガイド
Raybarcodeイベント参加者管理でも使い方ガイドGrapeCity, inc.
 
20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したことAmazon Web Services Japan
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~normalian
 
Azure Functions あれこれ
Azure Functions あれこれAzure Functions あれこれ
Azure Functions あれこれYasuaki Matsuda
 
RayBarcode イベント参加者デモ使い方ガイド
RayBarcode イベント参加者デモ使い方ガイドRayBarcode イベント参加者デモ使い方ガイド
RayBarcode イベント参加者デモ使い方ガイドGrapeCity, inc.
 
QualityとDeliveryを両立させるために僕らがやったこと
QualityとDeliveryを両立させるために僕らがやったことQualityとDeliveryを両立させるために僕らがやったこと
QualityとDeliveryを両立させるために僕らがやったことTakeshi Sekiguchi
 
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践日本マイクロソフト株式会社
 
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~normalian
 
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのか
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのかDeveloper's summit 2021 [19-D-5]なぜ今、ローコードなのか
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのかTetsuo Ajima
 
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Appsグリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & AppsGoogle Cloud Platform - Japan
 
私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由gree_tech
 
GraphQLはどんな時に使うか
GraphQLはどんな時に使うかGraphQLはどんな時に使うか
GraphQLはどんな時に使うかYutaka Tachibana
 
機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編Daiyu Hatakeyama
 
Azure DevOps で始めるスタートダッシュ
Azure DevOps で始めるスタートダッシュAzure DevOps で始めるスタートダッシュ
Azure DevOps で始めるスタートダッシュYasuaki Matsuda
 

Similar to DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話 (20)

2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化2021/03/19 パブリッククラウドを活かす運用プロセス自動化
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
 
20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure20180723 PFNの研究基盤 / PFN research system infrastructure
20180723 PFNの研究基盤 / PFN research system infrastructure
 
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
 
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
Container deployment on Azure
Container deployment on AzureContainer deployment on Azure
Container deployment on Azure
 
Raybarcodeイベント参加者管理でも使い方ガイド
Raybarcodeイベント参加者管理でも使い方ガイドRaybarcodeイベント参加者管理でも使い方ガイド
Raybarcodeイベント参加者管理でも使い方ガイド
 
20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと
 
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
わんくま同盟名古屋勉強会18回目 ASP.NET MVC3を利用したHTML5な画面開発~クラウドも有るよ!~
 
Azure Functions あれこれ
Azure Functions あれこれAzure Functions あれこれ
Azure Functions あれこれ
 
RayBarcode イベント参加者デモ使い方ガイド
RayBarcode イベント参加者デモ使い方ガイドRayBarcode イベント参加者デモ使い方ガイド
RayBarcode イベント参加者デモ使い方ガイド
 
QualityとDeliveryを両立させるために僕らがやったこと
QualityとDeliveryを両立させるために僕らがやったことQualityとDeliveryを両立させるために僕らがやったこと
QualityとDeliveryを両立させるために僕らがやったこと
 
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
【de:code 2020】 Azure Kubernetes Service と Azure DevOps による GitOps の実践
 
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
プログラミング生放送第7回 比べてみようPaaSクラウド~Azure VS GAE~
 
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのか
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのかDeveloper's summit 2021 [19-D-5]なぜ今、ローコードなのか
Developer's summit 2021 [19-D-5]なぜ今、ローコードなのか
 
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Appsグリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
 
私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由
 
GraphQLはどんな時に使うか
GraphQLはどんな時に使うかGraphQLはどんな時に使うか
GraphQLはどんな時に使うか
 
機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編機械学習 / Deep Learning 大全 (5) Tool編
機械学習 / Deep Learning 大全 (5) Tool編
 
Azure DevOps で始めるスタートダッシュ
Azure DevOps で始めるスタートダッシュAzure DevOps で始めるスタートダッシュ
Azure DevOps で始めるスタートダッシュ
 

More from JustSystems Corporation

「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumiJustSystems Corporation
 
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~JustSystems Corporation
 
現役23名のPM:タイプ別マネジメントパターン
現役23名のPM:タイプ別マネジメントパターン現役23名のPM:タイプ別マネジメントパターン
現役23名のPM:タイプ別マネジメントパターンJustSystems Corporation
 
JavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみたJavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみたJustSystems Corporation
 
JustTechTalk#11_スマイルゼミ顧客満足度への貢献
JustTechTalk#11_スマイルゼミ顧客満足度への貢献JustTechTalk#11_スマイルゼミ顧客満足度への貢献
JustTechTalk#11_スマイルゼミ顧客満足度への貢献JustSystems Corporation
 
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~JustSystems Corporation
 
最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjugJustSystems Corporation
 
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~JustSystems Corporation
 
JustTechTalk#10 React開発における自動テスト実践
JustTechTalk#10 React開発における自動テスト実践JustTechTalk#10 React開発における自動テスト実践
JustTechTalk#10 React開発における自動テスト実践JustSystems Corporation
 
JustTechTalk#10windowsアプリでのテスト自動化事例
JustTechTalk#10windowsアプリでのテスト自動化事例JustTechTalk#10windowsアプリでのテスト自動化事例
JustTechTalk#10windowsアプリでのテスト自動化事例JustSystems Corporation
 
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~JustSystems Corporation
 
AWS運用における最適パターンの徹底活用
AWS運用における最適パターンの徹底活用AWS運用における最適パターンの徹底活用
AWS運用における最適パターンの徹底活用JustSystems Corporation
 
ジャストシステムのDevOps実例 今後の取り組み
ジャストシステムのDevOps実例 今後の取り組みジャストシステムのDevOps実例 今後の取り組み
ジャストシステムのDevOps実例 今後の取り組みJustSystems Corporation
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.JustSystems Corporation
 
CSSレイアウトでなぜ失敗するか?
CSSレイアウトでなぜ失敗するか?CSSレイアウトでなぜ失敗するか?
CSSレイアウトでなぜ失敗するか?JustSystems Corporation
 
Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化JustSystems Corporation
 
TypeScriptの大規模開発への適用
TypeScriptの大規模開発への適用TypeScriptの大規模開発への適用
TypeScriptの大規模開発への適用JustSystems Corporation
 
UX実現に向けた社内の取り組みについて-訴求ファーストによる商品開発-
UX実現に向けた社内の取り組みについて-訴求ファーストによる商品開発-UX実現に向けた社内の取り組みについて-訴求ファーストによる商品開発-
UX実現に向けた社内の取り組みについて-訴求ファーストによる商品開発-JustSystems Corporation
 
「訴求ファースト」と「こだわり駆動開発」~教育、医療、もの書き市場で戦うプロダクトマネージャーの考え方~
「訴求ファースト」と「こだわり駆動開発」~教育、医療、もの書き市場で戦うプロダクトマネージャーの考え方~「訴求ファースト」と「こだわり駆動開発」~教育、医療、もの書き市場で戦うプロダクトマネージャーの考え方~
「訴求ファースト」と「こだわり駆動開発」~教育、医療、もの書き市場で戦うプロダクトマネージャーの考え方~JustSystems Corporation
 

More from JustSystems Corporation (20)

「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
 
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
 
現役23名のPM:タイプ別マネジメントパターン
現役23名のPM:タイプ別マネジメントパターン現役23名のPM:タイプ別マネジメントパターン
現役23名のPM:タイプ別マネジメントパターン
 
JavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみたJavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみた
 
JustTechTalk#11_スマイルゼミ顧客満足度への貢献
JustTechTalk#11_スマイルゼミ顧客満足度への貢献JustTechTalk#11_スマイルゼミ顧客満足度への貢献
JustTechTalk#11_スマイルゼミ顧客満足度への貢献
 
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
 
最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug
 
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
 
JustTechTalk#10 React開発における自動テスト実践
JustTechTalk#10 React開発における自動テスト実践JustTechTalk#10 React開発における自動テスト実践
JustTechTalk#10 React開発における自動テスト実践
 
JustTechTalk#10windowsアプリでのテスト自動化事例
JustTechTalk#10windowsアプリでのテスト自動化事例JustTechTalk#10windowsアプリでのテスト自動化事例
JustTechTalk#10windowsアプリでのテスト自動化事例
 
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
 
AWS運用における最適パターンの徹底活用
AWS運用における最適パターンの徹底活用AWS運用における最適パターンの徹底活用
AWS運用における最適パターンの徹底活用
 
ジャストシステムのDevOps実例 今後の取り組み
ジャストシステムのDevOps実例 今後の取り組みジャストシステムのDevOps実例 今後の取り組み
ジャストシステムのDevOps実例 今後の取り組み
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
 
CSSレイアウトでなぜ失敗するか?
CSSレイアウトでなぜ失敗するか?CSSレイアウトでなぜ失敗するか?
CSSレイアウトでなぜ失敗するか?
 
Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化Selenium WebDriver + python で E2Eテスト自動化
Selenium WebDriver + python で E2Eテスト自動化
 
TypeScriptの大規模開発への適用
TypeScriptの大規模開発への適用TypeScriptの大規模開発への適用
TypeScriptの大規模開発への適用
 
UX実現に向けた社内の取り組みについて-訴求ファーストによる商品開発-
UX実現に向けた社内の取り組みについて-訴求ファーストによる商品開発-UX実現に向けた社内の取り組みについて-訴求ファーストによる商品開発-
UX実現に向けた社内の取り組みについて-訴求ファーストによる商品開発-
 
「訴求ファースト」と「こだわり駆動開発」~教育、医療、もの書き市場で戦うプロダクトマネージャーの考え方~
「訴求ファースト」と「こだわり駆動開発」~教育、医療、もの書き市場で戦うプロダクトマネージャーの考え方~「訴求ファースト」と「こだわり駆動開発」~教育、医療、もの書き市場で戦うプロダクトマネージャーの考え方~
「訴求ファースト」と「こだわり駆動開発」~教育、医療、もの書き市場で戦うプロダクトマネージャーの考え方~
 

DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話