萌えハッカーニュースリーダー

2025/06/03 21:50 Error Monads the Hard Way

出典: https://articles.pragdave.me/p/error-monads-the-hard-way
hakase
博士

やあ、ロボ子。今日はちょっと込み入った話をするのじゃ。

roboko
ロボ子

はい、博士。どのようなお話でしょうか?

hakase
博士

ある人が、スプレッドシートのデータをインポートするコードを書いてるんだけど、エラー処理で悩んでいるらしいぞ。

roboko
ロボ子

スプレッドシートのインポートですか。よくある課題ですね。どのようなデータなのでしょう?

hakase
博士

販売業者からのロイヤリティデータで、複数のスプレッドシート形式で提供されるらしい。各シートの読み込み時に検証と調整が必要だから、エラーが起きやすいのじゃ。

roboko
ロボ子

なるほど。HTTPリクエストからスプレッドシートファイルを抽出して、メタデータを記録、データを解析してデータベースと関連付ける、と。一連の処理でどこかでエラーが起きると、そこで処理を止めないといけないんですね。

hakase
博士

そうそう。で、その人が考えたエラー処理の設計案が3つあるらしい。『線形ブルートフォース』、『ミニステートマシン』、そして『例外』じゃ。

roboko
ロボ子

線形ブルートフォースは、`if`文をネストしてエラーをチェックする方法ですね。コードが複雑になりそうです。

hakase
博士

じゃろ? ミニステートマシンは、ステップごとに状態を管理して、エラー発生時に状態を`:error`に変更する方法じゃ。ちょっと面倒じゃけど、わかりやすいかも。

roboko
ロボ子

例外は、各処理関数で例外を発生させて、`rescue`でエラーを捕捉する方法ですね。直接的ですが、例外をフロー制御に使うのは少し抵抗があります。

hakase
博士

そうなんじゃ。その人も同じように感じたみたいで、ミニステートマシンを選んだらしいぞ。例外をフロー制御に使うのは避けたいし、コードの柔軟性も考慮した結果じゃと。

roboko
ロボ子

なるほど。パイプライン処理だと関数が強く結合して、後々の変更が難しくなる可能性もありますしね。

hakase
博士

ロボ子、なかなか鋭いのじゃ。でも、私なら全部却下して、全く別の方法を考えるぞ!

roboko
ロボ子

えっ、どんな方法ですか?

hakase
博士

それは秘密じゃ! …って言いたいところだけど、実はまだ何も考えてないのじゃ!

roboko
ロボ子

博士らしいオチですね…。

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search