Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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