オンチェーンDEX比較 — Uniswap・Jupiter・Raydium・Curve・PancakeSwap

中級
DeFiDEXアルゴリズム取引

はじめに

分散型取引所(DEX)はDeFiエコシステムの中核を担い、中央集権型取引所(CEX)を介さずにトークンの交換を可能にします。2026年現在、DEXの取引高はCEXの15-20%に到達し、特にオンチェーンでのアルゴリズム取引やMEV戦略の舞台として重要性を増しています。

本記事では、主要なスポットDEXをアーキテクチャ・手数料・流動性・裁定取引機会の観点から徹底比較します。

DEXのアーキテクチャ分類

AMM(自動マーケットメイカー)型

スマートコントラクト上の数式で価格を決定する方式です。

【定積マーケットメイカー(Uniswap v2型)】
x × y = k

x: トークンAのリザーブ量
y: トークンBのリザーブ量
k: 定数(流動性追加/削除時のみ変化)

価格 = y / x

CLMM(集中流動性)型

流動性提供者が価格範囲を指定し、資本効率を高める方式です。Uniswap v3で導入されました。

【集中流動性の概念】

価格レンジ: [Pa, Pb]
仮想リザーブ: x_virtual = x + L / √Pb
                y_virtual = y + L × √Pa

L: 流動性の深さ
効率倍率: √(Pb/Pa) / (√(Pb/Pa) - 1)

例: ETH/USDC で ±5%のレンジ → 約10倍の資本効率

オーダーブック型

CEXと同様の指値注文方式をオンチェーンまたはハイブリッドで実現する方式です。

方式メリットデメリット代表例
AMM(定積)シンプル、常に流動性あり資本効率が低い、IL大Uniswap v2, PancakeSwap v2
CLMM(集中流動性)高資本効率管理が複雑、IL管理必要Uniswap v3/v4, Raydium CLMM
StableSwapペッグ資産で低スリッページ非ペッグ資産に不向きCurve
オーダーブック価格発見が効率的オンチェーンではコスト高Serum後継, Phoenix
アグリゲーター最良価格を自動ルーティング自身は流動性を持たないJupiter, 1inch

主要DEX詳細比較

1. Uniswap v4

2025年にローンチされたUniswapの最新版。Hooks(フック)の導入が最大の革新です。

基本データ

項目
チェーンEthereum, Arbitrum, Optimism, Polygon, Base, BSC
TVL約$12B(全チェーン合計)
日次取引高$2-5B
手数料動的(Hooks依存)、デフォルト0.3%
トークンUNI

Hooks(フック)の仕組み

Uniswap v4最大の特徴は、プールの動作をカスタマイズできるHooksです。

// Uniswap v4 Hook の基本構造
interface IHooks {
    // スワップ実行前に呼ばれる
    function beforeSwap(
        address sender,
        PoolKey calldata key,
        IPoolManager.SwapParams calldata params,
        bytes calldata hookData
    ) external returns (bytes4, BeforeSwapDelta, uint24);

    // スワップ実行後に呼ばれる
    function afterSwap(
        address sender,
        PoolKey calldata key,
        IPoolManager.SwapParams calldata params,
        BalanceDelta delta,
        bytes calldata hookData
    ) external returns (bytes4, int128);

    // 流動性追加前/後
    function beforeAddLiquidity(...) external returns (bytes4);
    function afterAddLiquidity(...) external returns (bytes4);
}

主要なHookユースケース

Hook種別説明効果
動的手数料ボラティリティに応じて手数料を調整LP収益最大化
TWAMM大口注文を時間分割で実行価格インパクト低減
リミットオーダー指値注文をAMMプール上で実現オーダーブック機能追加
オラクル統合Chainlink等の外部価格参照MEV保護
KYC/ホワイトリスト許可されたアドレスのみ取引可能コンプライアンス対応

Singleton アーキテクチャ

【v3】プールごとに個別コントラクト
Pool A: 0x1234...  ETH/USDC
Pool B: 0x5678...  ETH/DAI
Pool C: 0x9abc...  WBTC/ETH
→ マルチホップスワップで複数コントラクトをまたぐ

【v4】すべてのプールが1つのコントラクト内
PoolManager: 0xUNIFIED...
  ├─ Pool A: ETH/USDC
  ├─ Pool B: ETH/DAI
  └─ Pool C: WBTC/ETH
→ Flash Accounting でガス大幅削減(約50%減)

2. Jupiter(Solana)

Solanaエコシステム最大のDEXアグリゲーターであり、単なるルーティングを超えた総合取引プラットフォームです。

基本データ

項目
チェーンSolana
統合DEX数20+
日次取引高$1-3B
手数料ルーティング手数料0%(DEX手数料のみ)
トークンJUP

アグリゲーションの仕組み

ユーザー: SOL → USDC (1000 SOL)

Jupiter のルーティング最適化:
┌─ 40% → Raydium (SOL/USDC) ─────────────────┐
├─ 30% → Orca (SOL/USDC) ───────────────────── ├→ 最終出力: USDC
├─ 20% → Raydium (SOL/mSOL → mSOL/USDC) ──── │
└─ 10% → Lifinity (SOL/USDC) ─────────────────┘

結果: 単一DEX利用時より 0.5-2% 良い約定価格

Jupiter API(ボット開発向け)

import httpx

async def get_jupiter_quote(
    input_mint: str,
    output_mint: str,
    amount: int,  # lamports単位
    slippage_bps: int = 50  # 0.5%
) -> dict:
    """Jupiter Quote APIで最適ルートを取得"""
    url = "https://quote-api.jup.ag/v6/quote"
    params = {
        "inputMint": input_mint,
        "outputMint": output_mint,
        "amount": str(amount),
        "slippageBps": slippage_bps,
        "onlyDirectRoutes": False,
        "asLegacyTransaction": False,
    }
    async with httpx.AsyncClient() as client:
        resp = await client.get(url, params=params)
        return resp.json()

# SOL → USDC の見積もり取得
SOL_MINT = "So11111111111111111111111111111111111111112"
USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
quote = await get_jupiter_quote(SOL_MINT, USDC_MINT, 1_000_000_000)
# amount: 1 SOL = 1,000,000,000 lamports

print(f"出力: {int(quote['outAmount']) / 1e6} USDC")
print(f"価格インパクト: {quote['priceImpactPct']}%")
print(f"ルート数: {len(quote['routePlan'])}")

DCA(ドルコスト平均法)とリミットオーダー

Jupiterはアグリゲーション以外にも、DCA機能やリミットオーダー機能をオンチェーンで提供しています。

機能説明ユースケース
DCA指定間隔で自動分割購入長期積立
Limit Order指定価格での指値注文テイクプロフィット
PerpetualJupiter Perps(デリバティブ)レバレッジ取引
Launch Pad新規トークンローンチ初期投資

3. Raydium(Solana)

Solanaネイティブの主要DEXで、CLMMとAMMの両方を提供します。

基本データ

項目
チェーンSolana
TVL約$2B
プールタイプCLMM, Standard AMM, Constant Product
手数料0.01% - 1%(プールごと)
トークンRAY

CLMM(Concentrated Liquidity Market Maker)

【Raydium CLMMの価格レンジ設定例】

SOL/USDC プール:
現在価格: $150

戦略A(狭いレンジ):
  レンジ: $140 - $160 (±6.7%)
  資本効率: 約15倍
  手数料収入: 高い
  リバランス頻度: 高い

戦略B(広いレンジ):
  レンジ: $100 - $200 (±33%)
  資本効率: 約3倍
  手数料収入: 低い
  リバランス頻度: 低い

戦略C(片側流動性):
  レンジ: $120 - $150 (現在価格以下)
  → SOLのみ預入、価格下落時にUSDCに変換
  実質的な指値買い注文として機能

4. Curve Finance

ステーブルコイン・ペッグ資産のスワップに特化したDEXです。

基本データ

項目
チェーンEthereum, Arbitrum, Optimism, Polygon, Base等
TVL約$4B
特徴StableSwap不変量によるペッグ資産の低スリッページ交換
手数料0.01% - 0.04%
トークンCRV

StableSwap不変量

【Curve StableSwap の数式】

通常のAMM(定積):
  x × y = k
  → 1:1ペッグ資産でも大きなスリッページ

Curve StableSwap:
  A × n^n × Σxi + D = A × D × n^n + D^(n+1) / (n^n × Πxi)

  A: 増幅係数(Amplification coefficient)
  n: トークン数
  xi: 各トークンのリザーブ
  D: プール全体の「理想的な」総量

A が大きい → 定和曲線(x + y = k)に近づく → 低スリッページ
A が小さい → 定積曲線(x × y = k)に近づく → 通常のAMM

【スリッページ比較($1M スワップ時)】
USDC → USDT:
  Uniswap v3: 0.05-0.1%
  Curve:      0.01-0.02%  ← 2-5倍優れている

veCRV / Curve War

CRV トークノミクス:

CRV → ロック → veCRV(最大4年ロック)
                  ├─ ガバナンス投票権
                  ├─ ゲージ投票(報酬配分を決定)
                  └─ プロトコル手数料の分配

Curve War:
  Convex Finance: CRVを集約してveCRVに変換
  → cvxCRV 保有者に投票権を委任
  → vlCVX(Vote-Locked CVX)でゲージ投票を制御

  Aura Finance: Balancer版のConvex
  → BAL/auraBALエコシステム

5. PancakeSwap

BSC(BNB Smart Chain)を中心とするマルチチェーンDEXです。

基本データ

項目
チェーンBSC, Ethereum, Arbitrum, Base, zkSync等
TVL約$3B
特徴Uniswap v3 fork + GameFi要素
手数料0.01% - 0.25%
トークンCAKE

総合比較表

DEXチェーンTVL手数料AMM方式最適ユースケース
Uniswap v4マルチチェーン$12B動的/0.3%CLMM + HooksEVM系汎用、大口取引
JupiterSolanaN/A※0%アグリゲーターSolana上の最適ルーティング
RaydiumSolana$2B0.01-1%CLMM + AMMSolanaネイティブ流動性提供
Curveマルチチェーン$4B0.01-0.04%StableSwapステーブルコイン交換
PancakeSwapBSC中心$3B0.01-0.25%CLMMBSCエコシステム

※Jupiterはアグリゲーターのため、TVLは統合先DEXに帰属

インパーマネントロス(IL)の理解

流動性提供者が理解すべき最重要リスクがインパーマネントロスです。

IL計算式

import numpy as np

def impermanent_loss(price_ratio: float) -> float:
    """
    インパーマネントロスを計算

    Args:
        price_ratio: 預入時からの価格変動率
                     (例: 2.0 = 価格が2倍, 0.5 = 価格が半分)
    Returns:
        IL(負の値 = 損失)
    """
    return 2 * np.sqrt(price_ratio) / (1 + price_ratio) - 1

# 価格変動とILの関係
print("価格変動 | IL")
print("-" * 25)
for change in [0.5, 0.75, 0.9, 1.0, 1.1, 1.25, 1.5, 2.0, 3.0, 5.0]:
    il = impermanent_loss(change)
    print(f"  {change:5.2f}x  | {il:7.2%}")
価格変動 | IL
-------------------------
   0.50x |  -5.72%
   0.75x |  -1.03%
   0.90x |  -0.14%
   1.00x |   0.00%
   1.10x |  -0.11%
   1.25x |  -0.62%
   1.50x |  -2.02%
   2.00x |  -5.72%
   3.00x | -13.40%
   5.00x | -25.46%

CLMM での IL 増幅

集中流動性ではレンジ外に価格が動いた場合、IL が大幅に増幅されます。

【レンジ幅とIL増幅の関係】

フルレンジLP(Uniswap v2相当):
  ETH価格 2倍 → IL = -5.72%

集中流動性LP(±10%レンジ):
  ETH価格 2倍 → レンジ外 → 実質IL = -100%
  (全ポジションが片方のトークンに変換される)

集中流動性LP(±50%レンジ):
  ETH価格 2倍 → IL ≈ -11.4%(約2倍のIL)

アービトラージ(裁定取引)機会

DEX間アービトラージ

from dataclasses import dataclass
from typing import Optional

@dataclass
class ArbitrageOpportunity:
    token_pair: str
    buy_dex: str
    sell_dex: str
    buy_price: float
    sell_price: float
    spread_pct: float
    estimated_profit_usd: float
    gas_cost_usd: float
    net_profit_usd: float

def find_arbitrage(
    prices: dict[str, dict[str, float]],
    trade_size_usd: float = 10000,
    gas_cost: float = 5.0,
) -> list[ArbitrageOpportunity]:
    """
    DEX間の価格差から裁定機会を検出

    Args:
        prices: {token_pair: {dex_name: price}}
        trade_size_usd: 取引サイズ(USD)
        gas_cost: ガス代見積もり(USD)
    """
    opportunities = []

    for pair, dex_prices in prices.items():
        dex_list = list(dex_prices.items())
        for i in range(len(dex_list)):
            for j in range(len(dex_list)):
                if i == j:
                    continue
                buy_dex, buy_price = dex_list[i]
                sell_dex, sell_price = dex_list[j]
                spread = (sell_price - buy_price) / buy_price
                if spread > 0:
                    gross_profit = trade_size_usd * spread
                    net_profit = gross_profit - gas_cost
                    if net_profit > 0:
                        opportunities.append(ArbitrageOpportunity(
                            token_pair=pair,
                            buy_dex=buy_dex,
                            sell_dex=sell_dex,
                            buy_price=buy_price,
                            sell_price=sell_price,
                            spread_pct=spread * 100,
                            estimated_profit_usd=gross_profit,
                            gas_cost_usd=gas_cost,
                            net_profit_usd=net_profit,
                        ))

    return sorted(opportunities, key=lambda x: x.net_profit_usd, reverse=True)

CEX-DEX アービトラージ

CEXとDEXの価格差を利用する戦略は、最も一般的なMEV戦略の一つです。

戦略説明必要なもの利益幅
単純アービトラージDEXで安く買いCEXで高く売るCEX API + DEXコントラクト0.1-0.5%
フラッシュローン裁定借入→スワップ→返済を1トランザクションAave/Balancer Flash Loan0.05-0.3%
サンドイッチ大口注文の前後で取引MEVインフラ0.1-1%
JIT流動性スワップ直前に流動性追加/直後に削除MEVインフラ + 大量資本変動的

フラッシュローンを利用した裁定

// Aave V3 Flash Loan を利用した裁定取引の概念コード
contract FlashLoanArbitrage is IFlashLoanSimpleReceiver {

    IPoolAddressesProvider public immutable ADDRESSES_PROVIDER;
    IPool public immutable POOL;

    function executeArbitrage(
        address token,
        uint256 amount,
        address buyDex,
        address sellDex,
        bytes calldata buyData,
        bytes calldata sellData
    ) external {
        // Flash Loan リクエスト
        POOL.flashLoanSimple(
            address(this),
            token,
            amount,
            abi.encode(buyDex, sellDex, buyData, sellData),
            0  // referralCode
        );
    }

    function executeOperation(
        address asset,
        uint256 amount,
        uint256 premium,
        address initiator,
        bytes calldata params
    ) external override returns (bool) {
        // 1. DEX Aで安く購入
        // 2. DEX Bで高く売却
        // 3. Flash Loan + 手数料を返済
        // 4. 残りが利益

        uint256 amountOwed = amount + premium;
        IERC20(asset).approve(address(POOL), amountOwed);
        return true;
    }
}

スリッページと価格インパクト

プール深度による比較

【$100,000 スワップ時のスリッページ比較(概算)】

ETH/USDC:
  Uniswap v4 (Ethereum): 0.02-0.05%
  Raydium CLMM (Solana):  0.05-0.15%
  PancakeSwap (BSC):       0.1-0.3%

ステーブルコイン(USDC/USDT):
  Curve (Ethereum):    0.005-0.01%  ← 最良
  Uniswap v4:          0.02-0.05%
  PancakeSwap:         0.05-0.15%

ロングテールトークン:
  Jupiter (集約):     0.5-2%
  個別DEX:           1-5%+

ボット開発のためのAPI/SDK比較

DEXAPI種別レート制限SDK特記事項
Uniswap v4Subgraph + コントラクト直接Subgraph依存@uniswap/v4-sdkHooks対応SDK
JupiterREST API600 req/min@jup-ag/apiV6 API、高速
RaydiumREST + コントラクト制限緩い@raydium-io/raydium-sdk-v2CLMM SDK充実
Curveコントラクト直接N/Acurve-jsRegistry経由
PancakeSwapSubgraph + SDKSubgraph依存@pancakeswap/sdkUniswap forkベース

まとめ — DEX選択の指針

ユースケース別推奨

ユースケース推奨DEX理由
EVM大口スワップUniswap v4最大流動性、Hooks による高度な執行
SolanaスワップJupiter最適ルーティング、手数料0%
ステーブルコイン交換CurveStableSwapで最小スリッページ
LP運用(初心者)PancakeSwapシンプルUI、低ガス
LP運用(上級者)Uniswap v4 / Raydium CLMM集中流動性で高収益
アービトラージボットJupiter + Uniswap v4クロスチェーン裁定
MEV戦略Uniswap v4Hooks + 高流動性

2026年のDEXトレンド

  1. インテント(Intent)ベース取引: ユーザーが「何をしたいか」を宣言し、ソルバーが最適な執行を競うモデル(UniswapX, CowSwap等)
  2. クロスチェーンDEX: ブリッジを統合したシームレスなクロスチェーンスワップ
  3. RWA(実物資産)トークン: 国債やMMFのトークン化資産がDEX上で取引可能に
  4. Hook エコシステム: Uniswap v4 Hooksによるカスタムロジックの爆発的増加
  5. MEV保護: プライベートメモリプール、バッチオークション等のMEV対策強化

DEX選択は、取引対象のチェーン・アセットタイプ・取引サイズ・自動化の必要性に基づいて判断することが重要です。アルゴリズム取引を行う場合は、API/SDKの充実度とレイテンシーも重要な選択基準となります。