
# 自動化

Rudelの自動化により、使い捨てのサンドボックスがいつまでも溜まらないようにできます。1時間ごとのWP-Cronイベント`rudel_scheduled_cleanup`では、次の処理を実行できます。

- クリーンアップポリシー（有効期限、経過期間、アイドル状態）を実行する
- マージ済みブランチのクリーンアップを実行する
- 期限切れまたは期限が近いサンドボックスを報告する

## 設定

自動化では、`rudel_config`オプションから次のキーを読み取ります。全項目は[設定](https://rudel.inline0.dev/ja/docs/configuration)に記載されています。

| キー | 目的 | 既定値 |
|-----|---------|---------|
| `auto_cleanup_enabled` | イベントごとにクリーンアップポリシーを実行する | `1` |
| `auto_cleanup_merged` | マージ済みGit worktreeブランチを持つサンドボックスも削除する | `0` |
| `expiring_environment_notice_days` | N日以内に期限切れとなるサンドボックスを報告する | `0` |
| `max_age_days` | クリーンアップポリシーで使う経過期間の上限 | `0` |
| `max_idle_days` | クリーンアップポリシーで使うアイドル期間の上限 | `0` |
| `default_ttl_days` | 新しいサンドボックスに設定する有効期限 | `0` |

既定の設定ではイベントは登録されますが、明示的な有効期限が過去になったサンドボックスだけが削除されます。経過期間やアイドル期間の上限、および既定の有効期限は設定されていません。

## WP-Cron

有効化するとイベントが登録され、その後も各リクエストでスケジュールが再確認されます。`auto_cleanup_enabled`、`auto_cleanup_merged`、`expiring_environment_notice_days`のいずれかがゼロ以外ならイベントは維持され、それ以外の場合は削除されます。無効化するとイベントは削除されます。

自動化用のコマンドはありません。設定は`rudel_config`で変更します。

```bash
wp option update rudel_config '{"auto_cleanup_enabled":1,"max_idle_days":7,"expiring_environment_notice_days":2}' --format=json
wp rudel status
```

`wp rudel status`は`Auto cleanup`、`Auto cleanup merged`、`Expiry notice days`、`Automation scheduled`を表示します。

## 有効期限レポート

`expiring_environment_notice_days`が設定されていると、実行ごとに`expires_at`が指定日数以内に到来するサンドボックスを収集し、`rudel_after_automation_expiring_environments`アクションに渡します。サンドボックスは`expiring`と`expired`に分けられます。Rudel自体は通知を送信しません。所有者に通知するには、このアクションにフックしてください。

```php
add_action(
    'rudel_after_automation_expiring_environments',
    function ( array $report ): void {
        foreach ( $report['expiring'] as $sandbox ) {
            error_log( $sandbox['id'] . ' expires at ' . $sandbox['expires_at'] );
        }
    }
);
```

## 今すぐ実行する

ローカルまたはCIで予測可能な結果を得るには、手動クリーンアップを使います。

```bash
wp rudel cleanup --dry-run
wp rudel cleanup
```

PHPから`Rudel::run_automation()`を実行すると、cronイベントと同じ処理が実行されます。
