Unityプロジェクトが大きすぎてバックアップが大変な方へ

unityのロゴ画像 Unity

Unityプロジェクトが増えてくると悩ましいのがデータ容量
プロジェクト1つで数GBはあたりまえ。場合によっては1つのUnityプロジェクトの容量が20GBくらいあったりする。当然ながらバックアップにも時間が掛かる。

バックアップするならLibraryフォルダを消す

UnityプロジェクトのLibraryフォルダはインポート済みアセットキャッシュとなる。
Assets/ProjectSettings/Packages/manifest.json があればUnityが自動で再生成する。

普段使っていないプロジェクトなら保持する意味がないので、削除してしまう方がUnityデータがスリムになる。

バックアップするという主旨からすれば、各プロジェクト毎のLibraryフォルダは不要である。

削除の効果(実測)

わたしのUnityプロジェクトで試してみた。

削除前Libraryフォルダ削除後削減
容量78 GB25 GB68% 減
ファイル数1,348,784約 70,00095% 減

データ容量は、7割近く減った。ファイル数に至っては1/20になっている。
ファイル数の削減はバックアップにとっては、地味に効果が大きい。
特にLibraryフォルダの中身はキャッシュファイルで、中身が小さなファイルが沢山ある状態なので、バックアップに余計時間が掛かる要因となっていた。

バッチファイルでLibraryフォルダのみ削除する

沢山あるUnityプロジェクトのLibraryフォルダのみ削除は手間だ。
そこで、バッチファイルを作ってダブルクリックだけでLibraryフォルダのみ削除をできるようにした。

delete-unity-library.bat

以下バッチファイルは文字コードShift-JISで保存する。(メモ帳の場合は、ANSI)

@echo off
setlocal enabledelayedexpansion
cd /d "%~dp0"

echo ============================================
echo  Unity Library フォルダ 一括削除
echo ============================================
echo 対象ルート : %CD%
echo.

rem --- ドライブ直下での実行を防ぐ ---
if "%CD:~3%"=="" (
    echo [エラー] ドライブ直下では実行できません。
    echo Unity プロジェクトの親フォルダに置いて実行してください。
    echo.
    pause
    exit /b
)

echo 対象を検索中...  ^(フォルダ数によっては時間がかかります^)
echo.

set COUNT=0
set "LIST=%TEMP%\unity_library_list.txt"
if exist "%LIST%" del "%LIST%"

rem --- 同階層に Assets と ProjectSettings がある Library だけを対象にする ---
for /f "delims=" %%D in ('dir /b /s /ad "Library" 2^>nul') do (
    if exist "%%~dpDAssets\" if exist "%%~dpDProjectSettings\" (
        set /a COUNT+=1
        echo   !COUNT!. %%D
        >>"%LIST%" echo %%D
    )
)

echo.
if %COUNT%==0 (
    echo 対象が見つかりませんでした。
    echo Assets と ProjectSettings が同じ階層にある Library だけを探しています。
    echo.
    pause
    exit /b
)

echo --------------------------------------------
echo 上記 %COUNT% 個の Library フォルダを削除します。
echo Library は Unity が自動で作り直すキャッシュです。
echo Assets / ProjectSettings / .git には手を触れません。
echo --------------------------------------------
echo.
echo ※ Unity を終了してから実行してください。
echo.

choice /c yn /m "削除してよろしいですか"
if errorlevel 2 goto :cancel

echo.
set DONE=0
set FAIL=0
for /f "usebackq delims=" %%D in ("%LIST%") do (
    echo 削除中 : %%D
    rd /s /q "%%D" 2>nul
    if exist "%%D" (
        set /a FAIL+=1
        echo         [失敗] 削除できませんでした
    ) else (
        set /a DONE+=1
    )
)

echo.
echo ============================================
echo  削除完了 : !DONE! 個
if !FAIL! gtr 0 (
    echo  削除失敗 : !FAIL! 個
    echo  Unity やエクスプローラーで開いたままかもしれません。
) else (
    echo  すべて正常に削除されました。
)
echo ============================================
goto :end

:cancel
echo.
echo 中止しました。何も削除していません。

:end
if exist "%LIST%" del "%LIST%"
echo.
pause

バッチファイルの安全対策

同じ階層に Assets と ProjectSettings の両方がある Library だけを対象にしている。これで「Unity プロジェクトのルート直下の Library」であることが保証され、同名の別フォルダを巻き込む事故を防げる。

一覧を目視で確認して問題なければ、同じウィンドウで続けて実行する仕様となっている。

実行における注意点

  • Unity を完全に終了してから実行する
  • .meta ファイルは絶対に消さない — Assets 内にあり、キャッシュではなく参照情報の本体。GUID が失われるとプロジェクトが壊れる
  • .git も残す。除外すると履歴が失われる
  • 次に開く時は再インポートで時間がかかる(規模次第で数分〜数十分)

実行イメージ

Unityプロジェクトフォルダより上の階層であれば実行はできるが、安全のためUnityプロジェクトフォルダにバッチファイルをコピーして実行した。

起動したときはセキュリティ警告がでる。問題はないので実行をクリックする。

削除対象のフォルダ一覧が表示される。
Yを押すと一覧に表示されたLibraryフォルダが削除される。(ここでNを押すと削除はキャンセルとなる)

削除後のイメージ

削除対象が表示されてからY/Nによる選択形式となるので、とりあえず確認したいときにもこのバッチファイルは便利である。

コメント

タイトルとURLをコピーしました