全Scoopコマンド解説 その３ ～使用頻度（低）～

# はじめに

全Scoopコマンド解説の最終回です。

今までの記事で紹介したコマンドと比べると使用頻度は少ないですが、
使えるようになるとScoop使いこなしてる感が出て面白いです。

|#| 記事リンク | 使用頻度 | Scoopサブコマンド |
|:-:|:-:|:-:|:-----------------|
|-| [全Scoopコマンド解説 その１ ～使用頻度（高）～](https://qiita.com/nimzo6689/items/1ab33380366e324c0b84) | 高 | help, search, bucket, install, list, info, status, update, uninstall |
|-| [全Scoopコマンド解説 その２ ～使用頻度（中）～](https://qiita.com/nimzo6689/items/0fb3e918248866c2c23e) | 中 | home, cache, cleanup, hold, unhold, which, reset, checkup |
|今回はココ→| 全Scoopコマンド解説 その３ ～使用頻度（低）～ | 低 | config, alias, create, depends, export, prefix, virustotal |
※表中のサブコマンドの並びに沿って紹介していきます。

# config

Scoop内部で保持する設定情報を取得、削除するコマンドです。

```powershell:構文
scoop config name <value>
scoop config rm name
```

利用できる設定項目については以下のようになっています。
※本当はもう少しありますが、ほぼ使用する機会がないと思ったので割愛しました。

|設定項目名|設定値|デフォルト値|説明|
|:--|:--|:--|:--|
|SCOOP_REPO|Scoop本体のGitリポジトリURL|https\://github.com/lukesampson/scoop|ローカルで使用中のScoopのリポジトリを設定|
|SCOOP_BRANCH|SCOOP_REPO内のGitブランチ名|master|`SCOOP_REPO`のブランチを設定|
|proxy|[username:password@]host:port|default|Scoopが使用するProxyを設定<br><br>社内で認証付きのProxyへ接続する必要がある場合、こちらを設定します。<br>認証不要のProxyであればインターネットオプション（`inetcpl.cpl`）から指定するだけでOK。<br>逆にインターネットオプションで設定されたProxyを使用したくない場合は、こちらの設定値を他のProxyに上書きしておくか、`none`とすればProxyなしで使用可能。|
|virustotal_api_key|VirusTotalのAPIキー|-|詳細は`virustotal`コマンドの解説をご参照ください|
|aria2-enabled|true or false|false|aria2による複数コネクションによる並列ダウンロードを有効／無効に切り替える|
|aria2-retry-wait|0以上の整数（秒単位）|2|aria2使用時のリトライ通信をするまでの待ち時間を設定|
|aria2-split|0以上の整数|5|aria2使用時の一つのScoopアプリのダウンロードにつき、いくつのコネクションを使用するかを設定|
|aria2-max-connection-per-server|0以上の整数|5|aria2使用時の一つのサーバーにつき、同時に接続できるコネクション数の最大値を設定|
|aria2-min-split-size|1M - 1024M|5M|aria2使用時の分割ダウンロード時における最小ファイルサイズを設定|

ちなみにscoop configで設定した情報は`~\.config\scoop\config.json`に保存されます。
そのため、PC移行する場合はこちらのファイルもバックアップに取っておくことで設定の引継ぎが可能です。

以下、使用例としてaria2を有効にする手順と無効にする手順を記載しておきます。
※`install`、または、`update`コマンド時にaria2を使用してファイルをダウンロードできるようになります。

```powershell:例
# aria2を有効化する
scoop install aria2
scoop config aria2-enabled true
#=>'aria2-enabled' has been set to 'true'

# aria2の有効になっているかを確認
scoop config aria2-enabled
#=>True

# aria2を無効化する（falseで再設定するのでも可能）
scoop config rm aria2-enabled
#=>'aria2-enabled' has been removed

scoop config aria2-enabled
#=>'aria2-enabled' is not set
```

# alias

Scoopコマンド用のエイリアスを作成、一覧表示、削除するためのコマンドです。

```powershell:構文
scoop alias add <name> <command> <description>
scoop alias list [-v|--verbose]
scoop alias rm <name>
```

ailiasコマンドを使うことにより`scoop uninstall <app>`を`scoop remove <app>`でも実行できるようにしたり、
`scoop uninstall <app>; scoop install <app>`を`scoop reinstall <app>`をするだけで実行できるようにしたりできます。

また、新しくPowerShellスクリプトファイルを作成してユーザ定義のサブコマンドを追加することもできます。
こちらの方法は長くなるため、別記事に書きました。
https://qiita.com/nimzo6689/items/fcf07a74877d2171ac37

以下、主に作成されそうなaliasを作成するサンプルです。

```powershell:例
# ---- 既存のコマンドを別名で実行する系 -------------------------
# 更新可能な全Scoopアプリを一括更新する。
scoop alias add upgrade 'scoop update *' 'Update all apps.'
# uninstallコマンドの別名を定義。
scoop alias add remove 'uninstall $args[0]' 'Remove Scoop apps.'

# ---- デフォルトでオプションを付加する系 -------------------------
# cleanup時にcacheも合わせて削除する。
# 既存のコマンド名と同名にしてしまうと既存のコマンドが実行されてしまうため、別名を付ける必要があります。
scoop alias add xcleanup 'scoop cleanup $args[0] --cache' 'Clean Scoop apps by removing old versions and caches.'

# ---- 複数のコマンドをまとめて実行する系 -------------------------
# 全Scoopアプリの最新情報を更新してからScoopのstatusを表示する。
scoop alias add outdated 'scoop update; scoop status' 'Show all outdated Scoop apps.'
# Scoopアプリの再インストールを行う。
scoop alias add reinstall 'scoop uninstall $args[0]; scoop install $args[0]' 'Uninstall and then install app'

# 作成したaliasを確認する。
scoop alias list

# エイリアスの説明も見たい場合は-v or -verboseオプションを付けることで表形式で参照できます。
scoop alias list -v

# 作成したエイリアスを削除する。
scoop alias rm outdated
```

# create

Scoopアプリのメタ情報となるマニフェストファイルを作成するためのコマンドです。

```powershell:構文
scoop create <url>
```

自身で作成したマニフェストファイルを使ってアプリをインストールできる準備をするためのコマンドです。
これがあることで、Scoopに登録されていないアプリでもScoop管理の対象に入れてインストールすることができます。

アプリによっては作成が難しいものもありますが、GitHubのReleaseページにzipでダウンロードできるアプリであれば割と簡単に作成が可能です。

マニフェストファイルは作成する前に誰か既に作っている人がいないか確認しておきましょう。
`scoop search`では検索に引っ掛からないことも多いので、
こちらのページから検索することをおススメします。
https://github.com/rasa/scoop-directory/blob/master/by-apps.md

マニフェストファイルの作り方の詳細は省略しますが、以下の記事が丁寧に解説されているのでこちらご参照ください。
[Scoopを使ったWindows環境構築のススメ - Super!!](https://qiita.com/rkbk60/items/12dc8fb14042888113d0)

# depends

ScoopアプリがどのScoopアプリに依存しているかを確認するためのコマンドです。

```powershell:構文
scoop depends <app>
```

使用用途がいまいち思いつきにくいですが、installする際に依存しているアプリのインストールをスキップするオプションがあるくらいなので、
何かしらのトラブル時に使用する機会があるのかもしれません。

```powershell:例
# tarに依存しているアプリを確認
scoop depends tar
#=>gzip
```

#export

インストール済みのScoopアプリをエクスポートするコマンドです。

```powershell:構文
scoop export > filename
```

Python界でいう`pip freeze > requirements.txt`と同じ意味となります。
ただし、肝心のimportコマンドがまだリリースされていない状況なので、
実際はまだ使用することができません。（実行しても意味がないため）

以下のプルリクで対応中とのことですが、進捗もちょっと微妙なので
個人でimportするPowerShellスクリプトを作成するのが無難なようです。
https://github.com/lukesampson/scoop/pull/2105

こちらに関しては後日別の記事にて対応方法記載したいと思います。

# prefix

Scoopアプリがインストールされているフォルダまでのパスを取得するためのコマンドです。

```powershell:構文
scoop prefix <app>
```

やっていることは単純でScoopアプリのインストール先のフルパスを表示するだけです。
グローバルインストールやScoopルートのカスタマイズなどしない限り、出力されるパスは以下となるため、
通常ケースでは特に使用されるコマンドではありません。

`C:\Users\${user_name}\scoop\apps\${scoop_app_name}\current`

では、どういうときに使うかというと、
ライブラリのみ提供するScoopアプリ（`scoop which`で出てこない場合）や
`scoop reset`せずに特定のScoopアプリの実行ファイルを使用したい場合などに使えます。

```powershell:例
# lessのインストール先を表示
scoop prefix less
#=>C:\Users\xxxxx\scoop\apps\less\current

# resetせずにPHP7.3系を実行したい場合
& "$(scoop prefix php73)\php.exe" --version
#=>PHP 7.3.7 (cli) (built: Jul  3 2019 14:34:10) ( ZTS MSVC15 (Visual C++ 2017) x64 )
#=>...
```

# virustotal

VirusTotalを使ってScoopアプリのマルウェア検知を行うコマンドです。

```powershell
scoop virustotal (* | <app> | <app> ...) [options]
```

VirusTotalというのはオンラインでマルウェア検知を行うサービスのことで
今はGoogle傘下の企業から提供されています。
検知したいファイルをアップロードするだけで50種類以上のアンチウイルスソフトにより検査されるため、
セキュリティソフトのセカンドオピニオン的ツールとして使用されています。

ScoopではScoopでインストールしたアプリにセキュリティ的な問題がないかを
VirusTotalで確認するためのコマンドが用意されており、
それが最後に紹介するvirustotalサブコマンドというわけです。

具体的な処理の流れですが、まずScoopのマニフェストファイル内に書かれている
ハッシュ値をVirusTotalにリクエストし、VirusTotalが過去に検査したことのあるファイルだと判断されれば、
当時検査で出た結果が表示されます。

既にVirusTotalが把握済みのケースまでであれば、特にVirusTotalのAPIキーの設定は不要ですが、
もしVirusTotalが検知したことのないハッシュ値が送信された場合は
Scoopアプリのダウンロード元のリンクをVirusTotalにリクエストすることになっています。

ここで始めてVirusTotalのAPIキーが必要となるため、検知試行率を上げたい人は設定しておくとよいでしょう。[^1]

[^1]: VirusTotalはアップロードされたファイルを第3者（主にセキュリティ会社）に提供するビジネスをしているため、よく機密情報の漏洩に繋がると言及されていますが、Scoop自体はVirusTotalに対してマニフェストファイルに記載されているハッシュ値とファイルのダウンロードURLしか送信していないため、機密情報の漏洩に繋がることはないかと思います。（あくまで責任は取れませんが）

| ショートオプション | ロングオプション | 説明 |
|:-:|:--|:--|
| -a | --arch \<32bit or 64bit\> |アーキテクチャを指定してインストールを行う。<br><br>※Scoopアプリがアーキテクチャごとのインストールをサポートしていた場合のみ有効|
|-s|--scan|VirusTotalがまだ検知したことないハッシュ値のファイルであった場合、<br>Scoopアプリのダウンロードリンクを送信して分析を行う。<br>※VirusTotalのAPIキーを`scoop config virustotal_api_key xxxxx`でAPIキーを設定しておく必要あり|
|-n|--no-depends|依存しているアプリは検知対象外にする。|

# おわりに

以上でScoop全24個のコマンド解説は終了です。

今回、記事を書くにあたりソースコードやGitHubのIssues、Wikiをほぼ横断的に見てましてが、
Issuesで面白い投稿を発見しました。

[Thanks #2549](https://github.com/lukesampson/scoop/issues/2549)

見ていて和みますね。

私自身もここ数年、Scoopを導入したことにより、各アプリが常に最新版に維持できるようになり、
環境構築の手間も省け、新しいツールを知る機会も得られました。

まだ各ソフトウェアのサイトに行ってダウンロードするやり方を取っている人は
ぜひ一度Scoopの快適さを味わってほしいと思ってます。