MacでNode.jsプロジェクトをコピーするとエラーコード-36が発生した時の対処法

MacでNode.jsプロジェクトをコピーするとエラーコード-36が発生した時の対処法の画像 未分類

今回自身で作成しているプロジェクトのバックアップを取ろうと思った時につまずいた内容を整理したいと思います。node.jsで作成していたディレクトリで、node_modules群で特に.ファイルが邪魔をしていたことが発覚しました。

発生した問題

MacのFinderでNode.jsプロジェクトをフォルダごとコピーしようとしたところ、以下のエラーが発生した。

一部のデータを読み込めないか書き込めないため、操作を完了できません。
(エラーコード -36)

また、コピー途中で以下のようなメッセージが表示された。

"〇〇フォルダのコピー" のコピーを一時停止しました

当初考えた原因

エラーコード -36 は一般的に以下の原因が考えられる。

  • 外付けSSDやUSBの不具合
  • Mac特有の隠しファイル(._ファイル)
  • Finderの不具合
  • ディスクエラー
  • ファイルの破損

そのため最初は dot_clean コマンドの利用も検討した。

dot_clean フォルダ名

しかし今回はMac内部ストレージ同士のコピーであり、外部ストレージではなかったため可能性は低かった。

本当の原因

Node.jsプロジェクト内に存在していた

node_modules

が原因だった。

Finderは大量の小さなファイルをコピーするのが苦手で、

node_modules

のような数万ファイル規模のフォルダを扱う際に停止したり、エラーコード-36を発生させることがある。

解決方法

Finderではなくターミナルの rsync を利用した。

rsync -avh \
--exclude=node_modules \
--exclude=.pm2 \
~/Desktop/test/ \
~/Desktop/test_backup/

オプションの意味

-a

属性を保持してコピー

-v

詳細表示

-h

見やすいサイズ表示

--exclude=node_modules

node_modulesを除外

--exclude=.pm2

PM2の実行キャッシュを除外

コピー後の復元方法

コピー先で以下を実行する。

cd ~/Desktop/test_backup
npm install

これにより package.json をもとに必要なライブラリが再インストールされる。

その後起動確認。

npm run dev

または

npm start

学んだこと

今回の件で理解できたこと。

  • FinderはNode.jsプロジェクトの大量ファイルコピーに弱い
  • エラーコード-36は必ずしもSSD故障ではない
  • rsyncは開発者がよく使う安全なコピー方法
  • node_modulesは資産ではなくキャッシュに近い存在
  • package.json があれば環境を再構築できる

今後の自分用メモ

Node.jsプロジェクトをコピーする時はFinderを使わない。

まず以下を実行する。

rsync -avh \
--exclude=node_modules \
--exclude=.pm2 \
コピー元/ \
コピー先/

コピー後は

npm install

で復元する。

これを標準手順とする。

コメント

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