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
DMM Android Meetup#5 「例外と向き合う」
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
irom219
June 23, 2023
Technology
930
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DMM Android Meetup#5 「例外と向き合う」
https://dmm.connpass.com/event/283512/
irom219
June 23, 2023
More Decks by irom219
See All by irom219
デザインレビューをAIに支援してもらう.pdf
yukihiromori
0
260
DroidKaigi CfP分析
yukihiromori
0
410
レイヤードアーキテクチャにおける例外との向き合い方
yukihiromori
1
6.9k
Android meetup #3 モバイルエンジニア向けのGCP Cloud Functions
yukihiromori
2
420
DMM android meatup #2 Android OpenGLES
yukihiromori
2
490
Other Decks in Technology
See All in Technology
LambdaWebFunctionsを試してみた / exploring-lambda-web-functions
koukihosaka
0
300
USB PDを使ってスマホを労わりたい
raspython3
0
170
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
100
Persisting Massive Data with Rails ~Designing for 60 billion rows, and fighting the bottlenecks~ Railsで挑む大量データ永続化 〜600億件を永続化するための設計とボトルネックとの戦い〜
occhi
0
690
AI時代のPRレビューにどう向き合うか?
kairim0
1
240
子育てエンジニアの可処分時間が減っても成長を諦めない戦い方
sudoakiy
6
4.6k
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
430
『SAR衛星データ解析入門』のご紹介とその応用
syuchimu
0
120
"優秀な誰か"の下位互換にならないために
yut0naga1_fa
1
1.8k
サブエージェントと Claude Mods で作る独自 Advisor ツールの話
kenichiodo
2
160
Running Kotlin + Quarkus with Lambda
nealle
1
3.4k
Rust で関数型ドメインモデリング
takonda
0
130
Featured
See All Featured
A designer walks into a library…
pauljervisheath
211
25k
BBQ
matthewcrist
90
10k
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
740
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2k
The Pragmatic Product Professional
lauravandoore
37
7.5k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
For a Future-Friendly Web
brad_frost
184
10k
Abbi's Birthday
coloredviolet
4
10k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Transcript
© DMM © DMM CONFIDENTIAL 例外と向き合う #dmm_android勉強会 電子書籍事業部 森 幸浩
2023/06/20
© DMM 2 名前 森 幸浩 (もり ゆきひろ) 所属 電子書籍事業部
Androidチーム 自己紹介 • 約3年電子書籍事業部のAndroidチームで開発 • リファクタリングや新機能開発を担当
© DMM 3 ▪ 例外についての言語仕様 - Java言語での例外 - Kotlin言語での例外 -
検査例外がなくなった背景 ▪ Kotlinの例外処理のアプローチ - 非検査例外 - エラー状態の定義 ▪ DMMブックスでの例外処理のアプローチ - 非検査例外の独自定義 目次
© DMM 例外についての言語仕様
© DMM Java言語での例外 5 検査例外 ▪ コンパイル時にtry-catchがされているかを チェックする 非検査例外 (RuntimeException)
▪ コンパイル時にtry-catchがされているかを チェックしない
© DMM Java言語での例外 6 検査例外 ▪ コンパイル時にtry-catchがされているかをチェックする
© DMM Java言語での例外 7 非検査例外 (RuntimeException) ▪ コンパイル時にtry-catchがされているかをチェックしない
© DMM Java言語での例外 8 検査例外 ▪ コンパイル時にtry-catchがされているかを チェックする 例外処理をプログラマに強制する 非検査例外
(RuntimeException) ▪ コンパイル時にtry-catchがされているかを チェックしない 例外処理はプログラマの判断に任される
© DMM Kotlin言語での例外 ところが... Kotlinではコンパイルエラーがでない 9
© DMM Kotlin言語での例外 Kotlinでは検査例外が廃止された 翻訳 Kotlinには検査例外がありません。ここには多くの理由がありますが、なぜそうしたのかを説明する簡 単な例を示します。 10 https://kotlinlang.org/docs/exceptions.htm l#checked-exceptions
↑公式ドキュメントより抜粋
© DMM Kotlin言語で検査例外がなくなった背景
© DMM 検査例外がなくなった背景 検査例外はコンパイル時点で処理すべき例外の漏れを防げる - 生産性が上がる - 品質向上につながる と思われていたが... 12
© DMM 検査例外がなくなった背景 小規模なシステムであれば 発生箇所からハンドリングまでの距離が近いため複雑化しない 13
© DMM 検査例外がなくなった背景 14 小規模なシステムであれば 考慮しなければいけない例外の数も限定的
© DMM 検査例外がなくなった背景 システムの規模が大きくなると 発生箇所とハンドリングまでの距離が遠く中間のビジネスロジックが 複雑化 15
© DMM 検査例外がなくなった背景 システムの規模が大きくなると 複雑化したビジネスロジックでは考慮しなければならない例外が 爆発的に増加 16
© DMM 検査例外がなくなった背景 中間層ではthrows項で発生する例外の明示が必要なため 大量の例外宣言によりコードの可読性が落ち、生産性が落ちる 17
© DMM 検査例外がなくなった背景 結果として 検査例外を握りつぶしたり... 18
© DMM 検査例外がなくなった背景 結果として 非検査例外に変えたりする実装が横行し品質も上がらない 19
© DMM 検査例外がなくなった背景 検査例外はコンパイル時点で処理すべき例外の漏れを防げる - 生産性が上がる - 品質向上につながる と思われていたが、規模が大きくなると -
生産性が下がり - 品質向上もしない (握り潰しなどの横行により) 20
© DMM Kotlin言語での例外処理のアプローチ
© DMM Kotlin言語での例外処理のアプローチ 非検査例外 Java言語の非検査例外と同様に 非検査例外をthrowする方法 実行側でtry-catchにより ハンドリングする 22
© DMM Kotlin言語での例外処理のアプローチ 非検査例外 メリット - シンプルに書ける - 可読性が高い デメリット
- ハンドリングが漏れると クラッシュに繋がる 23
© DMM Kotlin言語での例外処理のアプローチ エラー状態の定義 例外を取りうる操作の場合 実行結果にエラー状態を定義する 24
© DMM Kotlin言語での例外処理のアプローチ エラー状態の定義 メリット - 網羅的に書ける デメリット - 実行結果の型定義が増える
- 予め例外を想定する必要がある 25
© DMM DMMブックスアプリでの例外処理のアプローチ
© DMM DMMブックスアプリでのアプローチ 非検査例外を独自定義 文脈単位で非検査例外を独自定義 個別に関心事がある例外をsealedクラスの子クラスで定義 27
© DMM DMMブックスアプリでのアプローチ 非検査例外を独自定義 Repository層で変換 親クラスで伝播する 28
© DMM DMMブックスアプリでのアプローチ 非検査例外を独自定義 Repository層で独自定義の例外に変換して上位のレイヤーに伝播していく 29
© DMM DMMブックスアプリでのアプローチ 非検査例外を独自定義 UseCase層など中間層では集約された例外で扱うため 記述量が抑えられる 30
© DMM DMMブックスアプリでのアプローチ 非検査例外を独自定義 ViewModel層で表示内容に変換する際に集約化された詳細を確認する 31
© DMM DMMブックスアプリでのアプローチ 非検査例外を独自定義 - 関心ごとのある例外をsealedクラスで定義 → 網羅性をある程度 確保 -
文脈単位で定義することで伝播する例外を集約 → 中間層での可読性の向上 といった感じで 例外を階層化し集約することで複雑さを整理することにしました 32
© DMM まとめ
© DMM まとめ ▪ 例外についての言語仕様 Java言語では検査例外があるがKotlinでは検査例外がない 検査例外はスケールが大きくなると生産性が落ち、品質向上につながらない そのためKotlinでは検査例外が廃止された ▪ Kotlinの例外処理のアプローチ
非検査例外 可読性は上がるが 網羅性に問題あり エラー定義 網羅性はあるが 定義量が多くなる ▪ DMMブックスでの例外処理のアプローチ 非検査例外を独自に階層化し集約 関心事のある例外のみを定義することで網羅性と可読性をあげた 34
© DMM ご静聴ありがとうございました