初めに
こんにちは、本書をご覧になっていただき、読者のみなさまに感謝します。
更新: 2022年 長月:PROXY環境での設定、神無月:管理者でのインストール
更新: 2024年 霜月:グローバルパッケージ更新の注意点
対象の読者
以下のような方々のお役にたてれば幸いです。
- ソフトウェア開発、特に製造や評価などに関わる人
- Windows用のアプリやツールを宣言的に管理したい人
- Windows用のアプリやツールを複数バージョン入れて使い分けたい人
# パッケージ管理って何という人への説明
Wikipediaによると、「各種のソフトウェアの導入と削除、そしてソフトウェア同士やライブラリとの依存関係を管理するシステム」となっている。
つまり、様々なアプリケーションを使用するときに、関連するライブラリや設定を含めて自動的にインストールし、アップデートしたり、安全に削除したりできる仕組みのこと。管理システムごとにリポジトリが提供されており、バージョン、依存関係、各種設定などが定義されている。
複数のバージョンを切り替えて使えたり、複数アプリをグループ化しておいてまとめてインストールしたりなどの機能を持っていることが多い。
環境の文書化や共有に活躍
GUIでの管理システムだと、説明するのに画像が必要となることが多く、例えば開発環境をチームで統一したい場合など、コマンドラインですべて設定できる方がやりやすいし、文書化したり、スクリプト化して共有するのもやりやすい。Windowsにパッケージ管理システムを入れたい理由は、コマンドライン(CLI)での操作ができることも大きな要素だ。
また、インストールされるアプリに対しても、コマンドラインでのパスが自動的に設定され、WindowsMenuからマウスで選択して、、、としないで、コマンドで起動したり、スクリプト化してバッチ処理したり、、、と使いやすくなる。
パッケージ管理システムの例
Linux/BSD/Mac/WindowsなどのOS上
- Redhat系: RPM, Yum, DNF など
- Debian系: dpkg, APT, aptitude, synaptic など
- BSD系: ports など
- MacOS: MacPorts, Fink, Homebrew など
- Windows: Chocolatey, Scoop, Windows Package Manager(winget) など
種々の言語上
- Node.js: npm, yarn など
- PHP: composer など
- Python: pip など
- Java: maven など
Scoopに関して
2020年にMicrosoft社のオープンソースとして「Windows Package Manager^1」が登場した。将来的にはこれが本命とは思うが、現在(2021年01月)はPreivewであるため、使いやすいScoopを説明する。
ScoopはWindowsのパッケージ管理システムであり、そのライセンスは「The Unlicense」で、個人利用、商用利用、修整、再配布などが自由にできるPublicDomainとなっている。
Scoopの利点の一つは、管理者権限なしで使うことができ、ユーザごとのインストールや設定が可能であること。デメリットとしては対応パッケージ数で他の管理システム(Chocoleteyなど)に劣ること。
インストール
scoop自体のインストール
set-executionpolicy remotesigned -scope currentuser
iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
Administraorでのインストールに失敗する時は
Scoopのインストーラは、セキュリティ上の配慮から、管理者アカウントでのインストールができないように設定してある。どうしてもインストールしたい場合は、以下のコマンドで実行できる。
iex "& {$(irm get.scoop.sh)} -RunAsAdmin"
参考にしたリンク先:
PROXYのある環境で使用する場合の設定
もし、現在のネットワーク環境がPROXYを利用している場合、上記の「iex」では自動的にシステム設定が使用されてscoop自体のインストールは成功する。
しかし、scoop単独ではPROXYを認識できないため、以下のように設定する。
scoop config proxy your-proxy.server:proxy-port
上記の「your-proxy.server」と「proxy-port」は、「Windowsの設定」「ネットワークとインターネット」 > 「プロキシ」を見るとわかるので、アドレスとポートを設定する。
使ってみよう
ヘルプの表示
scoop help
- 使えるパッケージを見つける
xxxxに使いたいパッケージの文字列の一部を入れることで、存在すれば表示される。無指定でsearchすると、main Bucket にあるすべてのパッケージが表示される。
scoop search xxxx
例として、dd をインストールし、アンインストールしてみよう
scoop install dd
scoop list
get-command dd
scoop uninstall dd
どんなBucketがあるのかを調べる
Bucketとは、Scoopのリポジトリのこと。
- 公式Bucket一覧
scoop bucket known
- その他のバケット
awesome-scoop1 や GitHub2 に公開されている。
役立つBucket(Scoopのリポジトリ)を追加する
- 最初に git のインストールが必要
scoop install git
- 拡張パッケージ
scoop bucket add extras
- 複数バージョン選択
scoop bucket add versions
- 日本語環境
** iyokan-jp: サクラエディタなど
scoop bucket add iyokan-jp https://github.com/tetradice/scoop-iyokan-jp
** jfut: firefox, thunderbird など
scoop bucket add jfut https://github.com/jfut/scoop-jfut.git
- 追加されているBucketの表示
scoop bucket list
終りに
次はUTF-8に対応し、マルチプラットフォームで動作するPowerShellCoreの話。
補足: トラブル治療室
"pwsh" is still running (2022-07-14)
パッケージの更新時に発生するエラー。
更新は、ユーザパッケージ、グローバルパッケージに応じて、以下のコマンドで実行できる。更新中にエラーが発生するとそこで中断となる。
- scoop update *
- sudo scoop update --global *
前提
- 発生条件:PowerShellCore導入後、パッケージ更新が存在する場合
現象
以下のようなエラーが表示される。
ERROR Application "pwsh" is still running. Close all instances and try again.
原因
プロセスを見ても「pwsh」が見当たらず、おかしいな???と思っていたら、以下のような理由であった。
scoopは、実行時に pwsh(PowerShellCore) を使用する
治療
理由が分かれば対処は簡単で、cmdやWindowsの「ファイル名を指定して実行」からscoopを実行せず、オリジナルの「PowerShell」から実行すればよい。
注意点
sudo で更新する場合、pwshが使われてしまうため、以下の様にsudoでpowershellを起動してから更新するとうまくいきます。
PS C:\Users\takeu> sudo powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6
usgin profile of c:\opt\bin\.psrc.ps1
PS C:\Users\takeu> scoop update pwsh -g
結果と予防
自分が使ってるのに「Close all instances」っていわれもなーーー
親記事:WSL2とVSCで作るWindowsでのDocker内開発環境(2021年睦月)