導入

プログラミングを始めたばかりの頃は、「エラーが出たら直す」を繰り返しているうちに、だんだん怖くなってきます。自分が想定していない場面で止まったり、途中まで処理が進んだまま中途半端な状態になったりするからです。

そこで役に立つ考え方がtry/catchです。try/catch を使うと、「失敗するかもしれない処理」を前提にして、失敗したときの振る舞いを決められます。結果として、プログラムが落ちにくくなり、原因調査もしやすくなります。

この記事では、言語ごとの細かい文法には踏み込まず、try/catch の考え方、使いどころ、throw や finally の役割、メリットとデメリット、そして例外設計のコツを初心者向けに整理します。

try/catch を一言でいうと(簡単なサンプルコードつき)

try/catch は、「失敗しうる処理」を安全に扱うための仕組みです。

JavaScript でいうと、雰囲気はこうです。


try {
  // 失敗するかもしれない処理
  const user = JSON.parse('{"name":"Kohno"}');
  console.log("ユーザー名:", user.name);
} catch (e) {
  // 失敗したときの対応
  console.log("読み込みに失敗しました(JSONが壊れているかも)");
}

この例では、JSON.parse() が失敗したときに catch に移動します。catch があることで、そこで止まらずに「失敗したときの動き」を決められます。

“エラー”と“例外”の違い

try/catch を理解するときに、まず整理しておきたいのが「エラー」と「例外」です。

例外が起きると、多くの場合はその場の処理が中断され、上の呼び出し元へと伝わっていきます。どこかでキャッチ(catch)されなければ、プログラム全体が止まることもあります。

つまり try/catch は、例外が起きたときに「止め方」や「立て直し方」を決める道具、という位置づけです。

try/catch が必要になる典型パターン

try/catch を書くべき場面は、だいたい共通しています。ポイントは「自分の努力だけでは100%コントロールできない」処理です。

外部要因が絡む処理

入力データが不確かな処理

ここで大事なのは、try/catch は「何でも解決する魔法」ではないことです。たとえば、設計ミスやロジックのバグを try/catch で黙らせると、根本原因が見えなくなって逆に危険です。try/catch は起こりうる失敗を受け止めるための仕組みであって、失敗の原因を消すものではありません

try catchの書き方(throw / finally も含めて)

ここでは言語別の細かい差ではなく、JavaScript を例にしながら「どう考えて書くか」を説明します。よく使う要素は次の3つです。

そして、意図的に失敗扱いにしたいときに使うのがthrowです。

try と catch の基本形


try {
  const n = Number("123");
  console.log(n * 2);
} catch (e) {
  console.log("計算できませんでした");
}

ポイントは、「例外が起きた瞬間に try の残りは飛ばされて catch に移る」ことです。

throw(自分で例外を発生させる)

「この値はおかしい」「このまま続けたくない」を自分で判断して、例外として扱いたいときがあります。そういうときに throw を使います。


function parseAge(text) {
  const age = Number(text);
  if (Number.isNaN(age)) {
    throw new Error("年齢が数値ではありません");
  }
  if (age < 0) {
    throw new Error("年齢がマイナスです");
  }
  return age;
}

try {
  const age = parseAge("abc");
  console.log("年齢:", age);
} catch (e) {
  console.log("入力エラー:", e.message);
}

throw を使うと、「エラーっぽい値(NaNなど)」を放置して後で爆発させるのではなく、早めに失敗として扱って、catch に流す設計ができます。

finally(成功しても失敗しても必ずやる後片付け)

失敗したときでも「必ず最後にやりたい処理」があります。たとえば「ローディング表示を消す」「一時的な状態を戻す」「ログの締めをする」などです。そこで finally を使います。


let loading = false;

try {
  loading = true;
  console.log("処理開始。loading =", loading);
  const data = JSON.parse("broken json");
  console.log(data);
} catch (e) {
  console.log("失敗しました:", e.message);
} finally {
  loading = false;
  console.log("後片付け。loading =", loading);
}

finally は、try が成功しても、catch に入っても、最後に必ず実行されます。「途中で失敗しても UI 状態だけは戻したい」みたいなケースで特に効きます。

メリット・デメリット

メリット

デメリット

失敗時に catch で何をすればいい?

catch の中身はケースによりますが、初心者はまず「型」を持っておくと迷いません。

全部を一度にやる必要はありませんが、最低でも「何が起きたか分かる情報を残す」は意識しておくと強いです。

例外設計のコツ

try/catch を「書ける」だけだと、乱用して逆に辛くなります。ここからは、初心者が事故りにくい考え方のコツです。

まとめ

try/catch は「失敗するかもしれない」を前提にして、失敗時の動きを設計するための仕組みです。外部要因が絡む処理ほど try/catch の価値が大きくなります。

一方で、乱用すると原因が隠れたり、読みにくくなったりします。try は最小範囲、catch では最低限の記録、if で済むものは if、という感覚を持つだけでも事故は減ります。

次の記事では、言語別の具体的な記法(書き方の違い、よくある罠、代表例)をまとめると理解が深まります。

Author Profile

コウノ(
職歴年のIT技術者です。エクセル・Web制作が得意。

プロフィールの詳細

お困りごとはまずはご相談ください。パソコン・スマホ初期設定 / ツール導入・開発受付中

Back to Top