JavaScript | 複数の fetch を並列で実行 → どれか失敗しても安全に処理を続ける

JavaScript JavaScript
スポンサーリンク

実務でも「finally の中で returnthrow を書いてしまう」ミスは危険かつ気づきにくいため、
ESLint(JavaScriptの静的解析ツール)で検出できるようにしておくのが効果的です。


目的

finally の中で returnthrow を禁止する」ESLintルールを設定して、
コードレビューの前に自動チェックできるようにする。


サンプル構成

  • .eslintrc.json — ESLint 設定ファイル
  • bad.js — NGなコード例(finally内のreturn/throwあり)
  • good.js — OKなコード例

1. .eslintrc.json 設定例

以下をプロジェクトのルートに作成:

{
  "env": {
    "es2021": true,
    "browser": true
  },
  "extends": ["eslint:recommended"],
  "parserOptions": {
    "ecmaVersion": "latest",
    "sourceType": "module"
  },
  "rules": {
    "no-unsafe-finally": "error"
  }
}
JavaScript

📘 no-unsafe-finally
このルールが「finally 内で return / throw / break / continue」などを禁止します。


2. 悪いコード例(エラーになる)

// bad.js
async function getData() {
  try {
    console.log("処理中...");
    throw new Error("APIエラー");
  } catch (err) {
    console.error("catch:", err.message);
    throw err;
  } finally {
    console.log("finally中");
    return "finallyのreturn"; // ← ESLintがエラーを検出!
  }
}
JavaScript

🔍 ESLint 実行結果:

$ npx eslint bad.js
bad.js
  10:5  error  Unsafe usage of ReturnStatement in finally block  no-unsafe-finally

✖ 1 problem (1 error, 0 warnings)

💥 no-unsafe-finally がしっかり検出してくれます。


3. 良いコード例(OK)

// good.js
async function getData() {
  try {
    console.log("処理中...");
    const res = await fetch("https://example.com");
    return await res.json();
  } catch (err) {
    console.error("catch:", err.message);
    throw err;
  } finally {
    console.log("finally: 後処理(ローディング解除など)");
  }
}
JavaScript

✅ finally 内は「後処理のみ」なので、ESLintエラーなし。


補足:ルールの意味

no-unsafe-finally は次の構文を禁止します:

NG構文理由
returntry/catch の戻り値や throw を上書きしてしまう
throw元のエラーを上書きしてしまう
break / continue制御フローを壊す可能性がある

ワンポイント(プロ向けTips)

  • TypeScript + ESLint を使うなら、
    @typescript-eslint/eslint-plugin にも同名ルールがある(互換性あり)。
  • VSCode では ESLint プラグインを入れると、
    リアルタイムで波線警告が出るので初心者にも安心。

まとめ

目的設定項目効果
finally内のreturn/throw検出"no-unsafe-finally": "error"安全な例外処理を保証
使い方.eslintrc.jsonに記述自動検出・修正支援
実行コマンドnpx eslint .ディレクトリ全体をチェック
タイトルとURLをコピーしました