😱 序文:あなたのWebサイトが突然フリーズする恐怖…
前回の記事で、fetchを使って外部APIからデータを取得する方法をマスターしましたね!これであなたのWebサイトは世界と繋がりました。しかし、ここで一つ、**絶対に見過ごせない「落とし穴」**があります。
それは、「エラー」です。
- 🔌 ユーザーのWi-Fiが切れたら?
- 💣 APIサーバーが突然ダウンしたら?
- 😡 取得したデータ形式が急に変わったら?
どんなに完璧なコードを書いても、外部の要因でプログラムは簡単にクラッシュします。そして、プログラムがクラッシュすると、Webサイトは突然フリーズし、ユーザーは「このサイト、壊れてる…」と感じて離脱してしまいます。
プロのエンジニアと初心者の最大の違いは、**「エラーを恐れないこと」ではなく、「エラーが起きてもサイトを絶対にフリーズさせない仕組み」**を知っているかどうかです。
その「絶対安全おまじない」こそが、エラーハンドリング(例外処理)、特に**try...catch**構文です!
1. 🚨 なぜエラーハンドリングが必要なのか?
JavaScriptのプログラムは、エラーが発生すると基本的にその場で実行を停止します。
(❌ エラーハンドリングがない場合)
JavaScript
console.log("① 処理開始");
throw new Error("💥 意図的にエラーを発生!"); // ここで停止
console.log("② 処理続行"); // ← 実行されない
Webサイトでは、この「実行停止」が「フリーズ」を意味します。エラーが発生したとき、プログラム全体を止めずに、「この部分の処理だけをスキップして、次の処理に移る」ためのルールが必要なのです。
2. 🛡️ 絶対安全の仕組み:try...catch構文
try...catch構文は、エラーが発生する可能性のあるコードを**「監視」し、エラーが発生したらプログラムを止めずに「別の処理に切り替える」**ための仕組みです。
| キーワード | 役割 |
try | エラーが発生する可能性があるコードを囲む監視ブロック。 |
catch | tryブロック内でエラーが発生したときに実行されるコード。 |
Google スプレッドシートにエクスポート
try...catchの構造と流れ
JavaScript
console.log("① 処理開始");
try {
// 監視対象コード
console.log("② API通信を試みます");
// 意図的にエラーを発生させる(またはfetchが失敗する)
// throw new Error("サーバーが応答しませんでした");
console.log("③ 成功しました"); // エラーが起きなければ実行
} catch (error) {
// catchブロックにはエラーオブジェクトが渡される
console.log("💥 エラーを検知しました!");
console.error("エラー内容:", error.message);
// ユーザーに「データを表示できませんでした」と優しく伝えるDOM操作などを行う
}
console.log("④ プログラムはフリーズせずに続行!");
実行の流れ:
try内のコードを実行します。- もし途中でエラーが発生した場合、
try内の残りのコードをスキップします。 - すぐに
catchブロックにジャンプし、エラー処理のコードを実行します。 catchブロックが終わると、構文の外のコード(④)に移動し、処理を続行します。
この仕組みのおかげで、Webサイトはエラーでフリーズすることなく、ユーザーに「今、問題が起きています」と伝えるメッセージ(優しいエラーハンドリング)を表示できるようになるのです!
3. 🌐 非同期処理での実践:async/awaitとtry...catch
前回の記事で学んだasync/awaitと、このtry...catchは最高のコンビです。async/awaitを使っている場合、try...catchはfetchのネットワークエラーや、awaitしているPromiseがreject(拒否)されたエラーも全てキャッチしてくれます。
JavaScript
async function loadDataSafely() {
const API_URL = 'https://api-down.com/data'; // 💥 失敗するURL
try {
// awaitでPromiseの完了を監視
const response = await fetch(API_URL);
// HTTPステータスコードのエラーも自分でチェック(404, 500など)
if (!response.ok) {
throw new Error(`HTTPエラーが発生しました: ${response.status}`);
}
const data = await response.json();
document.getElementById('content').textContent = data.message;
} catch (error) {
// ネットワークエラー、JSONパースエラー、手動でthrowしたエラーを全てキャッチ
console.error("データ取得の重大な問題:", error.message);
// ここでエラーメッセージをDOMに表示!
document.getElementById('content').textContent = '⚠️ データ取得に失敗。時間をおいてお試しください。';
}
}
loadDataSafely();
try...catchで全体を囲むだけで、あなたのコードは**「どんな状況でもユーザー体験を守り抜く」**、プロ仕様のコードに生まれ変わるのです!
🌟 まとめ:エラーハンドリングでバズるサイトに!
エラーハンドリングは地味な作業に見えるかもしれませんが、ユーザーからの信頼を勝ち取るための最重要スキルです。
try...catch:エラーを検知し、プログラムのフリーズを防ぐ「防御シールド」。catchブロック:エラー発生時に、ユーザーに優しく状況を伝えるための「メッセージセンター」。async/awaitとの組み合わせ:非同期処理のバエラーを一網打尽にする最強コンビ。
今日から、あなたが書くすべてのfetchやawaitの処理を、このtry...catchで優しく包んであげましょう。あなたのコードが「絶対安全」になることで、ユーザーは安心してサイトを利用でき、結果としてあなたのWebサイトはバズる信頼性を手に入れるはずです!次のステップも全力で応援しています!

