×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
1 ©2023 Loglass Inc. B2B SaaSあるある! 一括処理のエラーハンドリングをKotlinで関 数型的に処理する 2023.06.23 佐藤有斗(Yuiiitoto) 株式会社ログラス
Slide 2
Slide 2 text
2 ©2023 Loglass Inc. 自己紹介 佐藤有斗(Yuiiitoto) ログラス エンジニア 前回の発表
Slide 3
Slide 3 text
3 ©2023 Loglass Inc. ログラスについて 企業価値を向上する 経営管理クラウド
Slide 4
Slide 4 text
4 ©2023 Loglass Inc. ログラスについて(5秒) 企業価値を向上する 経営管理クラウド
Slide 5
Slide 5 text
5 ©2023 Loglass Inc. CSVで1000件ほど一括でデータを投入したい! その時に不正なデータがある場合は、複数まとめて 表示してくれ! 本日の要求
Slide 6
Slide 6 text
6 ©2023 Loglass Inc.
Slide 7
Slide 7 text
7 ©2023 Loglass Inc. 複数行でエラーがある
Slide 8
Slide 8 text
8 ©2023 Loglass Inc. 複数行でエラーがある 3行目: メールアドレスが空です 4行目: 性別にひらがなを利用することはできません
Slide 9
Slide 9 text
9 ©2023 Loglass Inc. 一つの行でも複数エラーがある
Slide 10
Slide 10 text
10 ©2023 Loglass Inc. 一つの行でも複数エラーがある 5行目: ユーザー名が空です 5行目: メールアドレスは100文字以下で入力してください 5行目: 性別「漢」は不正な値です
Slide 11
Slide 11 text
11 ©2023 Loglass Inc. 非常にめんどくさい
Slide 12
Slide 12 text
12 ©2023 Loglass Inc. 例外は一括処理が苦手 ● 最初の不正なデータに出会ったら呼び出し元に戻ってしまう ● Kotlinには検査例外がないのでコンパイルフェーズでエラーハンドリングを強制できない
Slide 13
Slide 13 text
13 ©2023 Loglass Inc. どうするか?
Slide 14
Slide 14 text
14 ©2023 Loglass Inc. 関数型エラーハンドリングで解決しよう
Slide 15
Slide 15 text
15 ©2023 Loglass Inc. 関数型エラーハンドリングとは ● いわゆるScalaのEitherやRustにおけるResult ● 例外ではなく型でエラーを表現する
Slide 16
Slide 16 text
16 ©2023 Loglass Inc. 詳しくはこちら(同僚のやつ)
Slide 17
Slide 17 text
17 ©2023 Loglass Inc. Kotlinで一括処理を エラーハンドリングする場合は Arrow.ktのEitherがおすすめ 今日特に頭の片すみに覚えてほしいこと
Slide 18
Slide 18 text
18 ©2023 Loglass Inc. Arrow.kt
Slide 19
Slide 19 text
19 ©2023 Loglass Inc. 実際のコードをみていくぞ! (詳しく説明する時間はない!)
Slide 20
Slide 20 text
20 ©2023 Loglass Inc. ユーザーの作成処理
Slide 21
Slide 21 text
21 ©2023 Loglass Inc. ユーザーの作成処理 ● 失敗したら複数のエラー( List) ● 成功したらユーザーインスタンス( User)
Slide 22
Slide 22 text
22 ©2023 Loglass Inc. これを再現する 5行目: ユーザー名が空です 5行目: メールアドレスは100文字以下で入力してください 5行目: 性別「漢」は不正な値です
Slide 23
Slide 23 text
23 ©2023 Loglass Inc. ユーザーの作成処理(ここは雰囲気理解でダイジョブ)
Slide 24
Slide 24 text
24 ©2023 Loglass Inc. ユーザーの作成処理(ここは雰囲気理解でダイジョブ) ● 各フィールドに対してバリデーション処理
Slide 25
Slide 25 text
25 ©2023 Loglass Inc. ユーザーの作成処理(ここは雰囲気理解でダイジョブ) ● バリデーション結果をつかってインスタンス作成
Slide 26
Slide 26 text
26 ©2023 Loglass Inc. 各バリデーションの処理 ● 各バリデーションは失敗したら一つのエラー、成功したら値オブジェクトを返す
Slide 27
Slide 27 text
27 ©2023 Loglass Inc. 詳しくはjskmtさんのこちら(この次に発表するらしいです)
Slide 28
Slide 28 text
28 ©2023 Loglass Inc. 複数ユーザーの保存処理
Slide 29
Slide 29 text
29 ©2023 Loglass Inc. 複数ユーザーの保存処理
Slide 30
Slide 30 text
30 ©2023 Loglass Inc. 複数ユーザーの保存処理 ● 複数の入力から複数のユーザーを作成 ● 行番号をエラー文に埋め込みながら、エラーの内容を更新
Slide 31
Slide 31 text
31 ©2023 Loglass Inc. 複数ユーザーの保存処理 ● 型をちょちょいってやる ● 最後の最後は例外として投げる( SpringBootでよしなに処理させるため)
Slide 32
Slide 32 text
32 ©2023 Loglass Inc. これを再現する 3行目: メールアドレスが空です 4行目: メールアドレスは100文字以下で入力してく ださい
Slide 33
Slide 33 text
33 ©2023 Loglass Inc. 話せなかったおまけ(あとで話しましょう) ● ログラスだと似た感じのライブラリの kotlin-result を使っている ● kotlin-resultだと zipOrAcummulateがなくて絶妙に使いにくい
Slide 34
Slide 34 text
34