tech.guitarrapc.cóm

Technical updates

PowerShell v5 におけるPowerShellGet による Powershell Module の導入はどう変わるのか

久々に書きます。

「PowerShell に新しく関数やCmdletを入れたい。」

こうなった時、基本はModuleを導入することになります。しかしv4までは、モジュールパスにファイルを配置する操作が手間で、開発者がWebClientでのダウンロードを提供したり、手動コピー&ペーストすることがおおかったでしょう。

これはJenkinsなどのCIでも、MSDeployに変わるだけでそう変わりません。

しかし、PowerShell v5では、PackageManagemtn (a.k.a OneGet) をAPIバックエンドとしてモジュールをCmdlet1つで導入できる仕組みが持ち込まれます。それが、PowerShellGetです。

https://tech.guitarrapc.com/entry/2014/05/15/100749

https://tech.guitarrapc.com/entry/2015/04/18/040117

今回は、従来のパッケージと比べて何が変わるのか、つらつら見ておきましょう。

PowerShellGet とは

端的にいうと、PowerShellGetは、PowerShell Galleryに配置されたモジュールをCmdlet 1つでダウンロードできる仕組みです。

PowerShell Resource Gallery

モジュールの開発者

これがPowerShellモジュールの開発者に与える影響は大きいです。これまではGitHubなどで公開しても次の問題がありました。

  • モジュールに気づかれない (一覧性がない)
  • モジュールの配置を利用者に理解してもらわないといけない
  • モジュールの配置を自動化しないと使われにくい

利用者に導入をためらわせるのは愚の骨頂であり、PowerShellを使う/導入する上で見えないけれども大きく立ちはだかる問題でした。

PowerShellGetは、NuGetをベースとしておりそのアップロードなどもCmdletで行うことができます。NuGetと感覚としては同様にできるのは、良いでしょう。

配布が一元化されて、Cmdlet1つでできるのは開発者にとって非常に大きなメリットがあるといえます。

モジュールの利用者

モジュールの利用者が享受するメリットは素晴らしいものがあります。

これまで、導入しにくい(git cloneして、コピーして。あるいは、独自のダウンロード用意)と感じていたことが、たった一行のコマンドで自動化されるんですから!

Install-Module モジュール名

PowerShell DSC の展開

PowerShell DSCが享受できるメリットは絶大です。

PowerShell DSCのリソースは、実体としてはPowerShell Moduleです。そう、PowerShellGetでDSCリソースが配布、展開可能なのです。

すでにPowerShell Teamのリソースはギャラリーにすべて公開されています。

https://msconfiggallery.cloudapp.net/packages/xPSDesiredStateConfiguration/

手元のPULLサーバーで展開するときも、このコマンドだけです。はいぱーラクチン!

Install-Module -Name xPSDesiredStateConfiguration

PUSH先のサーバーでのリソース展開も、同様にできますよ! もちろんValentiaで事前に済ませるのもありでしょう。

まとめ

まだv5はGAじゃないですが、使いがっては現状から大きく変わらないでしょう。ぜひ触ってください。便利さを味わってください。

実は、この記事を書いたのはPowerShell DSC Advent Calendarを書いていていい加減v5の機能を紹介して楽をしてほしいからでした。

DSC PULLサーバーの展開をずっと更新してなかったのは、もっと楽を感じてほしいからだったという(いいわけ!

というわけで、某カレンダーはちまちま書いています。