Agent Skills by ALSEL
汎用DevOps・インフラ⭐ リポ 53品質スコア 82/100

dojo-indexer

Torii インデクサーをセットアップして、GraphQL クエリ、gRPC サブスクリプション、SQL アクセスに対応させることができます。デプロイしたワールドをクライアントクエリやリアルタイム更新用にインデックスする際に使用します。

description の原文を見る

Set up and configure Torii indexer for GraphQL queries, gRPC subscriptions, and SQL access. Use when indexing your deployed world for client queries or real-time updates.

SKILL.md 本文

Dojo インデクサー (Torii)

ワールド状態への効率的なクエリとリアルタイムサブスクリプション用に、DojoのインデクサーであるToriiをセットアップして使用します。

このスキルを使用する場合

  • 「Toriiインデクサーをセットアップしたい」
  • 「ワールド用にGraphQLを設定したい」
  • 「エンティティ更新のサブスクリプションを作成したい」
  • 「ワールド状態を効率的にクエリしたい」

このスキルでできること

Toriiインデクサーを管理します:

  • Toriiの起動と設定
  • GraphQLクエリの作成
  • リアルタイムサブスクリプションのセットアップ
  • SQLデータベースへの直接アクセス

クイックスタート

Toriiを起動:

torii --world <WORLD_ADDRESS>

デフォルト設定でToriiが起動します:

  • GraphQL API (http://localhost:8080/graphql)
  • gRPC API (http://localhost:8080)
  • インメモリデータベース (開発用)

コントローラーインデックス有効時 (推奨):

torii --world <WORLD_ADDRESS> --indexing.controllers

本番環境設定:

torii --world <WORLD_ADDRESS> --db-dir ./torii-db --indexing.controllers

Toriiとは?

Toriiはドージョのインデクサーで、以下の機能を提供します:

  • ブロックチェーンのワールドイベントを監視
  • モデル状態変化をインデックス
  • クエリ用GraphQL APIを提供
  • サブスクリプション用gRPC APIを提供
  • 複雑なクエリ用SQLアクセスを提供

Toriiを使用する理由:

  • 直接RPC クエリより高速
  • 複雑なクエリ (フィルタ、ページネーション)
  • リアルタイムサブスクリプション
  • タイプセーフなGraphQLスキーマ

GraphQL API

ToriiはGraphQLエンドポイント http://localhost:8080/graphql を提供します

ブラウザーのGraphiQL IDEを使用して、スキーマを探索してクエリをテストできます。

スキーマ構造

Toriiは2種類のクエリを生成します:

汎用クエリ:

  • entities - フィルタリング可能なすべてのエンティティにアクセス
  • models - モデル定義を取得
  • transactions - インデックス済みトランザクションをクエリ

モデル固有クエリ:

  • {modelName}Models - 各モデル用のカスタムクエリ
  • 例: positionModelsmovesModels

基本的なクエリ

モデルのすべてのエンティティを取得:

query {
    movesModels {
        edges {
            node {
                player
                remaining
                last_direction
            }
        }
    }
}

モデルメタデータを取得:

query {
    models {
        edges {
            node {
                id
                name
                classHash
                contractAddress
            }
        }
        totalCount
    }
}

ページネーション

カーソルベースのページネーション:

query {
    entities(first: 10) {
        edges {
            cursor
            node {
                id
            }
        }
        pageInfo {
            hasNextPage
            endCursor
        }
    }
}

次のページを取得:

query {
    entities(first: 10, after: "cursor_value") {
        edges {
            cursor
            node { id }
        }
    }
}

オフセット/リミットベースのページネーション:

query {
    entities(offset: 20, limit: 10) {
        edges {
            node { id }
        }
        totalCount
    }
}

リアルタイムサブスクリプション

WebSocket経由でワールド状態変化をサブスクライブします。

エンティティ更新

subscription {
    entityUpdated(id: "0x54f58...") {
        id
        updatedAt
        models {
            __typename
            ... on Position {
                vec {
                    x
                    y
                }
            }
            ... on Moves {
                remaining
            }
        }
    }
}

イベントストリーム

すべてのワールドイベントをモニタリング:

subscription {
    eventEmitted {
        id
        keys
        data
        transactionHash
    }
}

モデル登録

新しいモデル登録をリッスン:

subscription {
    modelRegistered {
        id
        name
        namespace
    }
}

SQLアクセス

Toriiはデータ をSQLiteに保存し、複雑なクエリでアクセスできます。

データベースに接続:

sqlite3 torii.db

クエリの例:

-- エンティティ数をカウント
SELECT COUNT(*) FROM entities;

-- カスタム集計
SELECT AVG(value) FROM model_data WHERE model_name = 'Health';

クライアント統合

JavaScript/TypeScript

import { createClient } from '@dojoengine/torii-client';

const client = await createClient({
    rpcUrl: "http://localhost:5050",
    toriiUrl: "http://localhost:8080",
    worldAddress: WORLD_ADDRESS,
});

// エンティティをクエリ
const positions = await client.getEntities({
    model: "Position",
    limit: 10
});

// 更新をサブスクライブ
await client.onEntityUpdated(
    [{ model: "Position", keys: [playerId] }],
    (entity) => console.log("Position updated:", entity)
);

Apollo Client (GraphQL)

import { ApolloClient, InMemoryCache, gql } from '@apollo/client';

const client = new ApolloClient({
    uri: 'http://localhost:8080/graphql',
    cache: new InMemoryCache(),
});

const { data } = await client.query({
    query: gql`
        query GetMoves {
            movesModels {
                edges {
                    node {
                        player
                        remaining
                    }
                }
            }
        }
    `
});

設定オプション

オプション説明デフォルト
--worldワールドコントラクトアドレス任意 (Torii 1.6.0以降)
--rpcRPC エンドポイントURLhttp://localhost:5050
--db-dirデータベースディレクトリインメモリ
--configTOML設定ファイルへのパスなし
--http.cors_originsCORS origins*

スロットデプロイメント (リモート)

Slotはホスト型Toriiインスタンスを提供します。Slotはtomol設定ファイルが必要です。

設定を作成

# torii.toml
world_address = "<WORLD_ADDRESS>"
rpc = "<RPC_URL>"

[indexing]
controllers = true

すべてのTOML オプション (インデックス、ポーリング、名前空間など) については、Torii設定ガイドを参照してください。

デプロイ

slot auth login

slot deployments create <PROJECT_NAME> torii --config torii.toml --version <DOJO_VERSION>

管理

# ログをストリーム
slot deployments logs <PROJECT_NAME> torii -f

# 削除して再作成 (安全 — すべてのデータはオンチェーン)
slot deployments delete <PROJECT_NAME> torii

開発ワークフロー

ターミナル 1: Katanaを起動

katana --dev --dev.no-fee

ターミナル 2: ワールドをデプロイ

sozo build && sozo migrate

ターミナル 3: Toriiを起動

torii --world <WORLD_ADDRESS> --http.cors_origins "*"

トラブルシューティング

「接続が拒否された」

  • Toriiが実行中であることを確認
  • ポート (デフォルト 8080) を確認
  • ファイアウォールルールを確認

「ワールドが見つからない」

  • ワールドアドレスが正しいことを確認
  • RPC URLにアクセス可能であることを確認
  • ワールドがデプロイされていることを確認

「クエリが遅い」

  • 汎用 entities の代わりにモデル固有クエリを使用
  • ページネーションを使用
  • 必要なフィールドのみをリクエスト

次のステップ

Toriiセットアップ後:

  1. クライアント (dojo-client スキル) と統合
  2. 最適化されたクエリを作成
  3. サブスクリプションをセットアップ
  4. パフォーマンスを監視

関連スキル

  • dojo-deploy: 最初にワールドをデプロイ
  • dojo-client: クライアントでToriiを使用
  • dojo-world: Toriiがインデックスする内容を設定
  • dojo-migrate: マイグレーション後Toriiを再起動

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
dojoengine
リポジトリ
dojoengine/book
ライセンス
MIT
最終更新
2026/5/1

Source: https://github.com/dojoengine/book / ライセンス: MIT

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: dojoengine · dojoengine/book · ライセンス: MIT