> ## Documentation Index
> Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
> Use this file to discover all available pages before exploring further.

# ルーティング概要

> AMM ルーティングプログラムの機能、独立したプログラムとして存在する理由、クライアント側の命令ステッチング代わりに使う場合を説明します。

<Info>
  **このページは AI による自動翻訳です。すべての内容は英語版を正とします。**

  [英語版を表示 →](/products/routing/overview)
</Info>

## 1段落の概要

AMM ルーティングプログラムは、複数のプール間のリクイディティをチェーンする複数ホップのスワップを単一のオンチェーン トランザクションにまとめます。ルート（プールと中間ミント のリスト）と 1 つのスリッページパラメータを持つ命令を提供すると、ルーターは全 N ホップを順序どおりに実行し、一つのプールの出力を次のプールの入力に移動させます。価格計算のためにオンチェーンで別のルーターロジックは不要です。各ホップのフィーと曲線は CPI 経由で自身のプールプログラムで処理されますが、ルーターはアカウント渡しとトークン移動を調整します。

## 独立したルータープログラムが必要な理由は？

Raydium クライアントとアグリゲーターは常に、ルーターを使わずにクライアント側で複数ホップのスワップをステッチできます。各プール用に N のスワップ命令を構築し、単一のトランザクション内で送信します。では、なぜ専用のルータープログラムが必要なのでしょうか？

### ルーターを使う理由

1. **他のプログラムからの CPI。** 自分のプログラムがより大きなトランザクションの一部としてルートを呼び出す必要がある場合（例：フィーをターゲットトークンにスワップするリクイディティマネージャー）、ルーターへの CPI は N 個の子 CPI をバンドルしてコントラクト内のすべてのアカウントを管理するより簡潔です。

2. **アトミックなアカウント状態。** すべてのホップのアカウントリストは 1 つの命令コンテキストで検証されます。中間プールの状態が破損した場合、またはリミット価格アサーションが失敗した場合、ルート全体は部分的な決済なくアトミックに失敗します。

3. **単一の命令構成。** SDK とフロントエンドは複数ホップのルートを 1 つの論理操作として表現でき、N 個の個別の命令として表現する必要がありません。

### クライアント側のステッチングは依然がデフォルト

ほとんどのアプリケーションでは、各プール用に個別の `Swap` 命令を構築して順番に送信する方が簡潔で、より構成可能で、等しく有効です。Raydium SDK の `Trade.makeSwapTransaction` およびそれに類似するフローは、ほとんどのルートでまさにこれを行います。

ルーターは代替品であり、置き換えるものではありません。以下の場合に使用してください：

* より大きなアトミック操作の一部としてルーティングを必要とするプログラムを実装している。
* 単一の「このルートを送信する」操作を望むアグリゲーターを構築している。

## どのように機能するか

ルーター命令は以下を含みます：

* **スワップ引数**：正確な入力（`amount_in`、`minimum_amount_out`）または正確な出力（`maximum_amount_in`、`amount_out`）。
* **ルート仕様**：各ホップごとの `program_id` と子プログラムアカウントのリスト（順序付き）。ルーターは各ホップグループの最初のアカウントを読んで、呼び出すプログラムを決定します。
* **リミット価格**（CLMM の場合）：`sqrt_price_x64` 境界の `VecDeque<u128>`。CLMM プールへのホップに使用されます。空のデックは古い命令バリアントではエラーです。

ルーターは以下を実行します：

1. **最初のホップを実行する**：`amount_in` を転送（または正確な出力用に必要な入力を計算）し、最初のプールの入力ボールトに転送、そのプールのスワップを呼び出し、出力を収集します。
2. **後続のホップをチェーンする**：各ホップ N について、ホップ N−1 の出力をホップ N の入力として使用します。
3. **スリッページを適用する**：各 CLMM ホップで `sqrt_price` を対応する `limit_price` と比較、最終ホップで総出力をグローバルな `minimum_amount_out` と比較します。

中間トークンは、**ユーザー制御 ATA**（ホップごと 1 つ、低速だが透明）または**共有 PDA 派生アカウント**（すべてのホップで 1 つのアドレス、高速で非透明）を通じてフローできます。

## 価格設定とフィーの委譲

ルーターは**価格を自分で計算しません**。各ホップは子プログラムの曲線に委譲します：

* **AMM v4**：OpenBook ハイブリッド価格付けを使用した定値積公式。
* **CPMM**：設定されたフィー層を使用した定値積公式。
* **CLMM**：ティックベースの価格付けを使用した集中流動性数学。
* **Stable**：同種トークン向けのステーブルスワップ曲線。

フィーは各プール がそれ自身の構成に従って請求されます。ルーターはそれ自身のフィーを取りません。

## ルーターを避けるべき場合

* **ホップ数が少ない（1～2 ホップ）。** アカウント渡しのオーバーヘッドは最小限。2 つの個別のスワップ命令を使用してください。
* **Raydium 以外のプール。** ルーターは 4 つの Raydium プール型のみを認識します。外部プログラムを横断するルートについては、クライアント側で命令をステッチしてください。
* **条件付きルーティング。** 価格またはプール状態に基づいてルート内で分岐する必要がある場合、オンチェーンルーティングはクライアント側の構成ほど柔軟ではありません。

## メンタルモデル

ルーターを**トランザクションパッキングユーティリティ**と考えてください。ルート仕様を取り込んで、1 つの命令、1 つのトランザクション、1 つのコンピュート予算にパックします。各ホップは内部的にそのプールプログラムに CPI を実行し、そこで曲線数学を処理します。ルーターの仕事はアカウントを正しく渡し、ホップ間でトークンを移動し、スリッページをチェックすることです。

## 次のステップ

* [`/ja/products/routing/accounts`](/ja/products/routing/accounts) — ルート権限 PDA と共有アカウントパターン。
* [`/ja/products/routing/instructions`](/ja/products/routing/instructions) — 完全な命令 API（全 10 バリアント）。
* [`/ja/products/routing/code-demos`](/ja/products/routing/code-demos) — TypeScript と Raw Rust でルートを構築する例。
* [`/ja/integration-guides/routing-and-mev`](/ja/integration-guides/routing-and-mev) — 複数ホップルーティングの広い戦略。
