◆ corepack enable yarn で yarn が使えるようになる
   ◆ Windows だと管理者権限ないとエラーになることも
◆ corepack prepare yarn@3.1.1 のようにしてバージョン指定でインストールできる
◆ corepack prepare で --activate つけると切り替わる
◆ インストール先はユーザのホームディレクトリの .node/corepack フォルダ内

以前試そうとしたときは corepack が Node.js 16 に入ってなかったですが LTS の 16 では入ってるようでした
ちょうど yarn が入ってない環境だったので corepack でインストールを試してみました

環境は Windows で Nodist とかを使わず標準のインストーラでインストールした Node.js です
よく見るとインストールのときのオプションで corepack をインストールするか選べました
デフォルトでは npm と同様にインストールするようになってます

yarn を使えるように

Node.js をインストールしてればパスは通っているので corepack コマンドが使えます

corepack --help

で機能を確認できますが できることはそれほど多くなさそうです

corepack enable yarn

を実行すると yarn が使えるようになります

「Error: EPERM: operation not permitted」 みたいなエラーが出る場合は管理者権限で実行すれば動きました
yarn.cmd や yarn.ps1 を Program Files フォルダの中に書き込もうとして権限不足になってるような感じでした
管理者権限が使えない場合は --install-directory オプションでフォルダを指定するとそこに yarn.cmd などのファイルが作られるのでパスが通ってるフォルダを指定すればよさそうです

内部的には

yarn コマンドが使えるようになりましたが 呼び出しているコマンドはここでした

C:\Program Files\nodejs\yarn.cmd

これを実行すると

C:\Program Files\nodejs\node_modules\corepack\dist\yarn.js

にある .js ファイルを実行します
このフォルダには yarn 以外に npm や npx などの .js ファイルがあり どれも

#!/usr/bin/env node
require('./corepack').runMain(['yarn', ...process.argv.slice(2)]);

という感じで 同じフォルダの corepack.js を呼び出しています
corepack.js の中を見ると webpack で生成されたファイルで yarn や npm というワードが多数あったので 全部のパッケージマネージャのコードがこの .js ファイルにまとまってる?とも思いましたが それにしては 500KB くらいしかないのでそんなことはなさそうです

探してみると ユーザのホームディレクトリに .node フォルダが作られていて その中に corepack フォルダがあり そこに yarn などの本体が保存されているようです
パッケージマネージャのフォルダの中に各バージョンのフォルダがあります

C:\Users\USERNAME\.node\corepack\yarn\1.22.15
C:\Users\USERNAME\.node\corepack\yarn\2.2.2
C:\Users\USERNAME\.node\corepack\yarn\3.1.1

この corepack フォルダには lastKnownGood.json というファイルがあってここに現在有効なバージョン情報が保存されているようです

{
"yarn": "3.1.1"
}

設定の保持方法からしてグローバル設定みたいなので フォルダ(プロジェクト)ごとに別のバージョンを設定するみたいな機能はないようです

バージョン切り替え

バージョンは prepare サブコマンドで切り替えできます

corepack prepare yarn@3.1.1 --activate

yarn@3.1.1 みたいにバージョンを指定して --activate をつけます
--activate なしだとダウンロードするだけで切り替わりません
ダウンロード先は上に書いた .node/corepack の中です

ネットにつながらない環境用の機能もありました
prepare に -o オプションをつけると カレントディレクトリに corepack.tgz ファイルが作られます(名前は引数で変更可)
このファイルを hydrate サブコマンドの引数に指定することで 事前にダウンロードしておいた tgz ファイルを使って yarn などをインストールできるようです

corepack で yarn を enable するとデフォルトでは 1 系になります
yarn の場合 1 系がグローバルインストールのコマンド用で 2 以降はプロジェクトにインストールするものという扱いだったので 2 や 3 を指定する必要はないのかもです