
# フック

Rudelはサンドボックスのライフサイクルイベントに応じて、WordPressアクションとフィルターを発火させます。以下は`Rudel::hooks()`が返す一覧で、アクション28件、フィルター5件です。

## 例

```php
add_action(
    'rudel_after_environment_create',
    function ( \Rudel\Environment $environment, array $context ): void {
        error_log( 'Created Rudel environment ' . $environment->id );
    },
    10,
    2
);
```

ほとんどの`before`および`failed`アクションは、`$context`配列を受け取ります。サンドボックスのライフサイクルフックでは、この配列に`environment`が格納されます（作成時は`name`、`options`、`environments_dir`）。`failed`アクションは捕捉した`Throwable`も`$error`として受け取ります。

## サンドボックスのライフサイクルアクション

| アクション | 引数 |
|--------|-----------|
| `rudel_before_environment_create` | `$context` |
| `rudel_after_environment_create` | `$environment`, `$context` |
| `rudel_environment_create_failed` | `$context`, `$error` |
| `rudel_before_environment_update` | `$context` |
| `rudel_after_environment_update` | `$environment`, `$context` |
| `rudel_environment_update_failed` | `$context`, `$error` |
| `rudel_before_environment_destroy` | `$context` |
| `rudel_after_environment_destroy` | `$context` |
| `rudel_environment_destroy_failed` | `$context`, `$error` |
| `rudel_before_environment_replace_state` | `$context` |
| `rudel_after_environment_replace_state` | `$result`, `$context` |
| `rudel_environment_replace_state_failed` | `$context`, `$error` |

3つの`replace_state`アクションは`EnvironmentManager::replace_environment_state()`に属し、どのRudelコマンドからも呼び出されません。

## スナップショットアクション

| アクション | 引数 |
|--------|-----------|
| `rudel_before_recovery_point_create` | `$context` |
| `rudel_after_recovery_point_create` | `$context`, `$meta` |
| `rudel_before_recovery_point_restore` | `$context` |
| `rudel_after_recovery_point_restore` | `$context` |
| `rudel_before_recovery_point_delete` | `$context` |
| `rudel_after_recovery_point_delete` | `$context` |

`$context`には`environment`、`kind`（`snapshot`）、`name`、`path`が含まれます。それぞれ`snapshot`エイリアスでも発火します（例: `rudel_after_snapshot_create`）。失敗時には`rudel_failed_recovery_point_{create|restore|delete}`と`rudel_failed_snapshot_{create|restore|delete}`が、`$context`およびエラーとともに発火します。これらのエイリアスは一覧には含まれていません。

## クリーンアップアクション

| アクション | 引数 |
|--------|-----------|
| `rudel_before_environment_cleanup` | `$options` |
| `rudel_after_environment_cleanup` | `$result`, `$options` |
| `rudel_before_environment_cleanup_merged` | `$options` |
| `rudel_after_environment_cleanup_merged` | `$result`, `$options` |

`$result`には`removed`、`skipped`、`errors`、`reasons`が含まれます。

## Gitプッシュアクション

| アクション | 引数 |
|--------|-----------|
| `rudel_before_environment_push` | `$context` |
| `rudel_after_environment_push` | `$sha`, `$context` |
| `rudel_environment_push_failed` | `$context`, `$error` |

これらは`Rudel::push()`に対して発火します。`$context`には`environment`、`remote`、`message`、`subdir`が含まれます。`wp rudel push`コマンドは直接プッシュするため、これらのフックは発火しません。

## 自動化アクション

| アクション | 引数 |
|--------|-----------|
| `rudel_before_automation_cleanup` | `$config` |
| `rudel_after_automation_cleanup` | `$result`, `$config` |
| `rudel_after_automation_expiring_environments` | `$result`, `$config` |

`$config`は`rudel_config`配列全体です。[自動化](https://rudel.inline0.dev/ja/docs/features/automation)を参照してください。

## フィルター

| フィルター | 引数 |
|--------|-----------|
| `rudel_environment_create_options` | `$options`, `$name`, `$manager` |
| `rudel_environment_clone_source` | `$clone_source`, `$host_url`, `$db_cloned`, `$themes_cloned`, `$plugins_cloned`, `$uploads_cloned`, `$extra` |
| `rudel_environment_cleanup_options` | `$options`, `$repository` |
| `rudel_environment_cleanup_merged_options` | `$options`, `$repository` |
| `rudel_environment_db_dropin_contents` | `$contents`, `$context` |

`rudel_environment_create_options`は、Rudelが処理する前に、すべての作成呼び出しのオプションを変更できます。`rudel_environment_clone_source`はホストから作成したサンドボックスに保存されるクローンメタデータをフィルタリングします。`rudel_environment_db_dropin_contents`は、マルチサイトのサブサイト環境で使われる`db.php`ドロップインにのみ適用されます。現在のバージョンが作成するオーバーレイサンドボックスでは、ドロップインは生成されません。

フィルターはポリシーの調整を目的としており、Rudelのストレージモデルを置き換えるものではありません。実行時の識別情報、テーブルプレフィックス、ワークツリーメタデータは、引き続きDBに保存されるRudel状態です。
