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
Kotlin Multiplatformで考えるクリーンアーキテクチャ
Search
horitamon
July 08, 2024
Programming
380
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Kotlin Multiplatformで考えるクリーンアーキテクチャ
https://sansan.connpass.com/event/320810/
horitamon
July 08, 2024
More Decks by horitamon
See All by horitamon
スタートアップ企業のフェーズ転換期を乗り越えるためのリアーキテクト戦略
horitamon
0
610
ActでGithub Actionsの動作確認をする
horitamon
0
1.5k
Bitrise Pipelinesを使って リリース作業を効率化する
horitamon
0
77
コルーチンを使って処理の見通しをよくする
horitamon
2
2.4k
解決むずかったバグ3選
horitamon
0
520
「OK Google」でアプリの機能を呼び出してみる
horitamon
0
1.7k
Other Decks in Programming
See All in Programming
R8 の設定見直しでアプリサイズ削減
andpad
0
210
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.3k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
210
Domain-Driven Transformation
hschwentner
2
2.3k
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
130
sbt 2.0: takeoff
eed3si9n
0
150
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
パーソナライズPodcastを作った話
repunit11
0
130
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
0
400
速習iPhone Duo対応
yuukiw00w
2
980
外から家のPCの電源入れたい!をPHPで解決する
kawashimo0
1
130
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
Featured
See All Featured
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
570
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
520
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
280
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
From π to Pie charts
rasagy
1
400
Navigating Team Friction
lara
192
16k
First, design no harm
axbom
PRO
2
1.3k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
330
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
620
Design in an AI World
tapps
1
350
Transcript
Kotlin Multiplatformで 考える クリーンアーキテクチャ horitamon • 2024 年 7月 8日
After Kotlin Fest 2024 LT Night @Sansan
自己紹介 堀 多聞 - horitamon 2020/9〜2024/5 株式会社Voicy Androidエンジニア7年目 登壇: ・DroidKaigi
2022 ・iOSDC 2023 X: @horitamon
https://iosdc.jp/2024/
本日の流れ Kotlin Multiplatformの 導入で考える クリーンアーキテクチャ 1. クリーンアーキテクチャとは 結局何なのか? 2. Kotlin
Multiplatform(KMP)の 概要 3. 課題をクリーンアーキテクチャの 考え方で解決する
今年話そうとしてました https://fortee.jp/kotlin-fest-2024/proposal/c8ec4c4c-206c-4f18-b5a5-7552c49877f7 https://fortee.jp/kotlin-fest-2024/proposal/c0b2c96d-5d09-4612-ba53-3e9ea22e5a5b
「クリーンアーキテクチャ」 知ってますか?
None
None
私はこう思っていました。 • この図は「クリーンアーキテクチャ」という 特定のアーキテクチャを説明する図である • 「クリーンアーキテクチャ」を実現することとは、 この図のようにクラスを定義して 実装していくことである
勘違いしてました。
本文の図の説明を読んでみると… これらのすべてのアーキテクチャを単一の実行可能なアイデア に統合したものである → 複数のアーキテクチャの共通項を示しているだけ! 図は共通項を示している
同じ章でこうも言ってる したがって、この4つ以外にも必要なものはあるだろう。 この4つ以外に認めないというルールはない。 → 4つに分けることが「クリーンアーキテクチャ」を 実現することではない!
ではこの本は 何を言っているんだろう ※予防線を張りますが私の感想です
「ビジネス」より 「手段」は不安定
例えば、名刺を管理する事業だと…
最初は棚で管理するところから初まり… 保存する 取り出す
スーパー名刺管理アドバイザー提供事業や… 預ける 受け取る
PCで使えるツールになったりするかも 写真保存 画面で確認
「どう実現するか」が変化している 写真保存 画面で確認
「手段」は不安定である • ビジネスを実現する手段は多様で、頻繁に変化する • コンサル事業かもしれないし、SaaS事業かもしれない • ソフトウェアとして提供することに固まっても ライブラリはよく更新されるし、よく入れ替えるし UIもよく変わる •
これら手段の変更の影響を ビジネスが受けないようにしたい
「ビジネス」に「手段」が 依存するようにしよう
名刺を管理する事業でいう「ビジネス」は…
名刺の情報を預かり、それを確認できること 名刺情報を預かる 名刺情報を確認する
どういった手段でも提供価値は変わらない 名刺情報を預かる 名刺情報を確認する
サービス目線では手段を意識しないし 名刺情報を預かる 名刺情報を確認する
手段は提供価値を意識して実装する 名刺情報を預かる 名刺情報を確認する
このinterfaceを定義して、それに依存しよう 名刺情報を預かる 名刺情報を確認する
None
名刺情報を預かる 名刺情報を確認する
名刺情報を預かる 名刺情報を確認する
内側の概念に、外側から依存する • 一番中心をビジネスとして実現したい概念とする • 実現したいことを実現するための 詳細な手段が外側の概念 • 詳細な手段はビジネスが何をしたいのかを知るが、 ビジネスはどう実現するのかの詳細を知らない •
この関係性をきれいに実現すると 変更に強く、テストがしやすいソフトになる このルールを一貫して守ろうねという話
とてもわかりやすい説明・資料 • 世界一わかりやすいClean Architecture - nuits.jp blog • 擬人化で完全に理解するクリーンアーキテクチャ -
Speaker Deck • クリーンアーキテクチャ(The Clean Architecture翻訳) | blog.tai2.net
Kotlin Multiplatformとは?
iOS/Webでも動かせるKotlin FW https://www.jetbrains.com/ja-jp/kotlin-multiplatform/
プラットフォームごとに 処理が違うときは?
例えば… • デバイス情報を取得する • ハードウェア(カメラ、センサー、認証など)を 操作する • サードパーティライブラリを使用する →プラットフォームごとに処理が異なる部分を 書き分けたい
expect / actual https://www.jetbrains.com/help/kotlin-multiplatform-dev/multiplatform-connect-to-apis.html#expected-and-actual...
実装例 https://www.jetbrains.com/help/kotlin-multiplatform-dev/multiplatform-connect-to-apis.html#expected-and-actual...
ただ、課題もある
全部Kotlinで書かないといけない • Android以外のプラットフォーム固有機能を使う処理を Kotlinで書くことになる • Androidエンジニアは機能理解が足りなくて難しい • その他のエンジニアはKotlin / KMPに慣れてなくて難しい
依存解決に手間がかかる • サードパーティライブラリ利用時に iOSの依存解決でCocoaPodsを使うとクセがあった • 独自実装のライブラリをKMP層から直接依存するには Submoduleやライブラリ化が必要
そこで クリーンアーキテクチャの 考え方
KMPにinterfaceを定義して、実装はPF側で https://www.jetbrains.com/help/kotlin-multiplatform-dev/multiplatform-connect-to-apis.html#dependency-injection...
実装例 https://www.jetbrains.com/help/kotlin-multiplatform-dev/multiplatform-connect-to-apis.html#different-entry-points
None
この構成でうれしいポイント • 各プラットフォームの処理をそれぞれの言語で 実装できる →分担しやすい • より外側のレイヤーの修正 (実装、ライブラリのアップデートや入れ替え)時に ビジネスロジックに変更がなければ KMPモジュールの修正が不要
→より中心に近いレイヤーの処理が守られる
まとめ
クリーンアーキテクチャの内容は どんな設計にも適用できる考え方 • クリーンアーキテクチャは特定の形があるものではない • 中心の概念に向かって依存関係をつくるというルールを一 貫して守ろうという話 • KMPを実装する場合、 プラットフォーム固有部分の依存性を整理すると
変更に強い設計にできる
Thank you!