2021-10-30

PowerShell のツールチェーン

今更読んだ ↓

PowerShellGet 3.0 Preview 11 Release - PowerShell Team

モジュールの依存性管理がくるっぽ。

これを機に NuGet のバージョンレンジ記法を学ばないといけないかな。PowerShell 使うけど NuGet と直接的な縁ないので触れずに来た。 NuGet Package Version Reference | Microsoft Docs

それはさておき、先述の PowerShellGet のネタはまだ正式なものでもなく、プレビュー機能が来てるわけでもない。だから今はまだ従来の術を使うのが良いだろうと考えている。 真面目に PowerShell 開発したことがないので、その辺の知ってるモジュールを棚卸しし、調べ直した。

ここに書いたあるような内容は、PowerShell で書かれているアプリの GitHub repo を見たらだいたい出てくるのじゃないだろうか。 わたしの場合は、jasonmarcher/pocoで初めてpsakefile.ps1を見つけてそこから世界へ踏み入れた感じ。

そして、この記事をまとめているときに「ああそういえば Awesome 〇〇ってあったなー」と思いググると、PowerShell 版も見つかったので置いておく。この記事に書いたツールチェーンは全部 Awesome の方に載ってた...

janikvonrotz/awesome-powershell: A curated list of delightful PowerShell modules and resources


ビルド

PowerShell はスクリプトなのでコンパイルはないが、静的解析・テスト・パッケージング等のことをひっくるめて、ここではビルドと呼ぶことにする。

やはりpsake が有名でしょう。1

psake/psake は基盤のようなもので、汎用的なビルドタスクなんかはpsake/PowerShellBuildに定義されている。 肝心のpsake/psakeのビルドには自身ではなくRamblingCookieMonster/BuildHelpersが使われているというのがこれまたややこしい。 RamblingCookieMonster/BuildHelpersそれ自身は、CI/CD シナリオで使えるヘルパーだぜ?と自称しているだけあり、その用途(GitHub Actions)で使われている

因みにInvoke-Buildなんていうのもいて、これは使ったことない。GitHub のグラフはこちらの方が比較的アクティブかな。 README.md 見る限りpsakeよりも使いやすいぜ!って書いてあるので、何か大変なことでもあったのかなと勘ぐってしまう。 わたしはまだ真面目に使い込めていないこともあり、psakeの闇を知らないだけかも知れない。

依存性管理

モジュールあるところに依存性管理あり。PowerShell も例に漏れずある。 RamblingCookieMonster/PSDepend

話は変わるが、RamblingCookieMonster (Warren Frame)さんは他にも PowerShell のツールを色々書かれている。 RamblingCookieMonster/PSDeployだったり、わたしも最近所用で使ったRamblingCookieMonster/PSSlackだったり(最新の API に対応してないけど)。

テスト/静的解析

pester/Pester しか知らん。BDD スタイルでクールよね。 PowerShell/PSScriptAnalyzer しか知らん。 いずれも開発もアクティブだし唯一無二か?


Awesome ~ を見つけたことだし、他にも色々見てみるか。


  1. と書いたがどう考えても有名じゃない。わたしも知ったの 2,3 年くらい前。最近は repo のグラフもほとんど息してなく見える。「枯れてる」のかも知れんけど。