up:: Scoop
source:: App Manifest Autoupdate · ScoopInstaller/Scoop Wiki
source:: Scoopを使ったWindows環境構築のススメ - Super!! - Qiita

最小構成

{
    "version": "2.0",
    "url": "http://download.sysinternals.com/files/Ctrl2Cap.zip",
 
    "##": "ctrl2cap.exeへパスを通す",
    "bin": "ctrl2cap.exe"
}

基本的に、versionとurlさえあればインストールは可能。
加えてhashがあれば怒られない。

version

バージョン。

url

ダウンロードパス。
当然だが、zipなどの直リンクを張る。バージョン違いでパスが変わる場合は正規表現を使う。

hash

ハッシュ値。
分からなくても、hashをつけてない状態で実行すれば教えてくれる。

コメント用。

bin

pathを通し、ターミナルで名前を入力することで起動できる。

その他

{
    "version": "20230105",
    "description": "Download images from Pixiv and more!",
    "homepage": "https://nandaka.devnull.zone/",
    "license": "BSD-2-Clause",
    "url": "https://github.com/Nandaka/PixivUtil2/archive/refs/tags/v20230105.zip",
    "hash": "f919df9a1c54c6336e0b29bf15d13b9e69af23e9cbb9f3ed467e3406cebd634e",
    "extract_dir": "PixivUtil2-20230105",
    "pre_install": [
        "if (-not (Test-Path \"$persist_dir\")){",
        "   New-Item \"$dir\\config.ini\" | Out-Null",
        "   New-Item \"$dir\\list.txt\" | Out-Null",
        "   }"
    ],
    "persist": [
        "config.ini",
        "list.txt"
    ],
    "bin": "PixivUtil2.py",
    "shortcuts": [
        [
            "PixivUtil2.py",
            "PixivUtil2"
        ]
    ],
    "checkver": {
        "github": "https://github.com/Nandaka/PixivUtil2"
    },
    "autoupdate": {
        "url": "https://github.com/Nandaka/PixivUtil2/archive/refs/tags/v$version.zip",
        "hash": "$url.sha256",
        "extract_dir": "PixivUtil2-$version"
    }
}
 

description

パッケージの概要。

homepage

ホームページ。
scoop homeで開くurl。

license

ライセンス。
文字列でMITとか書いてもいいけど、“identifier”でfreewareとか書いたり、“url”としてライセンスファイルURLに飛ばしてもいい。

persist

永続ファイルをscoop専用フォルダに移す。
ここだけに書いても意味は無く、pre_installでファイルやフォルダを作る必要がある。

オートアップデート

{
    "homepage": "https://github.com/koron/vim-kaoriya",
    "description": "Vim + kaoriya build system, without gvim.",
 
    "version": "8.1.0005.20180520",
    "architecture": {
        "32bit": {
            "url": "https://github.com/koron/vim-kaoriya/releases/download/v8.1.0005-20180520/vim81-kaoriya-win32-8.1.0005-20180520.zip",
            "hash": "afacd6e27304136f5ebae3edddf6e747f410880fa6a986d80be772e03ef56d36",
            "extract_dir": "vim81-kaoriya-win32"
        },
        "64bit": {
            "url": "https://github.com/koron/vim-kaoriya/releases/download/v8.1.0005-20180520/vim81-kaoriya-win64-8.1.0005-20180520.zip",
            "hash": "53e8dd08e2249ce8a54784e16469151a7bf9857ac9acf3a1b341ac4e7da26fb2",
            "extract_dir": "vim81-kaoriya-win64"
        }
    },
 
    "bin": "vim.exe"
}

architecture

32bit、64bitによって以下の属性を書き分けられる要素。

  • url
  • hash
  • bin
  • shortcuts
  • pre_install
  • post_install
  • installer
  • uninstaller
  • extract_dir

extract_dir

ディレクトリ指定。
ここで指定したフォルダやファイルを、extract_toで指定したフォルダ以下に展開する。もちろんzipファイル以下にあるフォルダやファイルも問題なく指定できる。

checkver

GitHub、HTML、JSONに検索をかけ、version要素に代入するバージョンの取得を行える。
上手く動いてるかはcheckver.ps1でわかる。

GitHub

homepageにgithubへのURLを割り当ててる場合は、そのまま”github”を渡せばいい。
そうでない場合、そのままgithubリポジトリへのurlを{“github”}として渡す。別にリリースページでなくていい。自動的にlatestのタグからバージョンを取得する。

プレリリース版は使えない。
また、タグが正規表現外の記号を使ってるとダメらしい。その時はおとなしく

HTML

"checkver": {
    "re": "<td nowrap=\"\">(?<v1>[\\d]+.[\\d]+.[\\d]+)+-jp-(?<v2>[\\d]+)</td>",
    "replace": "${v1}.${v2}"
},
re

regexでも表現可。“url”とセットで渡す。正規表現により、一致する情報を抜き出す。
ヒットした要素には名前を付けられる。()の内部の先頭に?<VAR_NAME>とすることで、その名前がつく。()が一つしかないと自動的にそれがversionになる。
つまりマッチではなくグループの方でバージョンをヒットさせないと処理されない。
Reguler Expression

replace

reで見つけた要素を繋げる。
$によって変数を呼びくっつけよう。

JSON

一応。“jp”にJSONPathで指定すればいい。

autoupdate

checkverで取得したバージョンをもとに、

  • url
  • hash
  • extract_dir
  • notes(バージョン情報の使用不可)

を更新する雛形の定義ができる。

基本的に、urlさえ指定しておけば怒られない。
サイトでhash値が公開されている場合はそれを拾う正規表現を書くことになる。

$version

ここでは$versionが.区切りだった場合のみ、前から

  • $majorVersion
  • $minorVersion
  • $patchVersion
  • $buildVersion

としてそれぞれの数字を使える。

architecture

architectureが分かれている場合は、autoupdate内でもarchitecture属性を作る。

checkverで指定した変数

autoupdateでも使える。ただし、たとえばclickという変数名ならmatchClickと、matchがついてUppercaseになるので注意。

実際の更新

checkver.ps1というものを実行すると自動的に更新してくれる。
めんどいならGitHub Actionがあるのでそれを使う。

{
    "version": "2.0",
    "url": "http://download.sysinternals.com/files/Ctrl2Cap.zip",
 
    "##": "ctrl2cap.exeへパスを通し、スタートメニューにも表示させる",
    "bin": "ctrl2cap.exe",
    "shortcuts": [
        [
            "ctrl2cap.exe",
            "ctrl2cap"
        ]
    ],
    "notes": [
        "NOTE: まだキーの置換は完了していません!!",
        "スタートメニューからctrl2capで検索、管理者権限で実行してください。"
    ]
}

shortcuts

始めに実体ファイル名、次にショートカットの名前を指定した2次元配列でスタートメニューにショートカットを作る。

notes

ターミナルからつけた時の実行後文章。
1次元配列で、改行したいときに要素を区切る。

depends

依存関係を記述する。
これだけでscoop上で依存関係をインストールしてくれる。

source:: Pre Post (un)install scripts · ScoopInstaller/Scoop Wiki · GitHub

{
    "version": "2.0",
    "url": "http://download.sysinternals.com/files/Ctrl2Cap.zip",
 
     "##": "自動でcapsをctrlに置き換える(要 管理者権限)",
 
    "pre_install": {
        "script": "scoop install sudo"
    },
    "installer": {
        "script": [
            "sudo $dir\\ctrl2cap.exe /install",
            "if ($? == $false) {",
            "    Write-Host '===================================' -Foreground Red",
            "    Write-Host 'ctrl2capの実行に失敗しました。' -Foreground Red",
            "    Write-Host 'スタートメニューから再度起動してください。' -Foreground Red",
            "    Write-Host '===================================' -Foreground Red",
            "}"
        ]
    },
 
    "bin": "ctrl2cap.exe",
    "shortcuts": [
        [
            "ctrl2cap.exe",
            "ctrl2cap"
        ]
    ]
}

script

powershellでの処理を記述できる。文字列として渡し、改行が必要なら要素を区切る。
installerの中で使う。

pre_install

インストール前に行う処理を記述する。
[]で区切り、powershellでの入力を一文ずつ記述する。

installer

インストーラーとして実行する。

$dir

解凍されている圧縮ファイルのディレクトリパス。
scriptで自分についてコマンドを実行したいときなどに。
ほかにも$versionなんてのもあるが、これはどっちかって言うとurlに記述する印象。

sudo

scoopの要素ではなく、mainバケットのコマンド。powershellの中で管理者権限をスキップできる。
script要素の中で使う。