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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
irom219
June 23, 2023
Technology
900
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
200
DroidKaigi CfP分析
yukihiromori
0
360
レイヤードアーキテクチャにおける例外との向き合い方
yukihiromori
1
6.7k
Android meetup #3 モバイルエンジニア向けのGCP Cloud Functions
yukihiromori
2
410
DMM android meatup #2 Android OpenGLES
yukihiromori
2
470
Other Decks in Technology
See All in Technology
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
4
2.4k
マルチアカウント環境での コーディングエージェントを使った障害調査が大変なので AIエージェントにReadOnly権限を付与してみた / ReadOnly AI Agents for Multi-Account AWS Incident Response
yamaguchitk333
2
110
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2k
小さくはじめるSLI/SLO ~育てながら組織に定着させる実践知~ / Starting Small with SLI/SLOs: Building Adoption Through Continuous Growth
nari_ex
7
2k
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
1.2k
手塩にかけりゃいいってもんじゃない
ming_ayami
0
600
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
270
Chainlitで作るお手軽チャットUI
ynt0485
0
260
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
3
2.5k
2026TECHFRESH畢業分享會 - Lightning Talk - 打造精準高效的 MCP 設計模式與測試實務
line_developers_tw
PRO
0
1.2k
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
130
SONiCのLinuxベースを活かしたZabbix監視
sonic
0
190
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The agentic SEO stack - context over prompts
schlessera
0
820
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Building the Perfect Custom Keyboard
takai
2
800
Thoughts on Productivity
jonyablonski
76
5.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Navigating Weather and Climate Data
rabernat
0
220
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Rails Girls Zürich Keynote
gr2m
96
14k
Ethics towards AI in product and experience design
skipperchong
2
310
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 ご静聴ありがとうございました