Scoop bucket を自作する

趣旨

  • ScoopPowerShell で実装された Windows 用ソフトウェア管理ツールです
    • ちょっとした PowerShell スクリプトレットを作成するときはいろいろ参考になりそう
    • PowerShell プロンプトから使うこともできるし Git Bash から使うこともできる
  • インストール可能なソフトウェアのコレクションは bucket という仕組みで管理されています
    • 最近は ScoopInstaller(GitHub Organizations) で公開されるようになったみたい
    • マイグレーションの方法は見当たらない
    • とりあえず scoop bucket rm して scoop bucket add すればよい
      • 今のところどの bucket からインストールしたかの情報は管理されていないため
  • 公開されている bucket に存在しないソフトウェアを使いたいときはいずれかの手段で対応します
    • 公開されている bucket に PR する
    • 自分で bucket を作成する

bucket の作り方

bucket フォルダに App Manifest と呼ばれる形式で記述した json ファイルを置くだけでした。

詳しくは WikiApp Manifests で説明されています。

App Manifest の書き方

eksctl を使おうと思ったとき、公開されている bucket には存在しなかったので自作したのが次の App Manifest です。

architecture 要素の urlhash 属性は scoop に同梱されたスクリプトで補完します。

// eksctl.json
{
    "homepage": "https://github.com/weaveworks/eksctl/",
    "license": "https://raw.githubusercontent.com/weaveworks/eksctl/master/LICENSE",
    "version": "0.5.1",
    "architecture": {
        "64bit": {
            "url": "https://github.com/weaveworks/eksctl/releases/download/0.5.1/eksctl_Windows_amd64.zip",
            "hash": "10aa16faeab984c8b617a8ebf3bc352e113007b264d0761b11fe101201ca422e"
        }
    },
    "bin": [
        [
            "eksctl.exe"
        ]
    ],
    "checkver": {
        "url": "https://github.com/weaveworks/eksctl/releases/tag/latest_release",
        "re": "eksctl (?<version>[\\d.]+)"
    },
    "autoupdate": {
        "architecture": {
            "64bit": {
                "url": "https://github.com/weaveworks/eksctl/releases/download/$matchVersion/eksctl_Windows_amd64.zip"
            }
        }
    }
}

最新バージョンがあるかどうかを確認します。

$ powershell ./scoop/bin/checkver.ps1  eksctl .
eksctl: 0.11.1 (scoop version is 0.5.1) autoupdate available

最新バージョンに更新します。

$ powershell ./scoop/bin/checkver.ps1 -Update eksctl .
eksctl: 0.11.1 (scoop version is 0.5.1) autoupdate available
Autoupdating eksctl
Downloading eksctl_Windows_amd64.zip to compute hashes!
Loading eksctl_Windows_amd64.zip from cache
Computed hash: 79ab60ca47cf204fb9115aa7e6d8840f5abe4dcacdd0474244895b329a648aa1
Writing updated eksctl manifest

App Manifest にダウンロード可能なアーカイブのURLとアーカイブハッシュ値が反映されています。

// eksctl.json
{
    "homepage": "https://github.com/weaveworks/eksctl/",
    "license": "https://raw.githubusercontent.com/weaveworks/eksctl/master/LICENSE",
    "version": "0.11.1",
    "architecture": {
        "64bit": {
            "url": "https://github.com/weaveworks/eksctl/releases/download/0.11.1/eksctl_Windows_amd64.zip",
            "hash": "79ab60ca47cf204fb9115aa7e6d8840f5abe4dcacdd0474244895b329a648aa1"
        }
    },
    "bin": [
        [
            "eksctl.exe"
        ]
    ],
    "checkver": {
        "url": "https://github.com/weaveworks/eksctl/releases/tag/latest_release",
        "re": "eksctl (?<version>[\\d.]+)"
    },
    "autoupdate": {
        "architecture": {
            "64bit": {
                "url": "https://github.com/weaveworks/eksctl/releases/download/$matchVersion/eksctl_Windows_amd64.zip"
            }
        }
    }
}