Softex CelwareTech Blog
PowerShell / bat運用2026-06-10

OneDrive配下のNodeビルド遅延を避け、C:\devで開発するワークフロー

OneDrive同期フォルダ配下でnpm installやNext.jsビルドが遅いときに、実体をC:\devへ移し、OneDrive側には.lnkショートカットだけを残すWindows開発ワークフローを紹介します。

OneDriveNode.jsNext.jsPowerShellWindows

はじめに

Node.jsやNext.jsのプロジェクトをOneDrive同期フォルダ配下で開発すると、npm installnpm run buildが極端に遅くなり、処理が固まったように見えることがあります。

原因になりやすいのは、node_modules.nextへ大量のファイルを書き込む処理と、OneDriveの同期、Windows Defenderのリアルタイムスキャンが同時に動くことです。

この記事では、プロジェクトの実体をOneDrive外のC:\devへ置き、OneDrive側にはクリック用の.lnkショートカットだけを残すワークフローを紹介します。

OneDrive配下でビルドが遅くなる理由

Node.jsプロジェクトでは、依存関係のインストールやビルド時に多数の小さなファイルを作成・更新します。

  • npm installnode_modulesへ数千から数万のファイルを作る
  • Next.jsのビルドは.nextへキャッシュや生成物を書き込む
  • OneDriveは変更されたファイルを同期対象として監視する
  • Windows Defenderは新しく作られたファイルをスキャンする

この処理が重なると、ファイルI/Oの競合やリトライが発生し、CPUやネットワークに余裕があってもビルドが進みにくくなります。

実測例

同一のNext.js 14プロジェクトで、OneDrive配下とローカルのC:\devを比較した例です。

処理OneDrive配下ローカル C:\dev
npm install約1分約12秒
npm run build固まる、または数分約16秒
node_modulesのファイル数約9,900同じ

ファイル数やソースコードが同じでも、配置場所を変えるだけで処理時間が大きく変わることがあります。

推奨ワークフロー

基本方針は、次のとおりです。

C:\dev\<project>\                  プロジェクトの実体、Git管理、ビルド作業
OneDrive\<共有資産フォルダ>\*.lnk   C:\devを開くためのクリック導線だけ
GitHub                              ソースコードの共有と履歴管理

OneDriveには.lnkだけを置くため、共有資産フォルダから開発先へ移動しやすい状態を保ちつつ、node_modules.nextを同期対象から外せます。

ソースをC:\devへ除外コピーする

既存プロジェクトを移すときは、再生成できるnode_modules.next、移動先で改めて用意する.gitをコピー対象から外します。

Git Bashのtarを使うと、dotfileを含めながら重いフォルダだけを除外できます。

mkdir -p /c/dev/<project>
cd "<OneDrive上の現プロジェクト>"
tar cf - --exclude=node_modules --exclude=.next --exclude=.git . \
  | (cd /c/dev/<project> && tar xf -)

コピー後はC:\dev\<project>で依存関係を作り直し、ビルドを確認します。

cd /c/dev/<project>
npm install
npm run build

既存のGit履歴も引き継ぐ場合は、除外コピーではなく、移動先でリポジトリをcloneして必要な未コミットファイルだけを慎重に移す方法が安全です。

OneDrive側に.lnkショートカットを作る

OneDrive側には、C:\devの開発フォルダを開く.lnkショートカットを置きます。.lnkは小さな通常ファイルとして同期され、リンク先のnode_modules.nextをOneDriveが辿って同期することはありません。

.lnkは、PowerShellからWScript.Shellを使って作成できます。

$targetPath = "C:\dev\<project>"
$shortcutPath = "C:\path\to\OneDrive\アプリ開発フォルダ(C-dev).lnk"

$shell = New-Object -ComObject WScript.Shell
$shortcut = $shell.CreateShortcut($shortcutPath)
$shortcut.TargetPath = $targetPath
$shortcut.WorkingDirectory = $targetPath
$shortcut.Save()

日本語パスを含むコマンドをGit Bash経由で実行して文字化けする場合は、ASCIIパスで.lnkを作り、その後に移動します。

/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -NoProfile -Command \
  '$s=(New-Object -ComObject WScript.Shell).CreateShortcut("C:\dev\_tmp_link.lnk"); $s.TargetPath="C:\dev\<project>"; $s.WorkingDirectory="C:\dev\<project>"; $s.Save()'

mv /c/dev/_tmp_link.lnk \
  "<OneDrive上の共有資産フォルダ>/アプリ開発フォルダ(C-dev).lnk"

powershell.exeがPATHから見つからない環境でも、Windows PowerShell 5.1は通常、次のパスから起動できます。

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

ジャンクションやシンボリックリンクを使わない

OneDrive側からC:\devへの導線として、ジャンクションやシンボリックリンクを作るのは避けます。

OneDriveがリンク先の実体を辿ると、同期から外したかったnode_modules.nextまで監視対象になり、かえって負荷が増える可能性があります。Git Bashのln -sも、環境によっては期待したシンボリックリンクではなく実体コピーになることがあります。

利用者がクリックしてフォルダを開くための導線なら、ファイルシステム上のリンクではなく.lnkショートカットを使います。

補助的な対策

プロジェクトをすぐに移動できない場合は、次の対策もあります。

  • ビルド中だけOneDriveの同期を一時停止する
  • Windows Defenderの除外対象を必要最小限で設定する
  • .nextを削除してからビルドを再実行する
  • タスクマネージャーでOneDriveやスキャン処理の負荷を確認する
  • 新規プロジェクトは最初からC:\devなどOneDrive外に作る

Windows Defenderの除外設定はセキュリティリスクを伴います。プロジェクト全体や広いフォルダを安易に除外せず、組織のルールに従って判断してください。

注意点

  • 移動前に未コミットの変更がないか確認する
  • .envなどGit管理外の設定ファイルを移し忘れない
  • node_modules.nextはコピーせず、移動先で再生成する
  • OneDrive側にプロジェクト実体を残したまま二重編集しない
  • C:\dev側のソースはGitHubなどで履歴とバックアップを管理する
  • .lnkのリンク先は、利用するPCごとに存在する必要がある

関連記事

まとめ

OneDrive配下でNode.jsやNext.jsのビルドが遅い場合は、コードより先にプロジェクトの配置場所を確認します。

実体をC:\devへ置き、OneDrive側には.lnkショートカットだけを残すと、共有資産からの導線を維持しながら大量ファイルの同期負荷を避けられます。ソースコードの共有とバックアップはGitHubへ任せ、OneDriveはドキュメントやショートカットの管理に使う構成が安定します。

この技術で業務改善しませんか?

Excel VBA・GAS・Webアプリで業務の自動化ツールを開発しています。 「こんなことできる?」というご相談だけでもお気軽にどうぞ。

無料相談はこちら →