📘
Scoopを調べてみる
久しぶりに windows に触れている
- いちエンジニアとして、いろんなアプリケーションを入れたい気持ちと、windows をなるべく汚したくない気持ちとがぶつかり合っている
- Cドライブ(システムドライブ)を汚したくない、というのは同様の気持ちの人は多いのではないだろうか
- 環境変数の増加
- レジストリの増加
- Program Files の増加
- ... こういうのが嫌だという気持ちですね。現実的に、OSを入れなおすと入れたアプリケーションが全部飛ぶのはつらいよってのもある
- Cドライブ(システムドライブ)を汚したくない、というのは同様の気持ちの人は多いのではないだろうか
Scoop
- windows で動くパッケージマネージャである Scoop は私の不満をある程度解消してくれそうである
- Eliminates permission popup windows
- Hides GUI wizard-style installers
- Prevents PATH pollution from installing lots of programs
- Avoids unexpected side-effects from installing and uninstalling programs
- Finds and installs dependencies automatically
- Performs all the extra setup steps itself to get a working program
- 簡単に意訳すると
- 権限確認のダイアログが出ない
- GUIのインストールダイアログが出ない
- アプリを入れることによって、環境変数PATHを汚さない
- アプリのインストールやアンインストールによる影響を他アプリに与えない
- 依存関係を加味してアプリをインストールできる
- 後から拡張できるよ
導入
ドキュメントにしたがって調査する
- powershell にて
iwr -useb get.scoop.sh | iex
- ふむ。powershell など使わないので、はっきりいってコマンドの意味がわからなかった。それぞれ調べたものが以下だ
-
iwr
はcurl
やwget
みたいなもので、Invoke-WebRequest
というコマンドの略称である-
-useb
はおそらく-UseBasicParsing
の略称なのだが、ドキュメントにはPowerShell 6.0.0 以降では非推奨
と書いてある
-
-
iex
はInvoke-Expression
で、受け取った文字列をコマンドとして実行するというもの
-
- つまり、web から取ってきたシェルの内容を実行する。というコマンドがこれなわけだ
- ところで、
get.scoop.sh
が謎なわけだけど、これはブラウザでアクセスするとinstall.ps1
が返ってくる。どこで紐づけているのか。
powershell バージョンを確認
- 私の環境の powershell は、windows をインストールしてからノータッチである。ちなみに windows 11 である
- バージョンを見てみよう
PS C:\Users\J2> $PSVersionTable
Name Value
---- -----
PSVersion 5.1.22000.832
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.22000.832
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
- 先ほどまで調査していたドキュメントは
powershell-7.2
のものなので、まずは powershell versionを上げるのが良いかな
powershell バージョン更新を考える
- ぱっと見た感じ、5.1 => 7.2 ではそれなりに大きく変更が入っている
- 5.1系と7系とで別物としてインストールされるらしい。そんなに利用しない身からすると、間違いやすくなるだけなのでこれはやめてほしい
個別のインストール パスと実行可能ファイル名
PowerShell 7 は新しいディレクトリにインストールされ、Windows PowerShell 5.1 とのサイド バイ サイド実行が可能になります。
バージョン別のインストール場所:
Windows PowerShell 5.1: $env:WINDIR\System32\WindowsPowerShell\v1.0
PowerShell 6.x: $env:ProgramFiles\PowerShell\6
PowerShell 7: $env:ProgramFiles\PowerShell\7
新しい場所が PATH に追加され、Windows PowerShell 5.1 と PowerShell 7 の両方を実行できるようになります。 Powershell 6.x から PowerShell 7 に移行する場合は、PowerShell 6 が削除され、PATH が置き換えられます。
Windows PowerShell では、PowerShell の実行可能ファイルには powershell.exe という名前が付けられます。 バージョン 6 以降では、実行可能ファイルには pwsh.exe という名前が付けられます。 新しい名前を使用すると、両方のバージョンのサイド バイ サイド実行をサポートしやすくなります。
結論としては、私は powershell-7.2 を入れない
- いまのところ powershell をそこまで使う予定がない
- 5.1 と 7系とで別扱いなので、入れるほうが混乱の元となる懸念
- Scoop を導入するにあたっては 5.1 で問題ないし、7.2 を導入するのは大げさと考えた
あらためて導入を進める
- powershell にて
iwr -useb get.scoop.sh | iex
- 1発目の実行結果は以下のエラーであった
PowerShell requires an execution policy in [Unrestricted, RemoteSigned, ByPass] to run Scoop. For example, to set the execution policy to 'RemoteSigned' please run 'Set-ExecutionPolicy RemoteSigned -Scope CurrentUser'.
Abort.
- 指示に従って進める
PS C:\Users\J2> Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): Y
- 無事権限設定が済んだので、あらためて
PS C:\Users\J2> iwr -useb get.scoop.sh | iex
Initializing...
Downloading...
Extracting...
Creating shim...
Adding ~\scoop\shims to your path.
Scoop was installed successfully!
Type 'scoop help' for instructions.
- 30sec ほどでインストールが完了した
PS C:\Users\J2> scoop
Usage: scoop <command> [<args>]
Available commands are listed below.
Type 'scoop help <command>' to get more help for a specific command.
Command Summary
------- -------
alias Manage scoop aliases
bucket Manage Scoop buckets
cache Show or clear the download cache
cat Show content of specified manifest. If available, `bat` will be used to pretty-print the JSON.
checkup Check for potential problems
cleanup Cleanup apps by removing old versions
config Get or set configuration values
create Create a custom app manifest
depends List dependencies for an app, in the order they'll be installed
download Download apps in the cache folder and verify hashes
export Exports installed apps, buckets (and optionally configs) in JSON format
help Show help for a command
hold Hold an app to disable updates
home Opens the app homepage
import Imports apps, buckets and configs from a Scoopfile in JSON format
info Display information about an app
install Install apps
list List installed apps
prefix Returns the path to the specified app
reset Reset an app to resolve conflicts
search Search available apps
shim Manipulate Scoop shims
status Show status and check for new app versions
unhold Unhold an app to enable updates
uninstall Uninstall an app
update Update apps, or Scoop itself
virustotal Look for app's hash or url on virustotal.com
which Locate a shim/executable (similar to 'which' on Linux)
導入後のチェック
- このマシンには git が未導入なので入れてみることにする
- 現時点での最新の git 2.38.1 がインストールできるようである
PS C:\Users\J2> scoop search git
Results from local buckets...
Name Version Source Binaries
---- ------- ------ --------
biodiff 1.0.3 main git-biodiff.exe
git-annex 10.20220928 main
git-branchless 0.5.1 main
git-bug 0.7.2 main
git-chglog 0.15.1 main
git-crypt 0.6.0-701fb8e main
git-filter-repo 2.38.0 main
git-interactive-rebase-tool 2.2.1 main
git-istage 0.3.56 main
git-lfs 3.2.0 main
git-sizer 1.5.0 main
git-tfs 0.32.0 main
git-town 7.8.0 main
git-up 2.1.0 main
git-with-openssh 2.38.1.windows.1 main
git-xargs 0.1.1 main
git 2.38.1.windows.1 main
gitea 1.17.3 main
gitignore 0.2018.07.25 main
gitkube 0.3.0 main
gitlab-runner 15.3.2 main
gitleaks 8.15.0 main
gitomatic 0.2 main
gitsign 0.3.2 main
gitui 0.21.0 main
gitversion 5.10.2 main
legit 1.2.0 main
mingit-busybox 2.38.1.windows.1 main
mingit 2.38.1.windows.1 main
psgithub 0.15.240 main
psutils 0.2020.02.27 main gitignore.ps1
PS C:\Users\J2> scoop install git git-lfs
Installing '7zip' (22.01) [64bit] from main bucket
7z2201-x64.msi (1.8 MB) [==========================================================================================================================================================================================================] 100%
Checking hash of 7z2201-x64.msi ... ok.
Extracting 7z2201-x64.msi ... done.
Linking ~\scoop\apps\7zip\current => ~\scoop\apps\7zip\22.01
Creating shim for '7z'.
Creating shim for '7zFM'.
Creating shim for '7zG'.
Creating shortcut for 7-Zip (7zFM.exe)
Persisting Codecs
Persisting Formats
Running post_install script...
'7zip' (22.01) was installed successfully!
Notes
-----
Add 7-Zip as a context menu option by running: "C:\Users\J2\scoop\apps\7zip\current\install-context.reg"
Installing 'git' (2.38.1.windows.1) [64bit] from main bucket
PortableGit-2.38.1-64-bit.7z.exe (46.4 MB) [=======================================================================================================================================================================================] 100%
Checking hash of PortableGit-2.38.1-64-bit.7z.exe ... ok.
Extracting dl.7z ... done.
Linking ~\scoop\apps\git\current => ~\scoop\apps\git\2.38.1.windows.1
Creating shim for 'sh'.
Creating shim for 'bash'.
Creating shim for 'git'.
Creating shim for 'gitk'.
Creating shim for 'git-gui'.
Creating shim for 'scalar'.
Creating shim for 'tig'.
Creating shim for 'git-bash'.
Creating shortcut for Git Bash (git-bash.exe)
Creating shortcut for Git GUI (git-gui.exe)
'git' (2.38.1.windows.1) was installed successfully!
Notes
-----
Set Git Credential Manager Core by running: "git config --global credential.helper manager-core"
Installing 'git-lfs' (3.2.0) [64bit] from main bucket
git-lfs-windows-amd64-v3.2.0.zip (4.1 MB) [========================================================================================================================================================================================] 100%
Checking hash of git-lfs-windows-amd64-v3.2.0.zip ... ok.
Extracting git-lfs-windows-amd64-v3.2.0.zip ... done.
Linking ~\scoop\apps\git-lfs\current => ~\scoop\apps\git-lfs\3.2.0
Creating shim for 'git-lfs'.
'git-lfs' (3.2.0) was installed successfully!
- 環境変数
- ユーザ環境変数
PATH
にC:\Users\{$USERNAME}\scoop\shims
という値が追加されている- Scoop でアプリケーションをインストールすると、このディレクトリに symlink 的なものが追加されていくという流れのようだ
- ユーザ環境変数にもう1つ
GIT_INSTALL_ROOT
なる変数が増えている-
windows 版の git
だから追加されたものなのか判断がつかない
-
- ユーザ環境変数
- レジストリ
確認したが、余計な値の追加は見られなかった。良い- 残念ながら、レジストリの操作はアプリケーションによって様々のようだ
- Scoop のリポジトリ を検索すると出てくるので雰囲気はこちらを見ると理解しやすいだろう
- インストールしたアプリケーションの本体はどこか
- scoop の下の apps に実態があり、また複数のバージョンに対して current の symlink が貼られているようだった
PS C:\Users\J2\scoop> ls apps
ディレクトリ: C:\Users\J2\scoop\apps
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/10/31 18:17 7zip
d----- 2022/10/31 18:17 git
d----- 2022/10/31 18:17 git-lfs
d----- 2022/10/31 18:07 scoop
PS C:\Users\J2\scoop> ls apps/git
ディレクトリ: C:\Users\J2\scoop\apps\git
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2022/10/31 18:17 2.38.1.windows.1
d-r--l 2022/10/31 18:17 current
- info コマンドを使ってみると、先ほど追加された
GIT_INSTALL_ROOT
なる変数が見られた
PS C:\Users\J2\scoop> scoop info git
Name : git
Description : Distributed version control system
Version : 2.38.1.windows.1
Bucket : main
Website : https://gitforwindows.org
License : GPL-2.0-only
Updated at : 2022/10/31 1:30:58
Updated by : J2
Installed : 2.38.1.windows.1
Binaries : bin\sh.exe | bin\bash.exe | cmd\git.exe | cmd\gitk.exe | cmd\git-gui.exe | cmd\scalar.exe | usr\bin\tig.exe | git-bash.exe
Shortcuts : Git Bash | Git GUI
Environment : GIT_INSTALL_ROOT = <root>
Notes : Set Git Credential Manager Core by running: "git config --global credential.helper manager-core"
- git-lfs については、
Environment ブロック
が存在していない
PS C:\Users\J2\scoop> scoop info git-lfs
Name : git-lfs
Description : Git extension for versioning large files.
Version : 3.2.0
Bucket : main
Website : https://git-lfs.github.com
License : MIT
Updated at : 2022/10/31 1:30:58
Updated by : J2
Installed : 3.2.0
Binaries : git-lfs.exe
Suggestions : git | git-with-openssh
まとめ
- Scoop でコマンドライン操作でアプリ管理が可能であり、わずらわしいGUI操作は不要である
- 環境変数はPATHは最小限にとどまるが、その他の変数もインストールするアプリによっては定義される
- レジストリはインストールするアプリによっては登録される
- アンインストール時には削除される
- 上記を踏まえると、OS再インストールすると動作の保証はあやしいが、アプリの導入手順を残しておくことで環境構築は容易にはなるだろう
Discussion