リリースノートに記載された最初のバージョン部分の記載を日英それぞれについて引用するツールを PowerShell で作っている。基本的には英語の方を先に出るようにしたいので、読む順番は:
release_note.mdrelease_note_en.mdrelease_note_ja.md
としたい。sh だと普通にワイルドカードを使うだけで
$ echo release_note*.md release_note.md release_note_ja.md
となるが、PowerShell だと Sort-Object をはさんでも:
> Get-ChildItem release_note*.md | Sort-Object Name
Directory: C:\Users\hymko\src\minipage
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2025/10/02 23:57 2485 release_note_ja.md
-a--- 2025/10/02 23:58 2019 release_note.md
となってしまう。これは単純な ASCII ソートではないせいだからと思われる。
普通に考えると、Sort-Object にソートの仕方の指定すればよさそうなものだが、Microsoft Learn を見る限り、-Descending (逆順), -Culture (Culture指定)、 -CaseSensitive (英大文字・小文字を区別する)しかない。Culture にいたっては、選択肢が他にない
> Get-Culture LCID Name DisplayName ---- ---- ----------- 1041 ja-JP 日本語 (日本)
困ったあげく、Google の AI 検索に頼ったところ、次のようにすることで解決した。 ( ChatGPT はこの件に限ってはポンコツ化してダメだった )
> Get-ChildItem "release_note*" | Sort-Object { Format-Hex -InputObject $_.Name }
Directory: C:\Users\hymko\src\minipage
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2025/10/02 23:58 2019 release_note.md
-a--- 2025/10/02 23:57 2485 release_note_ja.md
- 16進数化して比較することで、実質、ASCII 順となる
- スクリプトブロックで比較関数を与えることができる
不思議なのは、Sort-Object にスクリプトブロックが与えられるという仕様が Microsoft Learn の最新バージョン向けにも記載されていないという点。なぜだろう。 ( まぁ、解決したらよいのではあるが )