2026-07-12

Publish-PSResource が dotfiles を含めるようになってた

依然 F# 10.1 から assembly version の minor version が上がるようになったと触れた。 それに伴いようやく krymtkts/pocofkrymtkts/PSGameOfLife も 10.1 の FSharp.Core.dll にした版をリリースした。

そこで気づいたのだけど、 Publish-PSResource の挙動が変わってるぽい。しかも結構前から。 何が変わったかと言うと .gitignore.gitkeep といった dotfiles はコレまで除外されていたのに、まとめて publish されるようになってる。 これまでの除外される挙動が便利だったのでその挙動を利用してたが、今回 PowerShell Gallery に公開した版には dotfiles が含まれており、かっこ悪くなってしまった。 v1.2.0-preview4 からなので、結構前(2025-11-08)から変わってる。

Release Release of Microsoft.PowerShell.PSResourceGet v1.2.0-preview4 · PowerShell/PSResourceGet

Fix Compress-PSResource ignoring .gitkeep and other dotfiles by @Copilot in #1889

元は NuGet の既定の packing に従ってたので、除外されてたらしい。 今は NuGet CLI の -NoDefaultExcludes option に相当する flag を立てるようになって全部含まれる様になった。 Publish-PSResource は内部的に Compress-PSResource を呼ぶので、この影響を受けてしまった。

個人的に、 GitHub repo で利用する directory は明示的に構成管理されているのが好きで、そのために .gitignore.gitkeep で管理下に置いてる。 今回のケースだと、 F# で書いてた PowerShell Module で、 publish するための directory をそのように構成管理に含めていた。 その結果 .gitignore.gitkeep がまとめて公開されてしまった形になる。 先月 krymtkts/SnippetPredictor を公開したときはこの挙動にハマらなかったので、そのときは古い PSResourceGet を使ってたのかな。 そこはちょっと定かでない。

issue 的にはこの辺を解消する目的だったぽい。

bugfix だが、既存の publish の挙動が変わってしまうのは、好ましくない気がするな。 bug が仕様になるというやつなのでは。 でも、まだ世の中でこの件に触れてるヒトはいないみたいだし、罠にハマったのはわたしだけなのだろうか。

結局、今回の変更でこれまでと同じ管理方法を続けると、 PowerShell Gallery へのリリースで余計な clean up が必要になるため、諦めた。 dotnet publish すれば directory は自動作成されるので、自動作成される前提で directory が存在しなくても psake の task がコケないように調整して完了。 krymtkts/pocof#467, krymtkts/SnippetPredictor#118, krymtkts/PSGameOfLife#89 で修正。

これから自分の PowerShell module では作業 directory は自動作成で repo 管理しない方に統一していくか。 これまでも krymtkts/pslrm のような純 PowerShell の Module は build がないから自前で publish 用の directory を作成するようにしてたし。 時代の流れか。