【えらーはんどりんぐ】

エラーハンドリング とは?

💡 転んでもケガしないための「受け身の技術」
📌 このページのポイント
エラーハンドリング(try-catch の流れ) 正常フロー try 開始 処理実行 finally 正常終了 ✓ エラーフロー try 開始 エラー発生! catch 捕捉 復旧処理 try {"{"} result = fetchData() {"}"} catch (e) {"{"} logError(e); showFallback() {"}"} finally {"{"} cleanup() {"}"}
エラーハンドリングのイメージ
ひよこ ひよこ

エラーが出たらそこで止まるんじゃないの?

ペンギン先生 ペンギン先生

エラーハンドリングをしなければ止まる。でもtry-catchでエラーを「捕まえて」おけば、プログラムは動き続ける。たとえばAPIの通信エラーが起きても「通信に失敗しました。再試行してください」と表示して続行できる。

ひよこ ひよこ

すべてのコードをtry-catchで囲めばいい?

ペンギン先生 ペンギン先生

それだと本当のバグまで握りつぶしてしまう。エラーハンドリングすべきなのは「起こりうる想定内のエラー」。ネットワーク障害やユーザーの入力ミスなど。プログラムのバグは修正すべきであって、catchで隠すべきではない。

ひよこ ひよこ

フロントエンドバックエンドでエラー処理って違う?

ペンギン先生 ペンギン先生

フロントエンドではユーザーにメッセージを表示する。バックエンドではログに記録してステータスコード(400, 500など)を返す。どちらも「何が起きたか」「どう復旧するか」をセットで考えるのが大事。

ひよこ ひよこ

エラーハンドリングのベストプラクティスって何かあるの?

ペンギン先生 ペンギン先生

「早く失敗する(Fail Fast)」が基本原則だよ。入力値のバリデーションは処理の最初に行い、不正なら即座にエラーを返す。奥深くまで処理が進んでからエラーに気づくと、原因特定が難しくなるし、中途半端な状態のデータが残るリスクもあるんだ。

ひよこ ひよこ

最近よく聞くResult型ってエラーハンドリングと関係あるの?

ペンギン先生 ペンギン先生

大いにあるよ。RustのResult型やTypeScriptのneverthrowライブラリは「成功か失敗か」を型で表現するアプローチ。try-catchだとどの関数がエラーを投げるか型情報からわからないけど、Result型なら戻り値の型を見るだけで「この関数は失敗する可能性がある」と明示できる。関数型プログラミングの影響を受けた現代的なエラーハンドリング手法として注目されているよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
エラーハンドリングって出てきたら「エラーが起きても安全に対処する仕組み」と思えばだいたいOK!
📖 おまけ:英語の意味
「error handling」 = エラーの取り扱い
💬 handle は「扱う・処理する」という意味で、発生したエラーにどう対処するかの仕組み
← 用語集にもどる