> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/workflows/ja/burokku/blocks/logic-and-branching/rate-limiter.md).

# レートリミッター

ワークフロー下流のステップ実行間に最小時間間隔を強制し、実行頻度を制限して、接続されたステップが指定されたクールダウン期間より高い頻度で実行されないようにすることで、過剰実行を防ぎます。

## このブロックの仕組み

このブロックは、連続する実行の間にクールダウン期間を強制することで、ワークフローブランチの実行レートを制限します。このブロックは:

1. クールダウン期間（秒単位）と、 `depends_on` 参照、および `next_steps` を入力として受け取ります
2. 内部状態変数を使用して、最後の実行時刻を追跡します
3. 現在時刻を計算します:
   * 動画処理の場合: 動画メタデータ（フレーム番号とFPS）を使用して、 `video_reference_image` が指定されている場合の動画時間ベースのタイムスタンプを計算します
   * その他のコンテキストの場合: システムクロック時刻（datetime.now()）を使用します
4. 最後の実行から経過した時間を `cooldown_seconds` のしきい値と比較します
5. 十分な時間が経過している場合（経過時間 >= cooldown\_seconds）:
   * 最後の実行時刻を更新します
   * 指定された `next_steps` blocks への実行を継続し、下流処理を許可します
6. 十分な時間が経過していない場合（経過時間 < cooldown\_seconds）:
   * クールダウン期間が終了するまで下流の実行を防ぎ、現在のワークフローブランチを終了します
7. 次のステップへ継続するか、ブランチを終了するいずれかのフロー制御ディレクティブを返します

このブロックはワークフローの実行間で実行状態を保持し、下流ステップが最後に実行された時刻を追跡します。 `depends_on` このパラメータは依存関係を確立し、レートリミッターは依存先ステップの完了時を監視して、クールダウン期間が経過したかどうかを判断します。動画ワークフローでは、このブロックは壁時計時間ではなく動画時間ベースのタイムスタンプ（フレーム番号とFPSから計算）を使用できます。これは、動画をリアルタイムより速く処理する際に役立ち、処理速度ではなく動画時間に対して正しくスロットリングが機能するようにします。

## 要件

**重要な制限事項**: レートリミッターは現在、動画処理のコンテキストでのみ動作します。HTTPサービス（Roboflow Hosted API、Dedicated Deployment、またはself-hosted inference server）上で動作するワークフローで使用した場合、各リクエストは独立しておりリクエスト間で実行状態が保持されないため、HTTPリクエストの処理にはレート制限の効果はありません。

## 一般的な使用例

* **高コストな操作のスロットリング**: リソース集約型の下流操作（例: データアップロードを最大5秒ごとに実行し、より頻繁に試行された場合はスキップする）を制限して、システムの過負荷を防ぎ、従量課金の操作のコストを削減します
* **通知スパムの防止**: 通知ブロックを制限して受信者を圧倒しないようにします（例: 検出が発生したときはメールアラートを1分に1回以下で送信し、重複通知はスキップする）ことで、アラートの意味と実用性を維持します
* **APIレート制限への準拠**: 外部API呼び出しやサービス統合にレート制限を適用し（例: 外部システムへのWebhook呼び出しを1秒に1回に制限し、APIクォータ超過を防ぐ）、外部サービスのレート制限に準拠します
* **データベース書き込みの最適化**: データベースやデータ保存システムへの書き込み頻度を減らし（例: 検出結果を最大10秒ごとに記録し、更新を効率的にバッチ処理する）、データベース負荷を最小化し、全体的なシステム性能を向上させます
* **動画処理の効率化**: 早送り処理で多数のフレームがすばやく生成される動画ワークフローで処理レートを制御し（例: 解析ステップを動画時間の2秒ごとに処理するよう制限し、リアルタイムより速く処理する際も適切なタイミングを維持する）、正確なレート制限のために動画時間ベースのスロットリングを使用します
* **リソース管理**: 高コストなモデル推論や処理ステップの実行頻度を制限して計算資源を管理し（例: 高コストな解析を3秒に1回以下で実行し、重複処理をスキップする）、処理速度とリソース制約のバランスを取ります

## 他のブロックへの接続

このブロックはワークフローの実行フローを制御し、次のように接続できます:

* **ワークフローステップ間** レートを制限したい場所で、ソースステップ（ `depends_on`で参照される）とターゲットステップ（ `next_steps`で指定される）の間にレートリミッターを配置し、実行間の最小時間間隔を強制します
* **通知ブロックの前** （例: Email Notification、Slack Notification、Twilio SMS Notification）通知をクールダウン期間より高い頻度で送信されないようにして通知スパムを防ぎ、アラートの有効性を維持し、受信者を圧倒しないようにします
* **データ保存ブロックの前** （例: Local File Sink、CSV Formatter、Roboflow Dataset Upload、Webhook Sink）書き込み操作を制限して保存やネットワークのオーバーヘッドを減らし、更新を効率的にバッチ処理して過剰な書き込み操作を防ぎます
* **外部API統合の前** （例: Webhook Sink）外部サービスのレート制限に準拠し、API呼び出しが許可された頻度を超えないようにして、レート制限エラーを防ぎます
* **動画処理ワークフローでは** 早送り処理でフレームが高速に生成される場合、 `video_reference_image` を使用して、動画をリアルタイムより速く処理している場合でも正しく機能する動画時間ベースのスロットリングを有効にし、動画の再生時間に対して適切な実行タイミングを維持します
* **検出または解析ブロックの後** （例: Object Detection、Classification、Line Counter）頻繁な検出やイベントによってトリガーされる下流処理を制限し、検出が毎フレーム発生する場合でも高コストな操作が頻繁に実行されすぎないようにします

### タイプ識別子

step の `"type"` フィールドに次の識別子を使用します: `roboflow_core/rate_limiter@v1` をワークフロー内のステップとして追加します。

### プロパティ

| **名前**             | **型**   | **説明**                                                                                                                                                                                                                | 参照 |
| ------------------ | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
| `name`             | `str`   | このステップの一意の識別子を入力してください。                                                                                                                                                                                               | ❌  |
| `cooldown_seconds` | `float` | 連続する next\_steps ブロックの実行間に経過しなければならない最小秒数。レートリミッターは最後の実行時刻を追跡し、前回の実行から少なくともこの秒数が経過した場合にのみ実行を継続します。0.0以上でなければなりません。動画ワークフローでは、video\_reference\_image が指定されている場合、このクールダウン期間は壁時計時間ではなく、動画時間（フレーム番号とFPSから計算）に基づいて適用されます。 | ❌  |

この **参照** 列は、workflow ランタイムで利用可能な動的値を使ってプロパティをパラメータ化できる可能性を示します。 `ワークフロー` 実行時。詳細は *Bindings* を参照してください。

### 実行時の互換性

`soft` - runtime `hosted_serverless`, `dedicated_deployment`; execution `remote` : クールダウン／レート制限タイマーはプロセスメモリに保存されます。ステートレスまたは複数レプリカのHTTPランタイムでリモートステップ実行を行う場合、各リクエストごとに新しいワーカーが割り当てられるため、クールダウンはスロットリングしません。クールダウンが文書どおりに機能するのは、永続的なWebRTCセッションでのローカルステップ実行のみです。

### 入力と出力のバインディング

利用可能な接続は、そのバインディング種別によって決まります。Rate Limiter `Rate Limiter` の `v1` が持つバインディング種別を確認してください。

<details>

<summary>入力と出力のバインディング</summary>

* input
  * `depends_on` ([*`*`*](/workflows/ja/gaido/developer-guide/kinds/wildcard.md)): このレートリミッターブロックの直前にあるワークフローステップへの参照です。これにより依存関係が確立され、レートリミッターはこのステップが完了した時点を監視して、前回の実行からクールダウン期間が経過したかどうかを判断します。depends\_on ステップは、レート制限された下流処理をトリガーする任意のワークフローブロックにできます。
  * `next_steps` (*step*): レート制限が許可された場合に実行するワークフローステップの一覧（つまり、前回の実行から十分な時間が経過している場合）です。これらのステップはクールダウン期間が経過したときのみ制御フローを受け取り、下流の処理を制限付きで実行できるようにします。クールダウン期間が経過していない場合、分岐が終了するためこれらのステップは実行されません。各ステップセレクターは、レート制限が許可されたときに実行されるワークフロー内のブロックを参照します。
  * `video_reference_image` ([*`image`*](/workflows/ja/gaido/developer-guide/kinds/image.md)): 動画時間ベースのタイムスタンプ生成に使用する動画フレーム画像への任意の参照です。指定されると、レートリミッターはシステムクロック時間ではなく動画メタデータ（フレーム番号とFPS）に基づいてタイムスタンプを計算します。これは、動画をリアルタイムより速く処理する際に有用で、処理速度ではなく動画再生時間に対して正しくレート制限が機能するようにします。指定されない場合（None）、ブロックはシステムクロック時間（datetime.now()）を使用します。動画処理ワークフローにのみ適用されます。
* output

</details>

<details>

<summary>JSON定義の例</summary>

```json
{
	    "name": "<your_step_name_here>",
	    "type": "roboflow_core/rate_limiter@v1",
	    "cooldown_seconds": 1.0,
	    "depends_on": "$steps.model",
	    "next_steps": [
	        "$steps.upload"
	    ],
	    "video_reference_image": "$inputs.image"
	}
```

</details>
