【Rust】【wip】エラーハンドリングの指針
#tips #rust #wip
Rustでエラーハンドリングする際のスタンダードっぽい方法をまとめていく。
今までの言語のエラー設計の観点から、なんとなくこうかもなってのは見えてるけど、、、果たして
キーワード
Error Enum
Error Trait
source(原因調査のため)
thiserror
anyhow
参考
https://rust-exercises.com/100-exercises/05_ticket_v2/08_error_enums
https://doc.rust-jp.rs/rust-by-example-ja/error/multiple_error_types/boxing_errors.html
https://doc.rust-lang.org/stable/rust-by-example/error/multiple_error_types/boxing_errors.html
https://doc.rust-lang.org/stable/rust-by-example/error.html
https://doc.rust-jp.rs/book-ja/ch09-02-recoverable-errors-with-result.html#エラー時にパニックするショートカット-unwrapとexpect
https://www.lpalmieri.com/posts/error-handling-rust/
昔の思考
エラーハンドリング
例外処理 指針 2024版
思考
hr.icon
エラーで考えることはいくつかある。
使う側は、返ってきたエラーを元に処理を変えるか否か
エラーを上に返すか
最上段まで上がってきたエラーは、文脈を含んでるか
つまり、どの流れで発生したエラーなのか、後からわかるのか
そのエラーは誰が何のために使うのか
ここを考えることで、それぞれの「誰が」x「目的」ごとに最適な設計が見えてくることになる。
「誰が」を大きく分けると「エンドユーザー」or「運営者/開発者」の2つ。
さらに細かく分解することもあるだろうが、大きくはこの分解。
「目的」も主要なものは2つほど(他にもあると思うが)
1. 実行フローの中で、エラーを受けて制御する
メソッドや関数がエラーを受けて制御を変えたりする
エンドユーザーがエラーを見て、自身の行動を変えるなど
2. エラー内容から修正する
実行中には直せないエラーはloggingされるのが一般的。
そのログ内容からエラーの原因を掴んで修正することになる。
ドメインモデルで考えるエラーは...
オブジェクト生成時の「不正な値による生成できませんでしたエラー」
オブジェクトのメソッド実行時の「実行できなかったエラー」
Chapter8:Zero To Production Rust
hr.icon
https://www.lpalmieri.com/posts/error-handling-rust/