Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
そろそろ軽率に クリーンアーキテクチャ(な思考) の話がしたくて / i want to ta...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
にー兄さん
January 22, 2023
Programming
300
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
そろそろ軽率に クリーンアーキテクチャ(な思考) の話がしたくて / i want to talk about a think of clean architecture thoughtlessly
にー兄さん
January 22, 2023
More Decks by にー兄さん
See All by にー兄さん
『Ground Truth: How We Create Geometrically Accurate Reconstructions (Niantic Spatial Blog)』 を読む / read Ground Truth: How We Create Geometrically Accurate Reconstructions
drumath2237
0
53
この時代にOSS開発に向き合ってみる / face the oss development in this era
drumath2237
0
41
プログラマの職能が代替可能になりつつあるこの時代でプログラムと向き合う修行を積む / dedicating myself to the discipline of programming
drumath2237
0
90
個人的3D Gaussian Splattingニュースをご紹介 / sharing 3d gaussian splatting news
drumath2237
0
560
Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk
drumath2237
1
670
XRエンジニアの視点から XRのイマと社会実装の実現について考える / thinking-about-xr-popularization
drumath2237
0
84
軽率にプログラミング言語のシンタックスについて考えてみよう / lets-think-about-programming-lang-syntax
drumath2237
0
110
エンジニアが軽率に趣味から始める、OSS貢献を軸とした個人活動 / oss-contribution-as-a-hoby-project
drumath2237
0
90
Babylon.js 8.0のアプデ情報を 軽率にキャッチアップ / catch-up-babylonjs-8
drumath2237
0
430
Other Decks in Programming
See All in Programming
OSもどきOS
arkw
0
570
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6k
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
340
スマートグラスで並列バイブコーディング
hyshu
0
140
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
260
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
140
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
500
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.1k
Contextとはなにか
chiroruxx
1
330
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
12k
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
200
AIだと陥りがちなJakarta EE最新技術への移行時の落とし穴と解決策
tnagao7
0
110
Featured
See All Featured
Navigating Weather and Climate Data
rabernat
0
220
How to build a perfect <img>
jonoalderson
1
5.7k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Practical Orchestrator
shlominoach
191
11k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
940
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
160
The Curious Case for Waylosing
cassininazir
1
390
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
430
Transcript
そろそろ軽率に クリーンアーキテクチャ(な思考) の話がしたくて IwakenLab設計座談会 にー兄さん(@ninisan_drumath)
発表資料は公開します👍 スクショ等のSNS共有OKです📸
にー兄さん(@ninisan_drumath) 自称Unity・ARエンジニア ロケーションベースAR / Unity / WebAR / Babylon.js /
Azure Kinect 最新技術を使ったデモンストレーションが好き - 筑波大学 情報科学類 - 株式会社ホロラボ アルバイト - Microsoft 学生アンバサダー - Iwaken Lab
アジェンダ - はじめに - ”ソフト”ウェアについて考える - 安定性の議論 - Unityと結婚するな! -
おわりに
はじめに
本発表のゴール 変更に柔軟なソフトウェア開発の考え方を理解する Clean Architecture本を読む足掛かりを作る
本発表のターゲット - (Unity開発者) - 参加者にUnity経験者が多いため便宜上 - 設計原則への理解がある / 理解にチャレンジしている -
大規模ソフトウェア開発に興味がある - (クリーン)アーキテクチャという言葉は知ってる
所感 CAの概念を理解するのはeasyではない 普遍的なソフトウェア開発の知識であるため抽象度高め OOPやSOLID原則の理解の上にある あえて「あの図」は出さないことに(雑談フェーズで出すかも) 「あの図」から生まれる誤解を10分で解くのは難しいため 加えて実現するのも結構難しい(という理解をしている) CAは理想形にすぎないが、理想形を知ることはとても重要である 根拠のある妥協をしよう
諸注意・免責 私自身は大規模開発の経験は少ないため、「頭でっかち」な部分があります 実際の現場では適切にアーキテクチャを選択する必要がありますが 本発表ではあくまで「理想論」という受け止め方をしてください マサカリは研がない・投げない・振り回さない 本発表内容によって被った損害・損失については一切の責任を負いかねます。 ご了承ください。
”ソフト”ウェアについて考える
何がソフトウェアを「ソフト」たらしめるのか
何がソフトウェアを「ソフト」たらしめるのか 変更の柔軟性 ハードウェアは容易に変更できない ソフトウェアは容易に変更できる
なんで変更するのか、そもそも変更とは何か 理由・モチベ - 新機能の追加の要望 - バグの修正 - ライブラリのアップデート - リファクタリング
- パフォーマンス向上 内容 - ページ(UI)の追加 - 採用ライブラリの変更 - 新規デバイスの対応実装 - データベース設計の変更 変更の理由や内容は様々
長く続くソフトウェアの運用 ソフトウェアは生き物である(生まれ、成長し、死ぬ) 寿命を長くするためには長期的なメンテナンスが不可欠 しかしソフトウェアは機能を追加すればするほど メンテナンスコストが上がっていく 機能間で無駄な依存関係がある →一つの変更理由でいくつも機能変更が生じる →避けたい事態 設計によって、変更に強い”ソフト”ウェアを作ろう!
安定性の議論
プログラムの基本は入力と出力 プログラムの基本形は 入力を受け取り出力を返す 大きなプログラムになっても 入出力の集合になっている 例えばユーザの入力を受け取 り、画面に出力したりデータベー スに出力したり
内部的には複数のプログラムを経由することになる
<疑問> プログラムの全部がまんべんなく 「ソフト」であるべきなのか?
A. 柔軟な部分とそうでない部分があってよい プログラムのすべてが変更される可能性は極めて低い (それはもはや別サービス) つまりビジネスロジックは変更されにくい 逆に変更されやすい部分 - ボタンの色や形 - ページやメニューの種類
- 対応デバイス - 外部API - DBMSの種類
安定部分と柔軟部分は分けて考える ビジネスロジック 見た目やデータストア 安定 柔軟 上位モジュール 下位モジュール 方針 詳細
一応依存方向について復習
処理の流れと依存方向は? new A(); class A { public A() { new
B(); } } class B { public B() { new C(); } } class C { }
処理の流れ 依存方向 A C B AがBを呼ぶ BがCを呼ぶ A C B
AがBに依存 BがCに依存
処理の流れと依存方向について <愚直な実装> 一番最後の出力ロジックに ドメインロジックが依存する 下位モジュールは不安定だから依 存したくない DIPにのっとり、依存方向を逆転さ せる
依存方向 A C B AがBに依存 BがCに依存 依存方向 A C B
AがBに依存 CがICを実装 B名前空間に依存 IC DIP BがICに依存
実線:依存方向 点線:処理の流れ
詳細が方針に 依存するようにせよ (逆はダメ)
モジュールの境界で 依存方向を適切に制御 せよ
Unityと結婚するな (最後に小噺的な)
詳細について知ろう ここでいうUnityとは詳細のこと RailsもASP.NETもReact/Vueも MySQLもFirebaseもSupabaseも HoloLensもQuest Proも
詳細と結婚しないメリット 1. 詳細を差し替えられる 2. 詳細の意思決定を遅延できる
しかし、あなたは詳細は求婚されている フレームワークは依存を迫ってくる 「私の抽象クラスを継承して♡」 渋い顔をしながら断るか、適切な根拠を持って結婚するか
おわりに
まとめ クリーンアーキテクチャの考え方 - 詳細が方針に依存するように - そのためにモジュール境界で適切に依存関係を制御せよ これをどこまでしっかりやるか 見極められるようになりたい
参考文献 Clean Architecture 達人に学ぶソフトウェアの構造と設計 https://www.amazon.co.jp/Clean-Architecture-%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6%E3%82%BD% E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E6%A7%8B%E9%80%A0%E3%81%A8%E8%A8 %AD%E8%A8%88-Robert-C-Martin/dp/4048930656 世界一わかりやすい Clean Architecture
https://www.nuits.jp/entry/easiest-clean-architecture-2019-09 クリーンアーキテクチャ完全に理解した https://gist.github.com/mpppk/609d592f25cab9312654b39f1b357c60 実装クリーンアーキテクチャ https://qiita.com/nrslib/items/a5f902c4defc83bd46b8 clean architecture と asmdef - 【年末だよ】Unity お・と・なのLT大会 2019 https://www.youtube.com/watch?v=PdYeUu2-gOU Clean Architecture for Unity https://learning.unity3d.jp/4021/