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
280
レイヤードアーキテクチャにおける例外との向き合い方
yukihiromori
1
6k
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
複数サービスを支えるマルチテナント型Batch MLプラットフォーム
lycorptech_jp
PRO
1
860
20250912_RPALT_データを集める→とっ散らかる問題_Obsidian紹介
ratsbane666
0
100
slog.Handlerのよくある実装ミス
sakiengineer
4
440
AIのグローバルトレンド2025 #scrummikawa / global ai trend
kyonmm
PRO
1
310
要件定義・デザインフェーズでもAIを活用して、コミュニケーションの密度を高める
kazukihayase
0
120
Claude Code でアプリ開発をオートパイロットにするためのTips集 Zennの場合 / Claude Code Tips in Zenn
wadayusuke
4
380
Platform開発が先行する Platform Engineeringの違和感
kintotechdev
4
580
なぜテストマネージャの視点が 必要なのか? 〜 一歩先へ進むために 〜
moritamasami
0
240
会社紹介資料 / Sansan Company Profile
sansan33
PRO
6
380k
20250913_JAWS_sysad_kobe
takuyay0ne
2
240
Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか
iwatatomoya
1
1.2k
💡Ruby 川辺で灯すPicoRubyからの光
bash0c7
0
120
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
A Modern Web Designer's Workflow
chriscoyier
696
190k
A better future with KSS
kneath
239
17k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Side Projects
sachag
455
43k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Code Reviewing Like a Champion
maltzj
525
40k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
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 ご静聴ありがとうございました