Windowsでアプリのインストールを楽にする Scoop

scoop とは

一言でいうと、Windowsへのアプリのインストールを自動化する仕組み (スマホでいうところのアプリストア)。

特長

様々なアプリのインストールが、一貫した操作で一元管理できます。もし scoop を使わなければ、

  1. 公式サイトを検索して開き、
  2. そこから自分の環境にあったインストーラーを見つけ、
  3. ダウンロードし、
  4. ダブルクリックで開いて、
  5. 「次へ」を何度も押し、
  6. 場合によっては余計な抱き合わせ製品をインストールさせられ、

ようやくインストール完了、となります。 これを肩代わりしてくれるのが、scoop です。

Windowsのアプリケーションを、コマンド操作でインストールできます。

主にポータブルアプリの管理に威力を発揮します。 zipを解凍するだけでいいタイプのアプリは、ファイルの置き場所があっちこっちに散らばったりするものですが、scoopは一貫性のあるフォルダーにアプリを配置してくれるので置き場所に困りません。

しかも、もともとポータブルでない、インストーラーつきのアプリであっても、ポータブル化できます。 これはインストーラーを自動操作しているわけではなく、インストーラーの中身を直接取り出すことで実現しています。

アプリケーション本体と設定ファイルを分離して、設定ファイルだけをバックアップしやすくなるよう配慮されています。フォルダー一つをコピーするだけで、すべてのアプリのバックアップが完了するわけです。 これにより簡単に、他のPCにも使い慣れた環境を用意できます。

バージョンごとにフォルダーを分けて配置するので、バージョンアップで不具合が出ても、前のバージョンに簡単に戻せます(古いバージョンを消していなければ)。

他にも Windows向けのパッケージマネージャーはあって、それぞれにメリット・デメリットがあるので、違いを見ていきます。

比較

Microsoft Store

マイクロソフト公式の、パッケージマネージャーというよりはアプリストア。

pros

  • Windows 10以降に標準で入っているので、使うために特段の手順は必要ない。
  • GUIがあり、見た目で操作がわかりやすい。
  • 数回のクリックでインストールできる。
  • 新バージョンが公開されると、アプリが自動更新される。
  • アカウント個別にインストールされるので、他のアカウントに影響を及ぼさない。

cons

  • ストアに登録されていない従来型のアプリケーションは多い。そういったアプリをストアに登録するためには、アプリの作者にやってもらう必要がある。
  • 設定ファイルは深いフォルダーにあるため、アプリの設定のバックアップが難しい。
  • しかもそのフォルダーの名前がバージョンアップごとに変化するため、実行ファイルのパスも固定でない。たとえば、 Microsoft ストアからインストールした WindowsTerminal の場合、C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_<バージョン番号>_x64__<謎の英数字>\WindowsTerminal.exe にある。

winget

これもマイクロソフト公式のパッケージマネージャー。

実は アプリ インストーラー という名前で、Windows10以降に標準搭載されている。

ターミナル(コマンドプロンプト)での操作でアプリを管理する点ではscoopと似ている。

pros

  • microsoft 公式なので安心感がある
  • マニフェスト(アプリ個々の、インストールの仕方を書いた手順書)は、無ければ作って投稿することで、アプリ作者でなくても追加できる。
  • アカウント個別にインストールされるので、他のアカウントに影響を及ぼさない。

cons

  • マニフェストの自動更新機能がないので、新バージョンに追従できない。
  • 手動でインストールしたのか、winget でインストールしたのか区別できない。

chocolatey

コミュニティにより運営されている、パッケージマネージャー。

公式サイト: https://chocolatey.org

ターミナルでのコマンド操作が基本だが、見た目にわかりやすいGUIが用意されているので、初心者でも迷わない。

pros

  • GUIで操作がわかりやすい。
  • マニフェスト(アプリ個々の、インストールの仕方を書いた手順書)は、無ければ作って投稿することで、アプリ作者でなくても追加できる。
  • システム全体に (C:\Program Files) インストールされるので、アプリのインストールやアンインストールは他のアカウントにも影響を及ぼす。
  • OSセットアップツールである Ansible に対応しているため、大量の Windows PCをセットアップするのが多少楽になる。

cons

  • インストールにいちいち管理者権限が必要。
  • マニフェストを書くには複雑なプログラムを書く必要がある。

scoop

pros

  • ポータブル化
  • レジストリを汚さない
  • 環境変数も最小限
  • にも関わらず、スタートメニューから簡単に起動できる
  • システム全体にインストールしないので、他のアカウントに影響を及ぼさない。
  • バージョンアップを見逃さない (アプリの自動更新まではやってくれない)
  • 自分でマニフェストを作るのも簡単

cons

  • GUIがなく、すべてにおいてコマンド操作が必要
  • C:\Program Files のようなよくある場所ではなく、独自の場所にインストールされる。

基本的な使い方

scoop 自体のインストール

まずターミナルを起動します。といっても2クリックで完了します。タスクバーにあるWindowsマークを右クリックして、「ターミナル (Terminal と英語表記のこともある)」をクリックします。

そのPCでターミナルを使うのが初めての場合 (インストール直後など) は以下のコマンドを実行しておく必要があります。

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

その後、以下のコマンドをコピペしてエンターを押すと、全自動でセットアップが終わります。

irm get.scoop.sh | iex

これにより、ユーザーのホームディレクトリに scoop というフォルダーが作られ、以降はそこに各種アプリがインストールされていきます。具体的には C:\Users\<ユーザー名>\scoop です。

バケットの追加

scoop では、アプリのインストールの仕方 (マニフェスト) のひとまとまりのことを、バケットと呼びます。 インストール直後では、ごく一部のマニフェストしかない (具体的には、「ターミナル上で動かすコマンド」しかない) ため、VS CodeChrome などのアプリは含まれていません。そういった GUI アプリが含まれている別のバケットは、使いたいぶんだけ個別に追加する必要があります。

公式バケット

公式バケットの一覧は次のようにして取得できます。

scoop bucket known
  • main : 最初から入っているバケット。ターミナル上で動かすコマンドがまとまっている。
  • extras : GUI のアプリが含まれる。このバケットだけでだいたい揃う。
  • versions : 各種アプリの固定バージョンが含まれる。
  • nirsoft : nirsoft 製品が含まれる。
  • php : PHP 関連
  • nerd-fonts : フォントが含まれる。
  • nonportable : どうしてもポータブル化できないアプリが含まれる。
  • java : Java 関連
  • games : ゲーム関連。 Steam や Ubisoft のクライアントや、エミュレーターなど。

この中から、使いたいバケットを追加していきます。

scoop bucket add extras
scoop bucket add nonportable

コミュニティのバケット

scoop が面白いのは、公式に含まれないアプリであってもバケットを自作できるところです。
たとえば私は、日本語版しかないものなど、日本人向けのものを自作バケット採録しています。
よかったらどうぞお使いください → github.com

# scoop bucket add <バケット名> <バケットURL> の形式。
scoop bucket add mo-san https://github.com/mo-san/scoop-bucket

もちろんこれ以外にも、世界中の人々が自作バケットを公開していらっしゃるので、もし公式バケットになくてもそちらにあれば借りてくることができます (ただし更新が止まっててバージョンが古かったり、急にマニフェストが消えたり、とかはある…)。

アプリのインストール

scoop install <アプリ名>

アプリのアンインストール

scoop uninstall <アプリ名>

でアンインストールできます。

scoop uninstall --purge <アプリ名>

とすると、persist フォルダーにある設定ファイルも含めて、完全に削除します。

更新情報の取得

scoop update && scoop status

で、新しいバージョンが公開されたアプリの一覧が表示されます。

アプリの更新

# 個別にアップデートする場合は
scoop update <アプリ名>

# 全部一気にアップデートしたい場合は:
scoop update *

アプリの検索

scoop search コマンドで、ダウンロードしたバケット内を検索できるのですが、異様に遅いです。

公式サイト scoop.sh の検索機能を使うのがおすすめです。

欲しいアプリ名がわかっている場合は、検索欄にアプリの名前を入力します。 アプリ名とマニフェスト上の名前が異なっていることがあるので、いくつか検索ワードを変えて試してみましょう。たとえば、 Process Monitor というアプリケーションは、 procmon という名前で登録されていたりします。

右上のメニューから Official buckets only のチェックを外すと、非公式のコミュニティバケットも検索されます。

余談ですが、この検索が説明文にも引っ掛かるのを利用して、まだ知らないアプリに出会うのにも使えます。たとえば editor で検索すると、 FamiStudio という8-bit チップチューンの編集ソフトが出てきました。

インストールしたアプリの一覧

一覧を得るコマンドは2種類あります。

scoop list

では表形式で表示されます。Powershellのオブジェクトなので、 (scoop list | Select-Object -Property Name).Name などとするとアプリ名一覧が取れます。

scoop export

では、JSON形式で表示されます。

{
    "apps": [
        {
            "Info": "",
            "Name": "7zip",
            "Updated": "2022-09-22T18:30:24.6504762+09:00",
            "Source": "main",
            "Version": "22.01"
        },
        {
            "Info": "",
            "Name": "aimp",
            "Updated": "2022-09-22T18:33:59.992216+09:00",
            "Source": "extras",
            "Version": "5.03.2398"
        },
// ... 省略

scoop 自体のアンインストール

⚠️これをすると、 scoop でインストールしたすべてのアプリごと消えてしまうので注意

scoop uninstall scoop

こんなときは

scoop update したときの、ずらずら流れる更新情報を表示させない

scoop config show_update_log false

aria2 に関する警告を表示させない

scoop config aria2-warning-enabled false

別のバケットに同名のアプリがあってバッティングしてしまうとき

アプリ名の前にバケット名を付け加えることで、バケットを特定してインストールできます。

scoop install extras/vscode

scoop 自体のインストール場所を変更したい場合

インストールする前であれば、以下のコマンドを実行し、その後インストールコマンド (irm get.scoop.sh | iex) を実行します。 要は SCOOP という環境変数を作り、そこにお望みのパスを指定するわけです。 自分は以下のように C:\scoop にインストールしています。

$env:SCOOP='C:\scoop'

もしすでにインストールしてある場合は、同様に環境変数をセットしたあと、scoopフォルダーを新しい場所に移動するだけです。 起動中のアプリがあるとフォルダーが移動できませんので、その点はご注意を。

バケットの作り方

…は、けっこう長くなるので、別の記事にて。