Submit Search
Upload
ソフトウェア設計のすすめ
•
129 likes
•
39,753 views
Yoshimura Soichiro
Follow
社内LTでソフトウェア設計のすゝめを比較的新しいエンジニア向けにしたので、その資料を公開します。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 51
Download now
Download to read offline
Recommended
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Observableで非同期処理
Observableで非同期処理
torisoup
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
Unity Technologies Japan K.K.
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
例外設計における大罪
例外設計における大罪
Takuto Wada
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
Unity Technologies Japan K.K.
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
Recommended
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Observableで非同期処理
Observableで非同期処理
torisoup
Unityではじめるオープンワールド制作 エンジニア編
Unityではじめるオープンワールド制作 エンジニア編
Unity Technologies Japan K.K.
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
例外設計における大罪
例外設計における大罪
Takuto Wada
【Unity道場】新しいPrefabワークフロー入門
【Unity道場】新しいPrefabワークフロー入門
Unity Technologies Japan K.K.
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
【CNDT2022】SIerで実践!クラウドネイティブを普及させる取り組み
【CNDT2022】SIerで実践!クラウドネイティブを普及させる取り組み
Yuta Shimada
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
インタフェース完全に理解した
インタフェース完全に理解した
torisoup
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
Yoshiki Shibukawa
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
UniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターンをやってみた
torisoup
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
Ito Takayuki
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発
Takafumi ONAKA
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
DeNA
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
4 データ間の距離と類似度
4 データ間の距離と類似度
Seiichi Uchida
サービス開発における工程
サービス開発における工程
Hidetoshi Mori
It業界の優良企業の見つけ方 20140502 黒田
It業界の優良企業の見つけ方 20140502 黒田
Yusuke Kuroda
More Related Content
What's hot
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
Junya Hayashi
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
【CNDT2022】SIerで実践!クラウドネイティブを普及させる取り組み
【CNDT2022】SIerで実践!クラウドネイティブを普及させる取り組み
Yuta Shimada
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
インタフェース完全に理解した
インタフェース完全に理解した
torisoup
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
Yoshiki Shibukawa
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
UniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターンをやってみた
torisoup
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
Ito Takayuki
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発
Takafumi ONAKA
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
DeNA
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
Takayuki Shimizukawa
4 データ間の距離と類似度
4 データ間の距離と類似度
Seiichi Uchida
What's hot
(20)
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
メタプログラミングって何だろう
メタプログラミングって何だろう
PostgreSQLアンチパターン
PostgreSQLアンチパターン
【CNDT2022】SIerで実践!クラウドネイティブを普及させる取り組み
【CNDT2022】SIerで実践!クラウドネイティブを普及させる取り組み
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
インタフェース完全に理解した
インタフェース完全に理解した
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
UniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターンをやってみた
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
4 データ間の距離と類似度
4 データ間の距離と類似度
Similar to ソフトウェア設計のすすめ
サービス開発における工程
サービス開発における工程
Hidetoshi Mori
It業界の優良企業の見つけ方 20140502 黒田
It業界の優良企業の見つけ方 20140502 黒田
Yusuke Kuroda
レガシーシステム再生のアンチパターン
レガシーシステム再生のアンチパターン
Kent Ishizawa
Ms retail update ra 20191030
Ms retail update ra 20191030
Microsoft Azure Japan
ReactでCMSを作ったときにハマったこと
ReactでCMSを作ったときにハマったこと
kazuki matsumura
1)空気を読む家』のこれまでの取り組み
1)空気を読む家』のこれまでの取り組み
aitc_jp
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PC Cluster Consortium
Mizukiryu refactering-20110821
Mizukiryu refactering-20110821
Mizuki Yamanaka
鹿駆動
鹿駆動
Shinichi Kozake
リクルートにおけるPaaS活用事例
リクルートにおけるPaaS活用事例
Recruit Technologies
Techlion vol8 yusuke #techlion
Techlion vol8 yusuke #techlion
Yusuke Yamamoto
13_B_5 Who is a architect?
13_B_5 Who is a architect?
Atsushi Fukui
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
Takashi Uemura
レスポンシブ対応 をサポートするプラグイン
レスポンシブ対応 をサポートするプラグイン
Kawaji Masaki
基調講演「データのグループウェア化」
基調講演「データのグループウェア化」
Cybozucommunity
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
masashi takehara
第11回SIA例会プレゼン資料
第11回SIA例会プレゼン資料
Tae Yoshida
モバイルビジネスの動向
モバイルビジネスの動向
Hidetoshi Mori
20140829 山形でJAWS-UGをやって困った2つのこと
20140829 山形でJAWS-UGをやって困った2つのこと
Seiji Akatsuka
Final present
Final present
Loc Huynh
Similar to ソフトウェア設計のすすめ
(20)
サービス開発における工程
サービス開発における工程
It業界の優良企業の見つけ方 20140502 黒田
It業界の優良企業の見つけ方 20140502 黒田
レガシーシステム再生のアンチパターン
レガシーシステム再生のアンチパターン
Ms retail update ra 20191030
Ms retail update ra 20191030
ReactでCMSを作ったときにハマったこと
ReactでCMSを作ったときにハマったこと
1)空気を読む家』のこれまでの取り組み
1)空気を読む家』のこれまでの取り組み
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
Mizukiryu refactering-20110821
Mizukiryu refactering-20110821
鹿駆動
鹿駆動
リクルートにおけるPaaS活用事例
リクルートにおけるPaaS活用事例
Techlion vol8 yusuke #techlion
Techlion vol8 yusuke #techlion
13_B_5 Who is a architect?
13_B_5 Who is a architect?
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
20121124 学生セミナー「基礎からわかる! IT業界とプログラミング」
レスポンシブ対応 をサポートするプラグイン
レスポンシブ対応 をサポートするプラグイン
基調講演「データのグループウェア化」
基調講演「データのグループウェア化」
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
[ESM_CM セミナー]小さく作って大いに役立つスマートフォンアプリ(CYCLONE)公開用
第11回SIA例会プレゼン資料
第11回SIA例会プレゼン資料
モバイルビジネスの動向
モバイルビジネスの動向
20140829 山形でJAWS-UGをやって困った2つのこと
20140829 山形でJAWS-UGをやって困った2つのこと
Final present
Final present
More from Yoshimura Soichiro
FirebaseでN高生証明botを作ってみた
FirebaseでN高生証明botを作ってみた
Yoshimura Soichiro
N高等学校でやってるプログラミング
N高等学校でやってるプログラミング
Yoshimura Soichiro
失敗の話
失敗の話
Yoshimura Soichiro
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
Yoshimura Soichiro
Obsのプラグイン作ってみた
Obsのプラグイン作ってみた
Yoshimura Soichiro
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Yoshimura Soichiro
チームの目標への柔軟な対応
チームの目標への柔軟な対応
Yoshimura Soichiro
20121126 Solr@ニコニコ生放送
20121126 Solr@ニコニコ生放送
Yoshimura Soichiro
私とインクス
私とインクス
Yoshimura Soichiro
More from Yoshimura Soichiro
(9)
FirebaseでN高生証明botを作ってみた
FirebaseでN高生証明botを作ってみた
N高等学校でやってるプログラミング
N高等学校でやってるプログラミング
失敗の話
失敗の話
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
Obsのプラグイン作ってみた
Obsのプラグイン作ってみた
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
Developers Summit 2014 「Play2/Scalaでドメイン駆動設計を利用した大規模Webアプリケーションのスクラム開発の勘所」
チームの目標への柔軟な対応
チームの目標への柔軟な対応
20121126 Solr@ニコニコ生放送
20121126 Solr@ニコニコ生放送
私とインクス
私とインクス
Recently uploaded
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
Atomu Hidaka
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
Shota Ito
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
osamut
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
furutsuka
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
Recently uploaded
(9)
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
ソフトウェア設計のすすめ
1.
ソフトウェア設計のすゝめ 株式会社ドワンゴ 吉村総一郎
(@sifue)
2.
ソフトウェア設計を なぜするのか?
3.
そもそも設計って 必要なの?
4.
プロトタイピングしながら作って いくなら必要ないんじゃないの?
5.
そうじゃない場合もある
6.
例えばどんな時か 複雑な要件を扱わなくてはならない時 考慮の抜け漏れのしやい複雑な業務用件
無停止メンテナンスなどの運用 耐障害性 拡張性 多くのシステムと連携
7.
複雑な要件を持つシステムは、 建築物で言えば高層ビルのようなもの 膨大な建築法
電気 ガス 空調 間取りの使い勝手 (トイレの数?)
8.
複雑な要件の考慮が抜けている場合には 大きなコストを払うことになることもある
9.
犬小屋をプロトタイピングで作って それを拡張、改修し続ければ高層ビルになるか?
10.
ならない 当初犬小屋で良かったものが要求の変更で 高層ビルが求められる悲劇がそこにはあるが...
11.
できるのはハウルの動く城
12.
致命的な問題にぶち当たれば作り直しが必要 ある日突然考慮漏れの要件にぶち当たってシステム停止に陥ることも
13.
ただ逆に要件の衝突が起こらないような シンプルな要件のプロダクトなら プロトタイピングを利用した
インクリメントな開発はかなり有効
14.
とはいえ複雑そうなものは 設計を考えよう
15.
でも突然ソフトウェア設計しろと言わ れても何をするかよくわからない…
16.
そんな方におすすめの第一歩
17.
図を書いてみよう
18.
図といっても 書き方がわからない…
19.
そんなあなたに おすすめの記法
20.
UML
21.
UMLとは 統一モデリング言語 (Unified
Modeling Language)という、1997年 に選定された世界的に利用 できるソフトウェアのため の設計図の書き方 現在は、UML 2.4.1が最新 であり、13種類の図の書き 方を利用することができる
22.
UMLがない場合の図は どんな感じか?
23.
家計簿アプリの設計の例 変動費 月次集計サービス
支出 固定費 実は同じものを表しているのに、記法が違うために四角がど ういう意味で、丸がどういう意味でとか、緑の線があれで、 青い線があれとかを毎回説明しなくてはいけない
24.
つらい 設計レビューをする前に全員が図の記法を理解する ところから始まる。設計レビューに途中からやって
きた人が図の記法がわからない...。新たにjoinした メンバーも資料を見て意味がわからない。
25.
UMLはそういう問題を 解決してくれます!
26.
どんな図があるのか?よく使うだろう5つを紹介 ユースケース図: 要件の構造を表現
コンポーネント図: システム構成を表現 パッケージ図: パッケージの構成を表現 クラス図: クラスの関連を表現 アクティビティ図: フローチャートのようなもの
27.
家計簿アプリの設計 ユースケース図
28.
家計簿アプリの設計 コンポーネント図
29.
家計簿アプリの設計 パッケージ図
30.
家計簿アプリの設計 クラス図
31.
家計簿アプリの設計 アクティビティ図
32.
こんなふうに記述できます
33.
図はわかってけど 何で書けば良いの?
34.
おすすめのUMLモデリングツール Gliffy Astah
Community PlantUML
35.
Gliffy Confluenceのプラグイン 結構きれい
図が大きくなると重い 制約が緩めでUML以外の記 法もできる クラス図の例
36.
Astah Community MacとWinで動くJava製のデ
スクトップアプリ ページに添付すると Confluenceで図を表示もで きる UMLに違反してる図は書き にくいクラス図の例
37.
PlantUML テキストベースでUML書け る(<|--
が継承とか) 最近流行ってる Confluenceでも記述可能 GUIのサポートないので UMLの仕様を知っている 必要があるクラス図の例
38.
以上紹介したツールを使ってソフ トウェアの設計や設計レビューを やっていきましょう!
39.
おすすめ本 UMLの本というより総合的なソフトウェア開発の本
40.
設計のやり方はわかったけ ど、具体的に何するの?
41.
設計の目的って何?
42.
設計とは、 要求に対して、狙った要件を設定で きるようにすること。正解はない。
43.
よく出てくる設計ノウハウ システム構成をレイヤー化する/しない モジュール化する/しない
モジュールをレイヤー化する/しない SOLID原則を守る/守らない
44.
システム構成をレイヤー化する/しない 多層アーキテクチャ レイヤごとは疎結合にする
右は3層+LBの例 レイヤ毎に再起動更新できる レイヤごとで台数を増やし負荷をコ ントロールできる レイヤが増えると管理コストは増え る
45.
モジュール化する/しない 汎用サブモジュールをくくり出 せ、重複が減って保守コストが
下がる モジュールごとで人を割り当て るので更新衝突が少なくなる モジュール化することで開発コ ストは増える
46.
モジュールをレイヤー化する/しない DDDのレイヤー化アーキテク チャの例
ビジネスロジック(domain層) がapplication層やui層のフ レームワークのVerUP等の変更 をうけない 依存関係の強制を守るために依 存関係の逆転則とかを使わなく てはいけないなど高コスト
47.
SOLID原則を守る/守らない 以下は、コストと再利用性のトレードオフとなる 単一責務の原則:
いろいろやるクラスを作らない オープンクローズドの原則: 状態の変更からは守り、クラス の自体の拡張を提供する リスコフの置換原則: 継承は意味として親と子の交換可能で あるようなクラス設計にする 依存関係逆転の原則: インターフェースを使ってレイヤ間の 依存関係を一方向にする インターフェースの分離の原則: 内部実装を隠ぺいする
48.
依存関係逆転の原則の例 インターフェースを作ってそれを依存先で実装する
49.
適切な設計の目的を果たすための 色々なパターンがあるのでぜひ探してみてください マーチン・ファウラーのリファクタリング
GoFのデザインパターン PoEAA エリック・エヴァンスのドメイン駆動設計 Lean architecture Microservices
50.
要件漏れ/衝突が起こらないよう、開発者 の狙い通りに開発していけるようしっかり レビューしながら考えていきましょう!
51.
以上 ご清聴ありがとうございました
Download now