エラー処理: 例外をコントロール

try/catch で例外をキャッチ。カスタムエラーで詳細を伝える。

try/catch
エラーをキャッチして処理。
throw
エラーを発生させる。
finally
必ず実行されるブロック。

エラー処理基礎

サーカスの安全ネット (Safety Net)

`try` ブロックは空中ブランコの演技(危険な処理)です。もし失敗して落ちても(エラー発生)、`catch` ブロックという「安全ネット」があれば、地面に激突してショーが中止(クラッシュ)することはありません。ネットの上で体勢を立て直し、演技を続行できます。

プログラムは予期せぬ入力や通信エラーで簡単に停止します。エラーハンドリングを適切に行うことで、一部が失敗してもアプリ全体を道連れにせず、ユーザーに「何が起きたか」を優しく伝えることができます。

try/catch/finally
try {
const data = JSON.parse(invalidJson);
} catch (error) {
if (error instanceof SyntaxError) {
console.error('Invalid JSON:', error.message);
} else {
throw error; // 再スロー
}
} finally {
cleanup(); // 必ず実行
}
// エラーをスロー
function divide(a: number, b: number): number {
if (b === 0) throw new Error('Division by zero');
return a / b;
}
Bad
// ❌ Bad: 全てのエラーを握りつぶす
try {
riskyOperation();
} catch (e) {
// 何もしない — バグを隠す
}
Good
// ✅ Good: 適切にハンドリング
try {
riskyOperation();
} catch (error) {
console.error('Error:', error);
reportToService(error);
throw error; // 必要なら再スロー
}

パターン

Error Patterns
// カスタムエラー
class ValidationError extends Error {
constructor(public field: string, message: string) {
super(message);
this.name = 'ValidationError';
}
}
// async/await でのエラー処理
async function fetchData() {
try {
const res = await fetch('/api/data');
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return await res.json();
} catch (error) {
console.error('Fetch failed:', error);
return null;
}
}
// Optional chaining でエラー回避
const name = user?.profile?.name ?? 'Anonymous';
Tip: async 関数内の try/catch で Promise のエラーもキャッチ。

合格ライン

カスタムエラーを定義できる
async/await のエラー処理ができる

演習課題

課題1: try/catch
try/catch でエラーを捕捉してください。
課題2: カスタムエラー
カスタムエラークラスを作成してください。