グローバルなミラー設定を編集する CLI の追加
Add CLI for editing global mirrors configuration
このダイジェストはClaude Opus 4.7 / 4.8によって生成されたものです(License)。原文はこちら↗。
01 何が問題だったのか
Swift Package Manager(SwiftPM)のミラー設定には、プロジェクトごとに適用されるローカル設定と、ユーザーごとに適用されるグローバル設定の2種類があります。ミラーは、依存パッケージの取得元 URL を別の URL に差し替える仕組みで、特定のパッケージを常に社内の URL から取得させたい企業環境などで特に役立ちます。近年ではバイナリターゲットのミラーリングへの対応も進んでおり、グローバル設定の有用性はさらに高まっています。
ミラーの設定は、次の CLI コマンドで編集・参照できます。
swift package config set-mirrorswift package config unset-mirrorswift package config get-mirror
しかし、これらの CLI が編集できるのはローカル設定ファイルだけでした。グローバル設定(~/.swiftpm/configuration/mirrors.json)を変更するには、ユーザーが設定ファイルを手で作成・編集するしかありません。
一方で、同じくローカルとグローバルの両方に対応しているパッケージレジストリの設定は、当初から CLI でグローバル設定を編集できます。ミラー設定だけがこれに追随できておらず、グローバル設定の存在自体が見つけにくく、扱いづらい状態になっていました。
02 どのように解決されるのか
既存の set-mirror / unset-mirror / get-mirror の各コマンドに、オプションの --global フラグを追加します。このフラグを付けると、コマンドはグローバル設定ファイル ~/.swiftpm/configuration/mirrors.json だけを対象に動作します。
たとえば、https://example.com/file.json のミラーをグローバル設定に追加するには次のようにします。
$ swift package config set-mirror --global --original https://example.com/file.json --mirror https://internal.com/file.json
これにより、~/.swiftpm/configuration/mirrors.json(存在しなければ新規作成)に次の内容が書き込まれます。
{
"object" : [
{
"mirror" : "https://internal.com/file.json",
"original" : "https://example.com/file.json"
}
],
"version" : 1
}
設定内容の参照や削除も、同じく --global を付けて行います。
$ swift package config get-mirror --global --original https://example.com/file.json
https://internal.com/file.json
$ swift package config unset-mirror --global --original https://example.com/file.json
--global を付けたときの挙動
- 対象はグローバル設定ファイルだけになります。
- 任意のディレクトリで実行できます。フラグを付けない従来のコマンドは、カレントディレクトリ(またはその親)に
Package.swiftが必要で、見つからないと失敗しますが、--globalではその制約がありません。 unset-mirrorやget-mirrorで該当するエントリが見つからない、あるいはファイルが存在しない場合は、エラーメッセージが表示されます。
--global を付けない場合の挙動はすべて従来どおりで、変更はありません。また、get-mirror がローカル設定を持たないときにグローバル設定を読みにいくという既存のフォールバック挙動も、この提案では変更しません。新しいフラグを追加するだけなので、既存のパッケージや設定への影響はありません。