--- title: "アクセス権の管理とセキュリティ" order: 4 hidden: true ---

リテンションルールを使用すると、ディスク空き容量の再利用が楽になります。これは、定義した一連の基準を満たす古いパッケージまたは未使用のパッケージの削除を自動的に行える一方で、このルールから除外するパッケージも指定できるからです。

フィードのリテンションを使用するには、今のところ ProGet のベーシックライセンスまたはエンタープライズライセンスが必要です。ProGet 無料版でもルールを構成することはできますが、無料版では常に dry run mode (ドライランモード) で実行されます。

## リテンションルールの作成

リテンションルールは、[Manage Feed (フィードの管理)] ページに移動し、[Storage & retention (ストレージとリテンション)] タブに移動して、削除するパッケージを記述することにより、フィードごとに構成されます。

ルールは、フィードタイプに基づいて、次のオプションで構成されています。ルールで複数のオプションが選択されている場合、アクションが評価されるのは選択されたすべての基準を満たすパッケージのみとなります。詳細については、matching examples (一致する例) を参照してください。

フィードには複数のルールを適用できます。この場合、ルールは ProGet UI 上で表示される順番 (上から下) で実行されます。しかし、クォータが使用されている場合、クォータ条件が満たされた後でも、すべてのルールが実行されるとは限りません。

### パッケージのルール

アクション | 結果
--- | ---
Delete cached connector packages (キャッシュされたコネクタパッケージを削除する) | コネクタからキャッシュされたパッケージが削除の対象となります
Delete prerelease versions (プレリリースバージョンを削除する) | 「プレリリース」バージョン (4.1.0-beta など) のパッケージが削除されます
Delete old versions (古いバージョンを削除する) | パッケージの最新の指定したバージョン (N) を除くすべてが削除されます
Delete unused versions (未使用のバージョンを削除する) | 過去の指定した期間 (N) で、ダウンロード数が指定した数 (Y) 未満なものを除くすべてのパッケージが削除されます
Delete/keep by package name (パッケージ名で削除 / 保持) | 指定された名前のパッケージが削除されるか、保持されます。このフィールドではワイルドカードがサポートされています
Delete/keep by package version (パッケージバージョンで削除 / 保持) | 指定されたバージョンのパッケージが削除されるか、保持されます。このフィールドではワイルドカードがサポートされています
Delete/keep consumed packages (使用されたパッケージを削除 / 保持) | 他のパッケージで使用されたパッケージが、他のフィードで使用されていない場合は削除できます。他のフィードのパッケージで使用されている場合は削除できません

### コンテナのルール

####

アクション | 結果
--- | ---
Delete cached connector packages (キャッシュされたコネクタパッケージを削除する) | コネクタからキャッシュされた画像が削除の対象となります
Delete untagged manifests (タグのないマニフェストを削除する) | タグが関連付けられていないマニフェストが削除の対象となります
Delete unused versions (未使用のバージョンを削除する) | 過去の指定した期間 (N) で、ダウンロード数が指定した数 (Y) 未満なものを除くすべての画像が削除されます
Delete/keep by repository name (リポジトリ名で削除 / リテンション) | 指定された名前の画像が削除されるか、保持されます。このフィールドではワイルドカードがサポートされています
Delete/keep by image tag (画像タグによる削除 / 保持) | 指定されたタグの画像が削除されるか、保持されます。このフィールドではワイルドカードがサポートされています
Delete when all package usage removed (すべてのパッケージが使用されなくなったら削除) | コンテナが使用した期間 (N) 使用されなかった 場合、画像が削除されます

タグのない画像とタグの付いた画像は、同じリテンションルールで削除できません。

### アセットのルール

####

アクション | 結果
--- | ---
Delete unused files (未使用のファイルを削除する) | 過去の指定した期間 (N) で、ダウンロード数が指定した数 (Y) 未満なものを除くすべてのファイルが削除されます
Delete/keep by file name (ファイル名で削除 / リテンション) | 指定された名前のファイルが削除されるか、保持されます。このフィールドではワイルドカードがサポートされています

### ワイルドカード

上記の特定のフィールドでは、ワイルドカード構文がサポートされています。名前またはバージョンを指定する際にアスタリスク (*) を使用すると、0 文字以上に一致します。

たとえば、一致する ID を持つパッケージを保持したい場合は、次のように構成します。

Microsoft.*

Castle.*

こうすると、リテンションルールを実行した際、ID が Microsoft. または Castle. で始まるすべてのパッケージが保持されます。

## クォータ

特定のサイズのしきい値に達したときにのみ実行されるルールも定義できます。

ルールに使用できるクォータ構成は、次の 3 つです。

####

構成 | 結果
--- | ---
none (なし) | クォータが定義されていない状態です。ルールのフィルタに一致するすべてのパッケージが常に削除されます。
size of matching packages (一致するパッケージのサイズ) | ルールのフィルタに一致するすべてのパッケージの合計サイズに対して、ユーザー指定のサイズが適用されます。このルールでは、一致したパッケージの残りが指定されたサイズ以下のディスク空き容量を消費するまで、パッケージが削除されます。
size of entire feed (フィード全体のサイズ) | フィードにあるすべてのパッケージの合計サイズに対して、ユーザー指定のサイズが適用されます。これは、ルールのフィルタに一致しないパッケージであったとしても適用されます。このルールでは、一致するパッケージのみが削除されます。これは、フィード全体のサイズが指定されたサイズ以下になるまで行われます。

クォータが定義されている場合、ProGet によって指定されたサイズになるまで一致するパッケージのみが削除されます。

パッケージ削除の優先順位は、次の通りです。

1. キャッシュされたパッケージが常に最初に削除されます。
2. キャッシュされたパッケージがなくなった場合は、次にプレリリースパッケージが削除されます。
3. キャッシュされたパッケージとプレリリースパッケージがなくなった場合は、一致するパッケージの以前のバージョンが削除されます。
4. その他すべてのパッケージが順不同で削除されます。

この削除の優先順位は便宜上実装されているだけなので、必ずしもパッケージの削除を防げるわけではありません。パッケージがリテンションされないようにしたい場合は、そもそもルールと一致しないようにしてください。

## ドライランモード

[Admin (管理)] > [Advanced Settings (詳細設定)] ページには、 FeedRetentionDryRun オプションがあります。このオプションを選択すると、ProGet のリテンションルールによって実際に何かが削除されるのを防げます。つまり、これが有効な場合、通常通りルールが実行されパッケージがログに記録される一方で、ドライランモードが無効になっている状態なら削除されてしまうパッケージが、実際には削除されずスキップされます。

この機能は、ライブフィードで実行する前にルールが正しいかどうかを評価したい場合に役立ちます。FeedRetentionDryRun オプションを設定した後にドライランをトリガーするには、[Admin (管理)] セクションに移動して [Scheduled Jobs (スケジュールされたジョブ)] を選択します。すると、スケジュールされたタスクのリストが表示され、その横に緑色の再生ボタンが表示されます。実行するリテンションルールを選択して再生ボタンをクリックすると、そのルールの影響を受けるパッケージのログが表示されます。

しかし、テストおよびドライランモードは、パッケージリポジトリの適切なバックアップの代用を目的としては開発されていません。リテンションによってパッケージを削除すると、元に戻すことはできません。そのため、本番環境では、トラブル発生に備えて定期的なリポジトリのバックアップを行うようにしてください。

## リテンションルールのマッチング例

ProGet のリテンションルールは強力なため、多くのユースケースを処理できます。以下では、いくつかの一般的なシナリオとそれらを構成する方法を説明します。

### 30 日以内にダウンロードされなかった、キャッシュされたパッケージを削除する

ルールが評価されてから 30 日以内で、誰からも要求がなかったコネクタからキャッシュされたすべてのパッケージが削除されます。

- ☑キャッシュされたコネクタパッケージを削除する
- ☑未使用のバージョンを削除し、30 日間出力する

### 以前のプレリリースバージョンを削除する

最新のプレリリースバージョン以外の、すべてのパッケージの すべてのプレリリースバージョンが削除されます。

- ☑プレリリースバージョンを削除する
- ☑古いバージョンが削除され、最新バージョンのみが残る

### 特定のパッケージの古いバージョンを削除する

ワイルドカードフィルタ my.package.* に一致するパッケージで、最新から 5 つのバージョン以外のすべてが削除されます。

- ☑古いバージョンが削除され、最新から 5 つ目までのバージョンが残る
- ☑パッケージ名で削除 / 保持され、ID 値が一致する削除パッケージとして package.* が出力される

### 未使用の CI パッケージバージョンを削除する

プレリリースバージョンコンポーネントに「CI」が含まれ、2 日間ダウンロードされていないすべてのパッケージバージョンが削除されます。

- ☑プレリリースバージョンを削除する
- ☑未使用のバージョンが削除され、2 日間提供される
- ☑パッケージのバージョンごとに削除 / 保持され、バージョン値の一致する削除パッケージが *-CI.* として出力される

注：[delete prerelease versions (プレリリースバージョンを削除する)] オプションをチェックし、プレリリースバージョンにのみ一致するワイルドカードパターンを指定するのは冗長的といえますが、ポリシーでできるだけ明確にすることをおすすめします。

API

リテンションルールは、Feed API (フィード管理 API) でも構成できます。詳細については、Retention Rule data model specification (リテンションルールのデータモデルの仕様) を参照してください。