azukipochette's weblog

memory dump (mini)

2020 年版 .NET デコンパイラまとめ

f:id:AzukiPochette:20200316003028j:plain unsplash-logoRyan Quintal

.NET Reflector

著名な RedGate 製 .NET デコンパイラ。有料 ($100)。
かつて無料だったが、有償化すると発表したことで各社が無料のデコンパイラを公開したという過去がある。JustDecompiler が "永久無料" と謳っているのはこうした歴史背景に基づく。
拡張性が高く、複数の言語や言語バージョンに変換することができる。Visual Studio と連携できる VSPro 版もある。

www.red-gate.com

無料だった頃にコミュニティによって様々な便利アドインが開発されており、寿命短い CodePlex 上にまとまっている。
この中には PowerShell に変換するためのアドインも含まれている。

archive.codeplex.com

ILSpy

著名な .NET デコンパイラ。無料。
最新バージョンでは、.NET Reflector の長所であった特定言語バージョンへの変換にも対応している (C# のみ)。

github.com

JustDecompile

Telerik 製の .NET デコンパイラ。永久無料を謳っている。

www.telerik.com

デコンパイル エンジンは GitHub でコードが公開されている。

github.com

dotPeek

IntelliJ IDEA や ReSharper を開発している JetBrains 製の .NET デコンパイラ (無料)。
WinDbg などを使ってデバッグする人には、シンボル サーバーにもなる機能が非常に便利。

www.jetbrains.com

dnSpy

話題の .NET デコンパイラ。
Visaul Studio 風の UI を持ち、C#, Visual Basic, IL に変換できる。
無料で使用する事ができる (寄付も可)。

github.com

Enterprise Architect の動作解析の設定を Visual Studio のバージョン・エディションに依存させない方法

f:id:AzukiPochette:20200315224327j:plain

unsplash-logoSneaky Elbow

調べてみると約 7 年ぶりの Enterprise Architect の記事です。大変久しぶりですが、内容は短めです。

Enterprise Architect にはコードを分析してモデルを自動生成することができる大変素晴らしい機能が搭載されています。
Visual Studio ソリューションを読み込むことで、動作解析の設定も自動的に設定してくれるのですが、残念ながら Visual Studio 2017 以降では正しく動作しないケースがあります。

原因と背景

この問題は、Visual Studio 2017 以降から複数のバージョンだけでなく、エディションも共存できるようになったことに起因しています。
複数のバージョンとエディションを共存できるようにするため、Visual Studio 2017 以降では次のようにフォルダ構造が見直されました。

C:\Program Files (x86)\Microsoft Visual Studio\<Version>\<Editoin>

このため、devenv.exe をコマンドラインで実行するためには、そのバージョンだけでなくエディションも知らなければ、パスを判断することができないのです。

解決策

個人で使うのであれば特定のバージョンとエディションで固定しまうのも1つの方法ですが、環境によって Visual Studio のバージョンやエディションが異なる場合は、動作解析の設定を環境に合わせて都度変更する必要があります。
これが面倒という方にオススメなのが、Visual Studio Locator (VSWhere) を利用する方法です。

Visual Studio Locator は、その名の通り Visual Studio がどこに保存されているのかを教えてくれる便利なコマンドライン ツールです。
Visual Studio 2017 (15.2) 以降では標準で搭載されており、絶対パスは %ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe と決まっています。

というわけで、Enterprise Architect の動作解析の設定を以下のようにしておけば、devenv.com の完全パスを自動的に見つけてくれるようになります。*1

CD "path/to/your project folder"
FOR /F "usebackq delims==" %%X IN (`"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -latest -find \**\devenv.com`) DO SET DEVENVCOM="%%X"
%DEVENVCOM% "<your solution>.sln" /build "Debug|Any CPU"

素敵ですね。

おまけ

Visual Studio Locator に興味がある方は、GitHub でコードが公開されていますので、そちらをご確認ください。

github.com

それでは、よい Enterprise Arctehict 生活を。Enjoy!

*1:Visual Studio 2017 以前のバージョンには対応していません。また、例では最新バージョンを使用するように設定していますが、特定のバージョンを見つけたい場合は -latest の代わりに -version オプションを使用してください

ffmpeg で動画を変換して 1TB 節約した話

f:id:AzukiPochette:20200224052326j:plain unsplash-logoCeline Nadon

はじめに

私は 2018 年に発売された mac mini を遊び用途で使っています。

写真や動画の保存にも使っているのですが、画像や動画は "容量食い" が激しいため、保存場所を考え直すことに *1。写真のほとんどは、Cloud Storage や Photo Services に移動させましたが、動画だけは良い移行先を見つけられず、オフラインで保存することにしました。

そこで、USB 3.0 で接続できる 4TB の大容量 HDD を購入し、mac mini に接続して使っていました。が... 約半年、あっという間に容量が枯渇しました。(「大容量だから」と気にせず保存していたのが主敗因です...)

HDD の追加購入も考えましたが、そもそも 4TB の HDD を半年ぐらいで使い方したことを考えると、この先、家の片隅に HDD が山積みされて、消費電力が心配になる未来が見えたため、追加購入を考える前に、さすがに何か "工夫" をしようと考えます。

対策: ffmpeg で動画を変換しよう

容量削減の方法として、動画の解像度を下げて変換することにしました。

これまでは、視聴時には 4K モニターを使うため、なんとなく 4K に耐えうる高画質で保存していましたが、それだと 1 ファイルあたり 6 - 7 GB あるため、解像度を下げて 2 GB 以下を目指します。

100 ファイル以上あるファイルを変換することになるため、スクリプトで扱うことができる(コマンドラインで実行できる)、"ffmpeg" を選択することにしました。

ffmpeg を mac に導入する方法は、Homebrew を使うと非常に簡単です。Homebrew は、mac OS 向けのパッケージ マネージャーで macOS の開発者界隈では広く使われています。インストール方法などについてはこの記事で詳しく扱いませんが、下記を見れば簡単に導入できます。

brew.sh

Homebrew で ffmpeg をインストールするには、以下のコマンドを実行します。

brew install ffmpeg

画質の考察

動画を変換する上で最も重要なことは「どういった画質として保存するか」であることは言うまでもありません。基本的に、画質が良ければ自然と大きくなり、小さくしようとすると画質は悪くなるものです。

元の動画の画質を知るには ffprobe コマンドを使用します。 ffprobe も ffmpeg も単純に実行すると、バナーと呼ばれる情報が表示されてしまうので、以下のように -hide_banner オプションを付与することをオススメします。

ffprobe -hide_banner /path/to/sample.avi

残念ながら「良い感じ最適化」といった曖昧な指定はできないため、動画素人な私はどの画質にするのかを一番悩みました。

結局、世界最大の動画サイトである YouTube の解像度やビットレートを参考にすることにしました。

support.google.com

簡単に表にまとめると、以下のようになります (30fps の場合)。

名称 横(px) 縦(px) 動画ビットレート範囲
4K (2160p) 3840 2160 13,000 ~ 34,000 Kbps
2K (1440p) 2560 1440 6,000 ~ 13,000 Kbps
FHD (1080p) 1280 720 3,000 ~ 6,000 Kbps
HD (720p) 1280 720 1,500 ~ 4,000 Kbps
(480p) 720 1280 500 ~ 2,000 Kbps
(360p) 640 360 400 ~ 1,000 Kbps

補足 : 480p は日本の DVD ビデオの製品規格で使われる解像度です。

上記を参考にいろいろと実験したところ、HD 画質まで落とせば、目標値である 2GB 程度まで下げられることがわかりました。

※ 当然ですが、どれが最適な品質というのは人それぞれだと思いますので、ご自身で数ファイル実験してみてください。

コーデックを選ぶ

次に、コーデックを選ぶことなりますが、対応しているコーデックは環境によって異なります。 サポートしているコーデックの一覧を取得するには以下のコマンドを実行します。

ffmpeg -hide_banner -codecs

実行すると、対応しているコーデックの一覧が表示されます。

近年、代表的な動画のフォーマットといえば "H.264"、"H.265/HEVC" ではないかと思います。

H.265 は、その名が示すとおり H.264 の後継規格で、60 fps をサポートしており、同画質を半分程度のサイズで実現するという今回の期待にぴったりのフォーマットです。H.264 と H.265 の違いはインターネット上に大量に記事がありますので、そちらを参考にしてください。

個人的には、富士通研究所の以下の記事がわかりやすかったです。

www.fujitsu.com

しかし、実験してみると変換が非常に遅く、時間がかかるため今回は "H.264" を選択することにしました (私の環境では、約 10 倍ほど H.264 のほうが高速でした)。*2

H.264 に決めたら、コーデック一覧から H.264 を探します。私の環境では以下のように表示されています。

 DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (encoders: libx264 libx264rgb h264_videotoolbox )

見ると、"encoders" のところに 3 つ表示されていることがわかります。簡単に解説すると、以下の通りです。

エンコーダー 概要
libx264 オープンソースのソフトウェア エンコーダー
libx264rgb YUV の代わりに RGB を出力する libx264 のパッチ バージョン。
h264_videotoolbox Apple が提供している H.264 向けのハードウェア エンコーダー

(おまけ) libx264 で mac mini アツアツ事件

当初、"libx264" で実験していただのですが、エンコードを開始する度に mac mini からけたたましい音が聞こえ、本体の天板を触ってみると非常に熱い。おもむろにアクテビティ モニタを開くと、CPU 負荷が最大に。しかも、%GPU は 0% のまま。「...もしかして、ハードウェア エンコードに対応してないの!?」と思って調べてみると、mac mini (2018) には T2 チップが搭載されており、h264_videotoolbox を使うことでハードウェア エンコードができることを知りました。

ffmpeg を実行する

画質とフォーマット/エンコーダーを決めたら、いよいよ ffmpeg で動画を変換します。

私の場合は、HD (1280x720) サイズで、ビットレートは 1,500Kbps、h264_videotoolbox を使ってエンコードをしたいので、以下のように実行しました。

ffmpeg -i SAMPLE.mp4 -s 1280x720 -c:v h264_videotoolbox -b:v 1500k SAMPLE_HD.mp4

変換を自動化する

手作業ですべてのファイルを変換するのは大変なので、スクリプトを書いて自動化します。私の場合は、PowerShell (pwsh) を使ってスクリプトを書きました。

下記のスクリプトでは、現在のフォルダー配下のファイルを再帰的に取得し、ffmpeg で変換、変換に成功したら元ファイルを消しています。 ファイル名は HD で変換したことがわかるように、"_HD" を付与するようにしています。

$files = Get-ChildItem -Recurse -File
foreach ($file in $files)
{
    $newFullName = Join-Path -Path $item.DirectoryName -ChildPath ($item.BaseName + "_HD" + $item.Extension)
    $process = Start-Process -FilePath ffmpeg -ArgumentList "-i $($item.FullName) -s 1280x720 -c:v h264_videotoolbox -b:v 1500k $newFullName" -Wait
    if ($process.ExitCode -ne 0) {
        Remove-Item $item
    }
}

(おまけ) タグを使って除外する

全部のファイルを変換する場合は上記でいいのですが、一部の大切なファイルだけは除外したいという状況になりました。簡単にやるならば、フォルダー名やファイル名に除外を示す文字 (-,_,@ など) を付けてもいいのですが、名前を変えると名前順に並ばないなどの問題があるため、タグを使って除外することにしました。

finder のタグは拡張属性として保持されており、次のコマンドで取得できます。

xattr /path/to/yourfolder

タグが付与されている場合は、以下のような拡張属性が表示されます。

com.apple.FinderInfo
com.apple.metadata:_kMDItemUserTags

タグの情報は "com.apple.FinderInfo" に入っています。取得例を以下に示します。

☁  ~  xattr -p -x com.apple.FinderInfo /path/to/yourfolder
00 00 00 00 00 00 00 00 00 0C 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

10 バイト目に "0x0C" という値が見えますが、これが赤色をタグを示しています。

実験した結果を以下に示します。

灰 (GREY) 0x02
緑 (GREEN) 0x04
紫 (PURPLE) 0x06
青 (BLUE) 0x08
黄 (YELLOW) 0x0A
赤 (RED) 0x0C
橙 (ORANGE) 0x0E

実験の結果、タグを消すと拡張属性自体が消えるので、中身は見ずに拡張属性があるかどうかで判断することにしました。拡張属性は、タグ以外でも様々なツール (Dropbox etc) で利用されているため、ご自身の環境で調べてみてください。

残念ながら、PowerShell では拡張属性は読み取れないため、xattr の出力結果を使ってタグがあれば除外することにします。

コード例を以下に示します。

$dirs = Get-ChildItem -Directory
foreach ($dir in $dirs) {
    $attr =  xattr $dir.FullName
    if ($attr -eq $null) {
        # タグなし
    } else {
        # タグあり
    }
}

それでは、よい ffmpeg 生活を。Enjoy!

*1:mac mini に搭載されている SSD は 256GB です

*2:当初、最近話題の AV1 (AOMedia Video 1) で変換しようかと思っていましたが、見事に QuickTime が対応しておらず、メジャーなフォーマットを選ぶことにしました。

開発者のための Windows Terminal 入門

f:id:AzukiPochette:20200215000346j:plain

Windows Terminal は Windows 10 以降で使える新しいターミナルである。 従来のターミナル (cmd.exe など) と比較すると、"tmux" のようにタブやペインが使えるほか、ウィンドウ内での文字列検索などにも対応おり、絵文字 (🍺) の表示もサポートしている。

Windows ユーザーの多くは絵文字表示に必要性/利便性を感じないかもしれないが、Linux などの世界では出力に絵文字を使うアプリケーションも増えているため、Windows Subsystem for Linux (WSL) ユーザーなどは不満を感じていた点ではないかと思う。 ちなみに、 Windows の世界でも "Dapr" などマルチ プラットフォーム対応なアプリケーションの一部で絵文字が使われ始めている。

Windows Terminal のインストール

インストール要件

  • Windows 10 Version 1903 (18362) 以上が必要 *1
  • x86, x64, ARM64 に対応

インストール方法

以下のリンクからダウンロードできる (Windows Store 経由) www.microsoft.com

ショートカット キー

既定のショートカット キーについて以下に示す。

ショートカット キーが他のアプリケーションと競合してしまっているケースや、自分の好みと異なる場合は、JSON ファイル形式の設定ファイルを変更することで、好みの設定変更できる。

なお、コマンドライン上で動作するアプリケーションのショートカット キーとバッティングしないために、Shift キー付きでバインドされていることが多い。

基本操作

操作 キー
コピー Ctrl + Shift + C
貼り付け Ctrl + Shift + V
検索 Ctrl + Shift + F

タブの操作 *2

操作 キー
プロファイル 0 のタブを開く Ctrl + Shift + 1
プロファイル 1 のタブを開く Ctrl + Shift + 2
プロファイル 2 のタブを開く Ctrl + Shift + 3
プロファイル 3 のタブを開く Ctrl + Shift + 4
プロファイル 4 のタブを開く Ctrl + Shift + 5
プロファイル 5 のタブを開く Ctrl + Shift + 6
プロファイル 6 のタブを開く Ctrl + Shift + 7
プロファイル 7 のタブを開く Ctrl + Shift + 8
プロファイル 8 のタブを開く Ctrl + Shift + 9
現在のタブを複製 Ctrl + Shift + D
次のタブ Ctrl + Tab
前のタブ Ctrl + Shift + Tab
タブ 0 に移動 Ctrl + Alt + 1
タブ 1 に移動 Ctrl + Alt + 2
タブ 2 に移動 Ctrl + Alt + 3
タブ 3 に移動 Ctrl + Alt + 4
タブ 4 に移動 Ctrl + Alt + 5
タブ 5 に移動 Ctrl + Alt + 6
タブ 6 に移動 Ctrl + Alt + 7
タブ 7 に移動 Ctrl + Alt + 8
タブ 8 に移動 Ctrl + Alt + 9

ペインの操作

既定ではペイン操作用のショートカットは設定されていない様なので、私は以下のように設定に追加している。*3

{
    "command" : "splitHorizontal",
    "keys" : ["ctrl+shift+-"]
},
{
    "command" : "splitVertical",
    "keys" : ["ctrl+shift+|"]
},
{
    "command" : "moveFocusUp",
    "keys" : ["ctrl+alt+up"]
},
{
    "command" : "moveFocusDown",
    "keys" : ["ctrl+alt+down"]
},
{
    "command" : "moveFocusLeft",
    "keys" : ["ctrl+alt+left"]
},
{
    "command" : "moveFocusRight",
    "keys" : ["ctrl+alt+right"]
},
{
    "command" : "resizePaneUp",
    "keys" : ["shift+alt+up"]
},
{
    "command" : "resizePaneDown",
    "keys" : ["shift+alt+down"]
},
{
    "command" : "resizePaneLeft",
    "keys" : ["shift+alt+left"]
},
{
    "command" : "resizePaneRight",
    "keys" : ["shift+alt+right"]
},
{
    "command" : "closePane",
    "keys" : ["ctrl+shift+w"]
}

その他

操作 キー
設定を開く Ctrl + ,

なお、設定を開くと、JSON ファイルに関連付けされている既定のアプリケーションが起動するので、注意すること。 特に Visual Studio を使用している開発者は、既定が Visual Studio になっていることがあるので、"Visual Studio Code" など比較的軽量なエディタに関連付けしておくと良い。

コマンドライン引数

Windows Terminal をコマンドラインから起動する場合は wt で起動できる。

wt

また、バージョン 0.9 で、コマンドライン引数にも対応している。 バージョン 0.9 でのヘルプを以下に示す。

wt - the Windows Terminal
Usage: [OPTIONS] [SUBCOMMAND]

Options:
  -h,--help                   Print this help message and exit

Subcommands:
  new-tab                     Create a new tab
  split-pane                  Create a new split pane
  focus-tab                   Move focus to another tab

ディレクトリを開く

特定のディレクトリを開くには、"-d" オプションを使用する。"C:\Windows" を開く例を以下に示す。

wt -d C:\Windows

現在のディレクトリを Windows Terminal で起動したい場合は次のようにする。*4

wt -d .

応用としては、Explorer.exe のアドレス バーで cmd や powershell を起動している方は、代わりに "wt -d ." を入力することで、Windows Terminal を起動することができる (デフォルトのプロファイルで起動する)。

レイアウトを変更する (タブを開く/ペインを分割する)

パラメータを指定することで、起動時にタブやペインの構成を指定することができる。 なお、";" の前後には必ず空白を挿入する必要があるので、注意すること。

追加でタブを開く場合は、new-tab コマンドを使用する。 下記の例では、既定のプロファイルのタブに加えて、PowerShell のタブが表示される。

wt ; new-tab -p "Windows PowerShell"

なお、-p オプションには、プロファイル名を指定する必要がある。プロファイル名が不明な場合は、設定ファイルのプロファイルを確認すると良い。たとえば、下記のプロファイルの場合、"name" が示す "Windows PowerShell" がプロファイル名である。

{
    "tabTitle": "PowerShell",
    "suppressApplicationTitle": true,
    "acrylicOpacity": 0.5,
    "background": "#012456",
    "closeOnExit": true,
    "colorScheme": "Campbell",
    "commandline": "powershell.exe",
    "cursorColor": "#FFFFFF",
    "cursorShape": "bar",
    "fontFace": "Consolas",
    "fontSize": 11,
    "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
    "historySize": 9001,
    "icon": "ms-appx:///ProfileIcons/{61c54bbd-c2c6-5271-96e7-009a87ff44bf}.png",
    "name": "Windows PowerShell",
    "padding": "0, 0, 0, 0",
    "snapOnInput": true,
    "startingDirectory": "%USERPROFILE%",
    "useAcrylic": false
},

プロファイル名を指定する方法の他に、実行ファイルを指定する方法もある。たとえば、WSL の既定を開く場合は、以下のように指定する。

wt ; new-tab wsl.exe

ペインを分割する場合は、split-pane コマンドを使用する。 下記の例では、ペインが分割され、左側は既定のプロファイル、右側は PowerShell が表示される。

wt ; split-pane -p "Windows PowerShell"

なお、分割する方向は 水平を示す -H 、または垂直を示す -V オプションを指定すればよい。指定しない場合は、垂直 (縦) に分割される。

水平 (横) に分割する場合の例を以下に示す。

wt ; split-pane -p "Windows PowerShell" -H

参考情報

公式ブログ

Windows Terminal の情報は以下のブログで紹介されている。新機能の紹介なども説明しているので、参考にされたい。

devblogs.microsoft.com

ユーザー ドキュメント

公式なユーザー向けのドキュメントは GitHub 上で公開されているので、機能について知りたい場合は以下を参照すると良い。

github.com

*1:この要件は、バージョンアップで変更になる可能性がある

*2:それにしても、なぜタブ番号は 0 オリジンなのか...

*3:なお、1Password を使っている場合、"Ctrl + Sfhit + \" が競合してしまうので、1 Password 側を変更すると良い

*4:"." は現在のパスを示す

Azure DevOps Server または Team Foundation Server でエラーが出たのを調査するときの話

私が参考にしていた公式の解説ブログ記事が MSDN ブログ廃止の影響を受けて消えてしまったので、主に自分向けのメモとして記事にすることにした。

管理ツール (_oi) を確認する

Team Foundation Server 2012 以降では管理ツールが統合され、_oi でアクセスできる。これは、Azure DevOps Server でも変わらない。

devblogs.microsoft.com

管理ツールにアクセスするには、自身の Team Fondation Server または Azure DevOps Server の URL に加えて /_oi を足した URL にアクセスすればよい。*1 以下に URL 例を示す。

Team Foundation Server 2012 - 2018 の場合 :

http://yourservername:8080/tfs/_oi

Azure DevOps Server 2019 以降を新規に構築した場合 :

https://yourservername/_oi

アクテビティログを確認する

Team Foundation Server および Azure DevOps Server には内部的にアクテビティ ログを保存する仕組みがある。 問題が発生しているチーム プロジェクト コレクション (TPC) のデータ ベースに対して、以下のクエリを実行すると取得できる。

    SELECT *
    FROM tbl_command c
    LEFT JOIN tbl_parameter p ON c.commandid = p.commandid

なお、サーバー全体に対するアクテビティは "Configuration" データベースに含まれることがある (プロジェクト コレクションの作成など) 。

(補足) データベース名の既定は Team Foundation Server 2018 までは Tfs_* だったが、Azure DevOps Server 2019 以降の既定は AzureDevOps_* に変更されている。Team Foundation Server 2018 以前のバージョンから移行した場合は、引き続き Tfs_* が使われるが、新規に構築した場合は違いがあるので、プロジェクトコレクション名 to データベース名などの変換をスクリプトで自動化している場合は注意するとよい。

イベント ログを確認する

Team Foundation Server および Azure DevOps Server には内部でエラーが発生するとイベントログに記録する仕組みがある。 ほとんどのケースでは、アプリケーション ログに TFS Services の名前で記録される。なお、Azure DevOps Server でも名前は同じである。

*1:なぜか、管理画面などからリンクされていないので、管理者の間では "秘密のツール" ということになっているとか、いないとか。

docker で遊んだ後のお片付け

docker でいろいろと試していると、--rm をつけ忘れてコンテナが残ってしまうといったことが良くあります。 いろいろと試した後で作ったコンテナやイメージをごそっと消したいというときに使うコマンドを備忘録として書いておきます。

すべてのコンテナを停止させる

(補足) 実行中のコンテナは削除できないので、停止させます。

docker stop $(docker ps -q)

すべてのコンテナを消す

docker rm $(docker ps -q -a)

すべてのイメージを消す

docker rmi $(docker images -q)

Windows な人に向けて

コマンド プロンプト (cmd.exe) では、$() を評価できないため正しく動きません。PowerShell (or pwsh) を使いましょう。

Azure Pipelines の Pool を調べる

Azure DevOps 向けの拡張機能を Azure CLI にインストールし、次のコマンドを実行すればよい。 なお、事前に az login でログインしておく必要がある。

アクセスできるプールは組織 (orgnization, 旧VSTSアカウント) 次第なので、下記の結果は参考程度に見てほしい。

C:\Works>az pipelines pool list -o table
This command group is in preview. It may be changed/removed in a future release.
ID    Name                             Is Hosted    Pool Type
----  -------------------------------  -----------  -----------
1     Default                          False        automation
2     Hosted                           True         automation
4     Hosted VS2017                    True         automation
5     Hosted macOS                     True         automation
6     Hosted Ubuntu 1604               True         automation
7     Hosted Windows Container         True         automation
8     Hosted Windows 2019 with VS2019  True         automation
9     Hosted macOS High Sierra         True         automation
10    Azure Pipelines                  True         automation

なお、YAML で pool の指定をする場合の名前はこのコマンドでは取得できず、以下の URL の記載を確認する必要がある *1

docs.microsoft.com

*1:なんで取れないねん!と私は思う...