[PowerShell] PowerShellGet 3.0 に向けたRFCが公開されました

PowerShell Core

しばたです。

先日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-ModuleFind-ModuleはPowerShellGet 3.0でも使える様にしますが、利用時には警告が出る様にする予定です。

ローカルキャッシュ

PowerShellモジュール検索の性能改善と、インストールされていないモジュールのコマンド名を入力した際のエラー(CommandNotFoundException)時に該当モジュールをサジェストするためにローカルキャッシュを持たせます。
そしてこのローカルキャッシュを自動で更新する仕組みを導入します。

新しいコマンドレット

PowerShellGet 3.0ではモジュール管理のコマンドレットを刷新し、プレフィックスPSを付けたコマンドを導入する予定です。
RFCで記載されているコマンドレットは以下となっています。

コマンドレット名 用途 特記事項
Register-PSResourceRepository リポジトリの登録
Get-PSResourceRepository リポジトリ情報の取得
Set-PSResourceRepository リポジトリ情報のの更新
Unregister-PSResourceRepository リポジトリの登録解除
Find-PSResource リソースの検索 Find-CommandFind-DscResourceFind-ModuleFind-RoleCapabilityFind-Scriptを統合
Update-PSResourceCache ローカルキャッシュの手動更新
Install-PSResource モジュール等のインストール
Save-PSResource モジュール等の保存
Update-PSResource モジュール等の更新
Publish-PSResource モジュール等の発行
Get-PSResource インストール済みモジュール等を取得

最後に

ざっとこんな感じです。

RFCは出たばかりですのでまだまだ変化が多いと思われます。
最終的にPowerShellGet 3.0がどういったものになるのかは全然予想がつきません。  

現在のPowerShellGetに対するフィードバックの絶好の機会ですので改善したい点があればぜひRFCに提案してみてください。