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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
にー兄さん
January 22, 2023
Programming
310
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 にー兄さん
ついにAuraも登場したのでJetpack XR SDKについて今一度語りたい / i wanna talk about xreal aura
drumath2237
0
31
『Ground Truth: How We Create Geometrically Accurate Reconstructions (Niantic Spatial Blog)』 を読む / read Ground Truth: How We Create Geometrically Accurate Reconstructions
drumath2237
0
72
この時代にOSS開発に向き合ってみる / face the oss development in this era
drumath2237
0
55
プログラマの職能が代替可能になりつつあるこの時代でプログラムと向き合う修行を積む / dedicating myself to the discipline of programming
drumath2237
0
100
個人的3D Gaussian Splattingニュースをご紹介 / sharing 3d gaussian splatting news
drumath2237
0
630
Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk
drumath2237
1
820
XRエンジニアの視点から XRのイマと社会実装の実現について考える / thinking-about-xr-popularization
drumath2237
0
94
軽率にプログラミング言語のシンタックスについて考えてみよう / lets-think-about-programming-lang-syntax
drumath2237
0
140
エンジニアが軽率に趣味から始める、OSS貢献を軸とした個人活動 / oss-contribution-as-a-hoby-project
drumath2237
0
110
Other Decks in Programming
See All in Programming
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
360
Go を使い始めて 2 ヶ月の学び / My first two months with Go
contour_gara
0
350
What's New in Android 2026
veronikapj
0
270
源内ハンズオン概要編
hideg
0
200
FastAPI の並行処理モデルを完全に理解する
hoto17296
7
2.4k
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
220
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
2
370
Dockerfile CMD for Node.js
grazie1999
0
110
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
680
FDEが実現するAI駆動経営の現在地
gonta
2
290
Pythonの実行はどこまで賢くなったのか? CPythonとPyPyから見る最適化のしくみ
curekoshimizu
3
1.2k
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.9k
Featured
See All Featured
Between Models and Reality
mayunak
4
400
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Faster Mobile Websites
deanohume
310
32k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Exploring anti-patterns in Rails
aemeredith
3
470
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.4k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
Visualization
eitanlees
152
17k
Statistics for Hackers
jakevdp
799
230k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.4k
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/