scoop update でnewフォルダが存在しないエラーの暫定解決方法

# はじめに

Windows用のパッケージ管理ツール`scoop` が便利で重宝してるのですが、update を実行すると数日前から以下のようなエラーが出るようになってしまいました。詳しい原因はわかりませんが、とりあえず動くようにできたので対応方法を残しておきます。

```bat
PS C:\> scoop update
Updating Scoop...
Remove-Item: C:\Users\{ユーザ名}\scoop\apps\scoop\current\libexec\scoop-update.ps1:79
Line |
  79 |              Remove-Item $newdir -Force -Recurse
     |              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Cannot find path 'C:\Users\{ユーザ名}\scoop\apps\scoop\new' because it does not exist.
Scoop download failed. If this appears several times, try removing SCOOP_REPO by 'scoop config rm SCOOP_REPO'
```

# 環境

* Windows
エディション：Windows 11 Pro
バージョン：22H2

* scoop バージョン
```bat
PS C:\> scoop -v
Current Scoop version:
v0.3.1 - Released at 2022-11-15
```

* PowerShell バージョン
```bat
PS C:\> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.22621.963
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.22621.963
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
```

* gitバージョン (scoop でインストールしたもの)
```bat
PS C:\> git -v
git version 2.39.0.windows.1
```

# 症状
`scoop update` を実行すると、上記のエラーになってしまいます。
また、`git -v` を実行しても標準出力には何も表示されずに終了してしまいます。
```bat
PS C:\> git -v

PS C:\>
```
`C:\Users\{ユーザ名}\scoop\apps\git\current`内のgit.exe を直接実行すれば動くのですが、パスが通ってる`shims`フォルダ内の実行ファイルが動いてくれません。


# 試したこと

### config の削除
最初にエラーメッセージに書かれている`'scoop config rm SCOOP_REPO'`を試してみましたが効果ありませんでした。


### クリーニング
ネットで調べても同じようなエラーが見つからなかったので、以下のコマンドで環境のクリーニングを試してみましたが結果は変わらずでした。

```bat
PS C:\> scoop cleanup *
PS C:\> scoop cache rm *
```

### checkup確認
次にscoop上の問題を確認するcheckupコマンドを試しました。

```bat
PS C:\> scoop checkup
WARN  Windows Developer Mode is not enabled. Operations relevant to symlinks may fail without proper rights.
  You may read more about the symlinks support here:
  https://blogs.windows.com/windowsdeveloper/2016/12/02/symlinks-windows-10/
ERROR '7-Zip' is not installed! It's required for unpacking most programs. Please Run 'scoop install 7zip' or 'scoop install 7zip-zstd'.
ERROR 'Inno Setup Unpacker' is not installed! It's required for unpacking InnoSetup files. Please run 'scoop install innounp'.
ERROR 'dark' is not installed! It's required for unpacking installers created with the WiX Toolset. Please run 'scoop install dark' or 'scoop install wixtoolset'.
```

書かれている通り開発者モードをONにしアプリをインストールしてみましたがこちらも効果なしでした。

### 再インストール
次にscoop自体を削除してみました。`scoop uninstall scoop` を実行し、削除に失敗したファイルが残ってしまったので`C:\Users\{ユーザ名}\scoop`フォルダを直接削除しました。
削除後scoop を再インストールしましたが、解決せずでした。

### 移植 
最後に正常に動いてるPCのscoopフォルダを丸ごとコピーして試してみました。結果は問題なく正常に動いてくれました。


# とりあえずの解決方法

scoopで管理されているアプリは`C:\Users\{ユーザ名}\scoop`に格納されています。
動いてるPCのscoopフォルダをWinMergeで比較してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1944226/6e2700b0-5f6d-3cd2-90bd-0137024aadbe.png)

動かないPCには「.github」と「.vscode」があり、動くPCには「.git」がある状態でした。

「.github」と「.vscode」を削除して別PCから「.git」をコピーすると動いてくれるようになりました。

```bat
PS C:\> scoop update
Updating Scoop...
WARN  Uncommitted changes detected. Update aborted.
Scoop was updated successfully!
```

# エラー箇所の確認

エラーとなっているスクリプトの`scoop-update.ps1:79`も一応覗いてみました。

```bash
       # get git scoop
        git_cmd clone -q $configRepo --branch $configBranch --single-branch "`"$newdir`""

        # check if scoop was successful downloaded
        if (!(Test-Path "$newdir\bin\scoop.ps1")) {
            Remove-Item $newdir -Force -Recurse
            abort "Scoop download failed. If this appears several times, try removing SCOOP_REPO by 'scoop config rm SCOOP_REPO'"
        } 
```

`Remove-Item`の行がエラーが出てる79行目です。
全体を見たわけではないですが、`git clone`を実行してその中に`scoop.ps1`のファイルが存在しない場合にエラーとなるようです。`$newdir`が存在してなさそうなのでgitの操作がうまく動いてないんでしょうか。

エラーは本記事の2，3日前くらいから出るようになりました。現在執筆時点でscoopの再インストールを試したら上記エラーは出なくなりましたが、バケットの追加でエラーになってしまいます。PowerShell のV7 でも同じでした。今はタイミングの悪い時期なんですかね？？

```bat
PS C:\> scoop bucket add extras
Checking repo... ERROR 'https://github.com/ScoopInstaller/Extras' doesn't look like a valid git repository

Error given:
```