PackageManagement＋ChocolateyGet によるパッケージ管理

Windowsパッケージマネージャとして、一から `ChocolateyGet` を導入する備忘録。

## パッケージマネージャ

ソフトウェアのインストール・アップデート・アンインストールを管理してくれるツール。
これらの作業を手作業でやるよりもずっと簡単で間違いなくできる。

他のパッケージマネージャでは、Linux ライクな `Scoop` もおすすめです！
（参考：[Scoop を使った Windows 環境構築のススメ - Super!! - Qiita](https://qiita.com/rkbk60/items/12dc8fb14042888113d0)）

### PackageManagement

Windows10に標準搭載されているパッケージマネージャ。
`powershell` のコマンドレットから利用する。

実際にパッケージを検索したりインストールしたりする機能をロバイダとして指定する。
このプロバイダが何であれ、ユーザーは `PackageManagement` のコマンドから操作できる

### ChocolateyGet

`PackageManagement` のプロバイダに指定できるものの一つ。
よく知られているのは `Chocolatey` なんですが、よくインストールやアンインストールに失敗することで評判。
なのでそのへんの心配がない `ChocolateyGet` を使っていきましょう。

## インストール

1. `powershell` を管理者権限で起動

1. Powershell スクリプトの実行ポリシー変更

     `powreshell` スクリプトが実行できるようにする。
     `-Scope Process` で現在のセッションに限り変更する。

     ```powershell:powershell(管理者)
     Set-ExecutionPolicy RemoteSigned -Scope Process
     ```

1. `ChocolateyGet` プロバイダを検索

     ```powershell
     Find-PackageProvider ChocolateyGet -verbose
     ```

    初めて `PackageManagement` を使うときは次のメッセージが出るので `Y` を入力してインストールしておく。

     ```powershell:nugetインストール（初回）
     プロバイダー 'nuget v2.8.5.208' がインストールされていません。
     nuget は、https://onegetcdn.azureedge.net/providers/Microsoft.PackageManagement.NuGetProvider-2.8.5.208.dll
     から手動でダウンロードしてインストールすることができます。
     PackageManagement で nuget を自動的にダウンロードしてインストールしますか?
     [Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y
     ```

1. `ChocolateyGet` プロバイダをインストール

     ```powershell
     Install-PackageProvider ChocolateyGet -verbose
     ```

## 利用方法

前提として、次の手順を踏む。

1. `powershell` を管理者権限で起動

1. Powershell スクリプトの実行ポリシーを変更

     ```powershell:powershell(管理者)
     Set-ExecutionPolicy RemoteSigned -Scope Process
     ```

1. 現在のセッションで使用するプロバイダとして `ChocolateyGet` をインポート

     `powershell` を開くたびインポートする必要がある、はず。

     ```powershell
     Import-PackageProvider ChocolateyGet
     ```

     `Get-PackageProvider` コマンドで出力される結果に `ChocolateyGet` が含まれていればよい。

### Choco.exe

初回コマンド実行時に次のメッセージが表示された場合、`Y` を入力してインストールする。

```powershell
Choco.exe is required to continue
ChocolateyGet is built on Choco.exe. Do you want ChocolateyGet to install Choco.exe from
'https://chocolatey.org/install.ps1' now?
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): y
```

### パッケージ検索

`Find-Packeg` コマンドを使用。

`-ProviderName ChocolateyGet` オプションで利用するプロバイダとして `ChocolateyGet` を指定する。
`-Name` オプションではパッケージ名を指定。

```powershell
Find-Package -ProviderName ChocolateyGet -Name gitea
```

パッケージ名の指定にはワイルドカードとして `*` も利用できる。

### パッケージインストール

```powershell
Install-Package -ProviderName ChocolateyGet -name gitea
```

次のようなメッセージが表示される。
`Y` を入力すればインストールする。

```powershell
パッケージは、信頼済みとマークされていないパッケージ ソースから取得されています。
'https://www.chocolatey.org' からソフトウェアをアンインストールしますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): y

Are you sure you want to perform this action?
Installing package 'gitea'. By Installing you accept licenses for the package(s). The package possibly needs to run
'chocolateyInstall.ps1'.
[Y] はい(Y)  [N] いいえ(N)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): y
```

### パッケージのアンインストール

```powershell
Get-Package gitea -provider ChocolateyGet -verbose | Uninstall-Package -AdditionalArguments '-y --remove-dependencies' -Verbose
```

## 参考

- [jianyunt/ChocolateyGet](https://github.com/jianyunt/ChocolateyGet)
- [WindowsのPackageManagementについての知見まとめ - Qiita](https://qiita.com/k_takashi0309/items/3992b8ee68c256202bcf)
- [PowerShell の PackageManagement で ChocolateyGet を使う](https://stuncloud.wordpress.com/2017/09/11/powershellget/)
- [PowerShell の ExecutionPolicy のスコープとかについて詳しく - Qiita](https://qiita.com/kikuchi/items/59f219eae2a172880ba6)