---
title: "サブグラフとは？（ガイド）"
description: "サブグラフの仕組み、使い方、開発の始め方を解説"
---

# サブグラフとは？（ガイド）

**Subgraphは、フルスタック開発者が素早くアクセスできるように、アプリケーション固有のブロックチェーンデータを集約する。**

ブロックチェーンはデータを時系列で記録し、特定のアプリケーションを考慮しない。これまで、開発者が自分のスマートコントラクトに関連する情報を表示したい場合、JSON-RPCを使ってブロックごと、トランザクションごとに検索する必要があった。

Subgraphは、開発者がオンチェーンデータにリアルタイムでアクセスするためのシンプルな方法を提供し、ユーザー向けの有用なアプリケーションインタラクションを構築できるようにする。

この記事では、Subgraphの機能、一般的な用途、利点、利用可能なプロバイダー、開発者がSubgraphを使い始めるためのリソースについて解説する。

## **Subgraphとは何か**

**Subgraphは、フロントエンド開発者が素早くアクセスできるように、アプリケーション固有のブロックチェーンデータを集約する。**

Subgraphは[GraphQL](https://www.alchemy.com/dapps/graphql) APIを通じて開発者に公開され、ユーザーは自分のコントラクトで発生しているトランザクションデータをリアルタイムでクエリできる。Subgraphは特に、堅牢なフロントエンドインターフェースを必要とする複雑なカスタムスマートコントラクトの開発者にとって有益である。

例えば、過去24時間の[Uniswap](https://www.alchemy.com/dapps/uniswap) v3の単一の流動性プール内の全トランザクションをクエリする場合、Uniswapはスキーマを定義し、イベントデータをインデックスしてSubgraphを作成し、生成されたGraphQL APIを使ってSubgraphをクエリするだけで、柔軟かつ効率的にブロックチェーンデータを取得できる。

Subgraphを使うと、開発者は必要に応じてデータをフィルタリング・ソートでき、自分のdappにとって重要な情報だけを抽出できる。また、Subgraphはデータを事前にコンパイルしインデックス化することで、[フルノードやアーカイブノード](https://www.alchemy.com/overviews/full-vs-light-vs-archive-nodes)に直接データをリクエストするよりもクエリ処理を高速化し、より効率的なデータクエリを可能にする。

### Subgraphはどのように動作するか

**Subgraphの「マッピング」は、Subgraphの「マニフェスト」に従って、新しく発見された各ブロックから関連データを取得するようノードに指示するスクリプトである。この新しいデータはSubgraphに追加され、Subgraphの「スキーマ」で定義された通りにGraphQL呼び出しを通じて開発者に提供される。**

まず、Subgraphの基本構造、その構成要素、そしてそれらがどのように相互作用するかを理解する必要がある。

#### Subgraphのマニフェストとは何か

**マニフェスト**には、データソース、テンプレート、およびいくつかのSubgraphメタデータ（説明、リポジトリなど）に関する情報が含まれる。マニフェストは、Subgraphによってインデックスされるスマートコントラクト、そのスマートコントラクト上の関連イベント、そしてイベントデータをGraphノードに保存され、クエリ可能なエンティティに変換する方法を定義する。

#### Subgraphのスキーマとは何か

**スキーマ**は、Subgraphのデータがどのように整理され、GraphQLを使ってどのようにクエリするかを説明する。スキーマはエンティティと、各エンティティの構造化データを定義するべきである。

例えば、Uniswap v3プールのリアルタイム分析用のSubgraphを作成する場合、エンティティはプールとなり、スキーマはそのプールの資産、名前、スマートコントラクトアドレス、手数料などを定義することになる。

#### Subgraphのマッピングとは何か

**マッピング**は、サーバーがマニフェストで指定されたイベントを見つけるたびに呼び出されるAssemblyScriptコードである。マッピングは、イベントや呼び出しから来るデータを変換し、Graphノードのストアに保存する役割を担うイベントハンドラーを定義する。

### **Subgraphの一般的なユースケースは何か**

**Subgraphは、DeFi、NFT、DAO、その他さまざまなオンチェーンアプリケーションで頻繁に使用される。**

#### **カスタムスマートコントラクトのインデックス作成**

カスタムスマートコントラクト（特にERC1155やERC721 NFTなどの標準に従わないもの）のデータをインデックスしたいブロックチェーンアプリケーション開発者は、Subgraphの作成者として頻繁に登場する。カスタムインデックス作成は、検索やフィルタリングなどの機能を備えたフロントエンドユーザーインターフェースを構築する開発者にとって特に重要である。

#### **分散型金融（DeFi）**

[DeFi Subgraph](https://www.alchemy.com/dapps/best/defi-subgraphs)は、トークン価格、為替レート、流動性、取引量といったブロックチェーンデータのインデックス作成とクエリのためにアプリケーションで一般的に使用される。Subgraphを使用するDeFiアプリは、ユーザーに最新データへのリアルタイムアクセスを提供し、効率的な取引やその他の金融操作を可能にする。

#### **非代替性トークン（NFT）**

[NFT Subgraph](https://www.alchemy.com/dapps/best/nft-subgraphs)は、所有権、来歴、取引履歴などのNFTデータをオフチェーンデータと合わせてインデックス化・クエリするために使用できる。これにより、NFTマーケットプレイスやその他のアプリが、NFTの売買や取引を行うユーザーに対してよりスムーズな体験を提供できるようになる。

#### **分散型自律組織（DAO）**

中央集権的な権威とは対照的に、分散型自律組織、すなわち[DAO](https://www.alchemy.com/dapps/top/daos)は、分散されたコミュニティによって運営される組織である。DAOの意思決定の大部分がオンチェーンで行われるため、[DAO Subgraph](https://www.alchemy.com/dapps/best/dao-subgraphs)はメンバーが適切に投票しデータを検証するために重要である。

#### **ゲーミング**

ユーザーのアカウント残高、ゲームの状態、ゲーム内オブジェクトなどのデータへのリアルタイムアクセスは、[ブロックチェーンベースのゲーム](https://www.alchemy.com/overviews/play-to-earn-games)でしばしば必要とされる。このデータはSubgraphを通じてインデックス化・クエリでき、より効率的でレスポンシブなゲームプレイやその他の機能を可能にする。

## **Subgraphで構築する利点は何か**

Subgraphは、フルスタック開発者が使えるブロックチェーンデータのインデックス作成のための非常にシンプルなパラダイムである。AssemblyScriptを書けば、それで準備は完了する。ホスト型ソリューションではバックエンドが付属するため、開発者はデータベースやサーバーを自分で運用する必要がない。

Subgraphで構築するその他の利点として、シンプルさ、互換性、耐障害性が挙げられる。

### **1. Subgraphのシンプルさ**

Subgraphは、クエリ可能なアプリケーション固有データのデータベースである。ホスト型Subgraphをデータバックエンドとして使用することで、開発者は自分でデータベースを構築する時間とオーバーヘッドを省ける。

Subgraphは、それぞれAssemblyScriptとGraphQLを使って定義・アクセスされる。これらは通常、フルスタック開発者にとって馴染みのあるパラダイムであり、web3を始めたばかりの開発者にとってもSubgraphを扱いやすくしている。

### **2. 複数のブロックチェーンとの互換性**

Subgraphには、数多くのEVM互換ブロックチェーンネットワークで動作できるという利点があり、開発者は多くのソースからデータを取得できる。その結果、分散型アプリを複数のブロックチェーンネットワークにまたがって動作するよう設計でき、柔軟性とスケーラビリティが向上する。

各Subgraphは1つのチェーンからのみデータを取得するが、開発者は同様のスキーマとマッピングを使って、サポートされている異なるブロックチェーンネットワークにSubgraphを最小限のエンジニアリング労力でデプロイできる。また、graph-cliや、この機能をサポートするプロバイダーを通じて、Subgraphのクエリをクロスチェーンで行うことも可能である。

### 3. より高いセキュリティと耐障害性

分散型インデックスプロトコルを使ってSubgraphをクエリすることで、開発者はアプリケーションのフルスタック分散化を維持することを選択できる。分散型版とホスト型版のSubgraphの使用にはパフォーマンス上のトレードオフがあるが、選択肢があることで開発者は自分の特定のユースケースに合わせて最適化できる。

分散型インデクサーを使うと、アプリケーションは多様なプロバイダーから複数のSubgraphを実行することで単一のデータソースへの依存を減らすことができ、単一ソースからの攻撃やダウンタイムに対する脆弱性を低減できる。こうしたサービスはGraphプロトコルによって提供されている。

Subgraphは、潜在的に有害なデータをフィルタリングするように作成することもでき、アプリケーションに追加の保護層をもたらす。複数のSubgraphを運用することで、アプリケーションのデータインフラをより安全で耐障害性の高いものにできる。

## **Subgraphでアプリを構築する際のトレードオフは何か**

**既存のSubgraphの利用は簡単だが、作成やデバッグは複雑になりうる上、コストや設計上の制約が課題となる場合がある。**

### 1. Subgraphの開発とデバッグ

Subgraphを効果的に使用するには、開発者は複雑なエコシステムを学び、ツールと可視性の不足によるSubgraphのデバッグの課題に対処する必要がある。Subgraph構築のもう一つの課題は、マッピングがWebAssemblyにトランスパイルされることで、これがSubgraphのデバッグをさらに難しくしている。

### **2. カスタマイズの制限**

Subgraphは、どのデータをインデックス化し、どのようにクエリできるかについて大きな柔軟性を提供するが、カスタマイズには限界がある。dappが非常に厳しいインデックス作成やクエリの要件を持つ場合、完全にカスタムなデータのインデックス作成・変換ソリューションが必要になる場合がある。

### **3. コスト**

コストは、新しい技術ソリューションを選ぶ任務を負うアプリケーション開発者にとって重要な決定要因である。SubgraphはJSON-RPCと比較してブロックチェーンデータのクエリを容易かつ高速にできる一方で、インデックス作成やクエリサービスへの支払いといった追加コストが発生し、これは時間とともに積み重なっていく。

### 4. インデックス作成の速度

大量のデータを扱うアプリケーション開発者は、Subgraphを使用する際の課題としてインデックス作成の速度をしばしば挙げる。インデックス作成の速度は、データの量や複雑さだけでなく、使用しているインデックス作成ソリューションによっても変わる。

## **最も優れたSubgraphプロバイダーは誰か**

**この分野で著名なプロバイダーには、The Graph、Goldsky、ChainStackなどがある。**

### **The Graph**

[The Graph](https://www.alchemy.com/dapps/the-graph)は、開発者がスケーラブルかつコスト効率の良い方法でブロックチェーンデータのサブセットを生成・クエリできるようにする。

Subgraphプロバイダーは、The GraphのツールとインフラストラクチャーをSubgraphの作成、デプロイ、維持に活用でき、開発者はThe GraphのGraphQL APIを使って簡単にクエリできる。The GraphのSubgraphサービスは柔軟で構成可能であることを目指しており、開発者はあらゆるブロックチェーンやデータソースからデータをインデックス化・クエリできる。

**Subgraphを The Graphにデプロイする主な方法は3つある。**

1. セルフホスト
1. The Graph Hosted Service
1. Subgraph Studio

#### **1. セルフホスト**

開発者は、Subgraphエコシステムを構成する各種コンポーネント（\`graph-node\`のコードベース）を自分でホストし、そのセルフホスト型システムに自分のSubgraphをデプロイできる。

#### **2. The Graphのホスト型サービス**

自前のインフラを運用したくない開発者は、Subgraphを無料でThe Graph Hosted Serviceにデプロイできる。これは新しい小規模なチームにとって良い選択肢である。導入が簡単で、多少の信頼性の低さや速度の遅さも許容できるためである。ただし、[The GraphのHosted Serviceは現在非推奨化が進められている](https://thegraph.com/blog/sunsetting-hosted-service/)。

#### **3. Subgraph Studio**

開発者は、The Graphのトークンを利用する[Subgraph Studio](https://thegraph.com/docs/en/deploying/subgraph-studio/)製品を通じて、Subgraphを The Graphの分散型ネットワークにデプロイできる。ただし、このデプロイ方法はホスト型ソリューションの全機能をサポートしているわけではない（例えば、IPFS機能がなく、対応チェーンも少ない）。

### **Goldsky**

[Goldsky](https://www.alchemy.com/dapps/goldsky)は、洗練されたブロックチェーンや[データストリーミングインフラ](https://www.alchemy.com/docs/reference/custom-webhooks-example)を管理する必要をなくしながら、エンジニアがアプリケーション向けのリアルタイムデータストリームを作成できるようにする。Goldskyは、ブロックチェーンやSubgraphをインデックス化し、データを要件に合わせて変換し、その結果をデータウェアハウス、Webhook、APIへリアルタイムでストリーミングできる。

### Chainstack

[Chainstack Subgraphs](https://www.alchemy.com/dapps/chainstack-subgraphs)は、Subgraphのインデックス作成に関するステーキング、デリゲーション、報酬付与などの手間をかけずに利用できる、Subgraphをデプロイするための非常に高速な本番レベルのソリューションである。迅速なインデックス作成と一貫したデータ可用性のために[Chainstack](https://www.alchemy.com/dapps/chainstack)を利用できる。

## **Subgraph開発リソース**

**以下は、Subgraphの構築を始める開発者に役立ついくつかのリソースである。**

### **1. The Graphのドキュメント**

[The Graphのドキュメント](https://thegraph.com/docs/en/)は、開発者が分散型アプリ向けのSubgraph構築を始めるために必要な知識をすべて提供する包括的なリソースである。開発環境の構築からSubgraphのデプロイ、クエリまで、あらゆる内容をカバーする詳細な手順、チュートリアル、リファレンス資料を提供している。

### **2. Subgraphの実装例**

The Graphの公式GitHubリポジトリには、Ethereum、Polygon、IPFSなどを含むブロックチェーンネットワークからデータをインデックス化・クエリするためのSubgraph実装例が含まれている。特定のdappの要件に合わせてカスタマイズできる[シンプルなSubgraphテンプレート](https://github.com/graphprotocol/example-subgraph)とサンプルコードを提供している。

### **3. Messariの標準Subgraph**

[Messari](https://www.alchemy.com/dapps/messari)の[Subgraphリポジトリ](https://subgraphs.messari.io/)は、EthereumやBNB Chainなどの著名なブロックチェーンネットワークのデータを分析するための、事前構築済みの様々なSubgraphを開発者に提供している。過去の価格データ、オンチェーン指標などさまざまな機能を提供しており、Subgraphの活用を検討する開発者にとって貴重なリソースとなっている。

## **Subgraphを使うべきか**

監視したいカスタムスマートコントラクトがある場合、Subgraphを構築することは優れた解決策となりうる。

Subgraphは、フロントエンド開発者が素早くアクセスできるように、アプリケーション固有のブロックチェーンデータを集約する。
