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
DMM Android Meetup#5 「例外と向き合う」
Search
irom219
June 23, 2023
Technology
2
830
DMM Android Meetup#5 「例外と向き合う」
https://dmm.connpass.com/event/283512/
irom219
June 23, 2023
Tweet
Share
More Decks by irom219
See All by irom219
DroidKaigi CfP分析
yukihiromori
0
290
レイヤードアーキテクチャにおける例外との向き合い方
yukihiromori
1
6.1k
Android meetup #3 モバイルエンジニア向けのGCP Cloud Functions
yukihiromori
2
380
DMM android meatup #2 Android OpenGLES
yukihiromori
2
440
Other Decks in Technology
See All in Technology
KAGのLT会 #8 - 東京リージョンでGAしたAmazon Q in QuickSightを使って、報告用の資料を作ってみた
0air
0
200
Goに育てられ開発者向けセキュリティ事業を立ち上げた僕が今向き合う、AI × セキュリティの最前線 / Go Conference 2025
flatt_security
0
350
extension 現場で使えるXcodeショートカット一覧
ktombow
0
210
KMP の Swift export
kokihirokawa
0
330
SOC2取得の全体像
shonansurvivors
1
370
AIが書いたコードをAIが検証する!自律的なモバイルアプリ開発の実現
henteko
1
340
生成AIを活用したZennの取り組み事例
ryosukeigarashi
0
200
実装で解き明かす並行処理の歴史
zozotech
PRO
1
320
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
5.4k
【新卒研修資料】LLM・生成AI研修 / Large Language Model・Generative AI
brainpadpr
23
17k
AI ReadyなData PlatformとしてのAutonomous Databaseアップデート
oracle4engineer
PRO
0
170
生成AI_その前_に_マルチクラウド時代の信頼できるデータを支えるSnowflakeメタデータ活用術.pdf
cm_mikami
0
110
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
173
14k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
54
3k
How to Ace a Technical Interview
jacobian
280
24k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
2.6k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Music & Morning Musume
bryan
46
6.8k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
890
Automating Front-end Workflow
addyosmani
1371
200k
The Invisible Side of Design
smashingmag
301
51k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
237
140k
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 ご静聴ありがとうございました