[PowerShell] PowerShellGet 3.0 に向けたRFCが公開されました
しばたです。
先日PowerShell 7のロードマップに関する記事を公開しましたが、その直後に中の人であるSteve LeeさんがTwitterで次の発表をされました。
これまでのPowerShellGetを刷新したPowerShellGet 3.0に向けてのRFCを公開しフィードバックを募っています。
PowerShellGet 3.0が目指すもの
ツイート中に
what I plan to do with PSGet v3 which will have a number of breaking changes.
と、破壊的変更も厭わないとあるためか既に多くのコメントが寄せられておりRFCの内容もこれから随時変わっていくと思われます。
本記事は"現時点"でPowerShellGet 3.0が目指すものについて解説していきます。
C#による再実装
PowerShellGetはGitHubでソースが公開されており、実際に見ていただくとわかるのですがPowerShell製のスクリプトモジュールとして実装されています。
現在の最新バージョン(Ver.2.1.4)では多少分割されているものの、以前のバージョンでは10000行を超える1つの.psmファイルにすべての機能が実装される状況にあり、お世辞にもメンテナンスしやすいソースでは無いのが現状です。
PowerShellGet 3.0はC#で再実装しなおすことで現状の複雑さを解消しメンテナンスしやすくすることを目指しています。
PackageManagementに対する依存の廃止
PowerShellGetは現在PackageManagement(a.k.a. OneGet)と呼ばれるWindows向けのパッケージ管理システムに依存しています。
本記事ではPackageManagementの詳細には触れませんが、PackageManagementはWindowsにインストール可能なソフトウェア(MSIインストーラー、Nugetパッケージ、PowerShellモジュール、等々...)を統一的に扱うための基盤として提供され、PowerShellGetはその中でPowerShellモジュールを管理するための要素(Provider)として存在しています。
(OneGetのGitHubより引用)
PowerShellGet 3.0ではこのPackageManagement本体とそれに付随するnuget.exe
に対する依存を取り除くことでモジュールの複雑さを解消しようとしています。
Side-By-Sideインストール
PowerShellGet 3.0では多くの破壊的変更が出る想定なため、現在のPowerShellGet 2.xのモジュールに対してSide-By-Sideインストールを可能とし併存できる様にする予定です。
コマンドレットの互換性
よく使われるコマンドレットであるInstall-Module
とFind-Module
はPowerShellGet 3.0でも使える様にしますが、利用時には警告が出る様にする予定です。
ローカルキャッシュ
PowerShellモジュール検索の性能改善と、インストールされていないモジュールのコマンド名を入力した際のエラー(CommandNotFoundException
)時に該当モジュールをサジェストするためにローカルキャッシュを持たせます。
そしてこのローカルキャッシュを自動で更新する仕組みを導入します。
新しいコマンドレット
PowerShellGet 3.0ではモジュール管理のコマンドレットを刷新し、プレフィックスPS
を付けたコマンドを導入する予定です。
RFCで記載されているコマンドレットは以下となっています。
コマンドレット名 | 用途 | 特記事項 |
---|---|---|
Register-PSResourceRepository | リポジトリの登録 | |
Get-PSResourceRepository | リポジトリ情報の取得 | |
Set-PSResourceRepository | リポジトリ情報のの更新 | |
Unregister-PSResourceRepository | リポジトリの登録解除 | |
Find-PSResource | リソースの検索 | Find-Command 、Find-DscResource 、 Find-Module 、Find-RoleCapability 、Find-Script を統合 |
Update-PSResourceCache | ローカルキャッシュの手動更新 | |
Install-PSResource | モジュール等のインストール | |
Save-PSResource | モジュール等の保存 | |
Update-PSResource | モジュール等の更新 | |
Publish-PSResource | モジュール等の発行 | |
Get-PSResource | インストール済みモジュール等を取得 |
最後に
ざっとこんな感じです。
RFCは出たばかりですのでまだまだ変化が多いと思われます。
最終的にPowerShellGet 3.0がどういったものになるのかは全然予想がつきません。
現在のPowerShellGetに対するフィードバックの絶好の機会ですので改善したい点があればぜひRFCに提案してみてください。