Unityプロジェクトが増えてくると悩ましいのがデータ容量。
プロジェクト1つで数GBはあたりまえ。場合によっては1つのUnityプロジェクトの容量が20GBくらいあったりする。当然ながらバックアップにも時間が掛かる。
バックアップするならLibraryフォルダを消す
UnityプロジェクトのLibraryフォルダはインポート済みアセットキャッシュとなる。
Assets/ProjectSettings/Packages/manifest.json があればUnityが自動で再生成する。

普段使っていないプロジェクトなら保持する意味がないので、削除してしまう方がUnityデータがスリムになる。
バックアップするという主旨からすれば、各プロジェクト毎のLibraryフォルダは不要である。
削除の効果(実測)
わたしのUnityプロジェクトで試してみた。
| 削除前 | Libraryフォルダ削除後 | 削減 | |
|---|---|---|---|
| 容量 | 78 GB | 25 GB | 68% 減 |
| ファイル数 | 1,348,784 | 約 70,000 | 95% 減 |
データ容量は、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プロジェクトフォルダより上の階層であれば実行はできるが、安全のためUnityプロジェクトフォルダにバッチファイルをコピーして実行した。
起動したときはセキュリティ警告がでる。問題はないので実行をクリックする。

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

削除後のイメージ

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

コメント