Skip to content

Babelプラグインの非宣言依存エラー

markdown
::: warning 重要
`babel-preset-react-app``create-react-app` の一部ですが、`create-react-app` は現在**メンテナンスされていません(2024年時点)**。このエラーは本体パッケージでは修正されないため、自力で回避策を実装する必要があります。
:::

## 問題の詳細

Reactプロジェクトで `npm start``npm run build` を実行すると、以下のエラーが発生します:

One of your dependencies, babel-preset-react-app, is importing the "@babel/plugin-proposal-private-property-in-object" package without declaring it in its dependencies...


このエラーの根本的な原因:
- `babel-preset-react-app` が依存関係に未宣言で `@babel/plugin-proposal-private-property-in-object` を参照している
- 標準化された機能のためプラグインが**非推奨**となり、現在は `@babel/plugin-transform-private-property-in-object` に名称変更されている
- `create-react-app` プロジェクトが非メンテナンス状態のため、公式修正が提供されない

## 推奨解決策(2024年最新)

### 方法1: 非推奨プラグインの代替インストール(最も直接的)

1. **新しいプラグインをインストール**:
   ```bash
   npm install --save-dev @babel/plugin-transform-private-property-in-object
   # または yarn
   yarn add @babel/plugin-transform-private-property-in-object --dev
  1. package.json の devDependencies を確認:
    json
    "devDependencies": {
      "@babel/plugin-transform-private-property-in-object": "^7.24.1",
      // 他の依存関係...
    }

注意点

  • @babel/plugin-proposal-private-property-in-object ではなく@babel/plugin-transform-private-property-in-objectを使用してください
  • バージョンはインストール時点の最新版を使用(^7.24.1など)

方法2: 依存関係の更新(包括的修正)

bash
# TypeScript 使用環境の場合
npm install typescript@latest

# Babel 関連パッケージ更新
npm install @babel/preset-env@latest @babel/core@latest
補足:バージョン指定が不可欠なケース

プロジェクトの安定性を保つため、package.jsonで固定バージョンを使用:

json
"devDependencies": {
  "@babel/plugin-transform-private-property-in-object": "7.24.1",
  // 他のパッケージ...
}

問題発生時はnode_modulespackage-lock.jsonを削除後、再インストール

追加トラブルシューティング

モノレポ環境での対応

モノレポ構成の場合、ルートとアプリ両方にプラグインをインストール:

bash
# Reactアプリディレクトリで
npm install -D @babel/plugin-transform-private-property-in-object

# ルートディレクトリで
npm install -D @babel/plugin-transform-private-property-in-object

.babelrc 設定例

カスタムBabel設定ファイル.babelrcを使用する場合:

json
{
  "presets": ["@babel/preset-env", "@babel/preset-react"],
  "plugins": ["@babel/plugin-transform-private-property-in-object"]
}

非推奨の解決策(参考のみ)

非推奨

以下の方法は過去の一時的回避策です。代わりに前述のtransformプラグインを使用してください:

bash
# 旧プラグイン(非推奨)
npm install --save-dev @babel/plugin-proposal-private-property-in-object

根本原因の技術的背景

この問題は、ES仕様のPrivate class fields (#field) サポートに関連:

  1. @babel/plugin-proposal-private-property-in-object はES提案段階のプラグイン
  2. 機能がES標準に統合され、プラグイン名がproposalからtransformに変更
  3. 非メンテナンスのbabel-preset-react-appが更新されていないため発生

このエラーが発生した場合、Reactツールチェーンの依存関係を直接更新することが最も安全かつ効果的な解決法です。