React Native Gradleエラー「Could not move temporary workspace」の解決方法
問題の概要
React NativeプロジェクトでAndroidビルドを実行すると、以下のエラーが発生するケースがあります:
java.io.UncheckedIOException: Could not move temporary workspace (C:\...\dependencies-accessors\423f0288...-a4bfdb9a...) to immutable location (C:\...\dependencies-accessors\423f0288...)
このエラーは、Gradleがビルドプロセス中に一時作業ディレクトリを永続的な場所に移動できないときに発生します。特に以下の環境で頻繁に報告されています:
- Gradle 8.6〜8.8を使用している場合
- Windows環境で開発している場合
- React Native 0.74以降のプロジェクト
./gradlew clean
の実行やGradleバージョンのアップグレードでも解決しないケースが多く、プロジェクトのビルドが完全にブロックされる深刻な問題です。
推奨解決方法(Gradleバージョンの変更)
Gradleを8.6から8.5にダウングレードする
最も効果的で多くのユーザーが成功している方法です:
手順
android/gradle/wrapper/gradle-wrapper.properties
ファイルを開くdistributionUrl
を8.5に変更
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip
- プロジェクト内の
.gradle
ディレクトリを削除
rm -rf android/.gradle
- クリーンビルドを実行
cd android
./gradlew clean
cd ..
npx react-native run-android
Gradle 8.11.1を使用する方法(2024年9月以降)
2024年後半にリリースされたGradle 8.11.1ではこの問題が修正されています:
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
WARNING
Gradle 8.11.1は新しいバージョンのため、プロジェクトの他の依存関係との互換性を確認してください
その他の効果的解決策
包括的なキャッシュ削除と再ビルド
# node_modulesとロックファイルを削除
rm -rf node_modules
rm yarn.lock # または package-lock.json
rm -rf android/.gradle
# 依存関係再インストール
yarn install # または npm install
# Gradleプロセス停止
cd android
./gradlew --stop
# クリーンビルド実行
./gradlew clean
# React Nativeビルド再開
cd ..
npx react-native run-android
開発サーバー(Metro)の競合解決
開発サーバーとビルドプロセスの競合が原因の場合:
- Metroサーバーを起動しているターミナルを閉じる
- 再度ビルドを実行:
npx react-native run-android
- Metroサーバーは自動的にバンドラとして起動
プロジェクト構造の初期化(IntelliJ/Android Studioユーザー向け)
IDE関連の問題が原因の場合:
# プロジェクトからIDE関連ファイルを削除
rm -rf .idea
rm -rf .gradle
# Gradleラッパー再初期化(Gradle 8.5インストール済みの場合)
gradle wrapper --gradle-version 8.5
# IDEを再起動してプロジェクトを開き直す
状況別トラブルシューティング
Windows固有の問題対応
ディレクトリ権限問題:
powershell# 管理者権限でコマンドプロンプトを実行 icacls "C:\プロジェクトパス" /grant Everyone:(F)
ファイルパス制限の解除:
- Windowsレジストリを編集:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
LongPathsEnabled
を1
に設定
- Windowsレジストリを編集:
ウイルス対策ソフトの一時停止: Windows Defenderなどでプロジェクトディレクトリをスキャン除外リストに追加
依存関係プラグインの追加
{
"devDependencies": {
"@react-native/gradle-plugin": "^0.x.x" // [!code ++]
}
}
npm install
根本原因と予防策
このエラーの主な技術的原因は:
- Gradle 8.6以降における依存関係アクセサの実装変更
- 一時Dから永続Dへの移動時のファイルシステム競合状態
- Windowsのファイルロックメカニズムとの非互換性
予防策として以下を推奨します:
- 安定版のGradleを使用(8.5がリスク最小)
- プロジェクトディレクトリのパスを短く簡潔にする
- 定期的に
.gradle
キャッシュをクリーンアップ - CI環境ではGradleキャッシュを適切に管理
どの解決策を選択する場合も、操作前に現在のGradleバージョンを記録しておきましょう。問題発生時に元の状態に復帰できるようにすることで、リスクを最小限に抑えられます。