初心者向け!ザ・グラフ(GRT)の始め方完全マニュアル
ザ・グラフ(GRT)は、ブロックチェーンデータのインデックス作成とクエリ実行を効率的に行うためのオープンソースのGraphQL APIです。分散型アプリケーション(dApps)の開発者は、GRTを利用することで、ブロックチェーン上のデータを簡単にアクセスし、利用することができます。本マニュアルでは、GRTの基本的な概念から、環境構築、スマートコントラクトのインデックス作成、GraphQLクエリの実行まで、GRTを始めるために必要なすべてのステップを詳細に解説します。
1. GRTの基礎知識
GRTは、ブロックチェーンのデータを効率的に利用するための重要なツールです。従来のブロックチェーンデータへのアクセス方法は、ノードの実行や、複雑なRPC呼び出しが必要であり、開発者の負担が大きくなっていました。GRTは、これらの問題を解決するために、以下の機能を提供します。
- GraphQL API: ブロックチェーンデータをGraphQL形式で提供します。GraphQLは、必要なデータのみを効率的に取得できるため、ネットワーク帯域幅の節約や、アプリケーションのパフォーマンス向上に貢献します。
- The Graph Node: GRTのコアとなるソフトウェアです。ブロックチェーンのデータをインデックス化し、GraphQL APIを通じて提供します。
- Graph Protocol: GRTのエコシステム全体を管理するプロトコルです。
- Subgraph: 特定のスマートコントラクトやイベントを対象とした、GraphQL APIの定義です。Subgraphを作成することで、特定のデータに特化したAPIを構築することができます。
GRTを利用することで、dAppsの開発者は、ブロックチェーンデータの取得や処理にかかる時間を大幅に削減し、より高品質なアプリケーションを開発することができます。
2. 開発環境の構築
GRTの開発を始めるためには、以下のツールをインストールする必要があります。
- Node.js: GRTのツールはNode.jsで記述されているため、Node.jsの実行環境が必要です。推奨バージョンは14以上です。
- npmまたはYarn: Node.jsのパッケージマネージャーです。GRTのツールをインストールするために使用します。
- Graph CLI: GRTのコマンドラインインターフェースです。Subgraphの作成、デプロイ、ローカルでの実行などに使用します。
Graph CLIのインストール手順は以下の通りです。
- Node.jsとnpmまたはYarnをインストールします。
- ターミナルを開き、以下のコマンドを実行します。
npm install -g @graphprotocol/graph-cli - インストールが完了したら、以下のコマンドを実行して、Graph CLIが正しくインストールされていることを確認します。
graph --version
また、ローカルでGRTノードを実行するためには、Dockerのインストールも推奨されます。Dockerを使用することで、GRTノードの環境構築を簡素化することができます。
3. Subgraphの作成
Subgraphは、GRTを利用する上で最も重要な概念の一つです。Subgraphは、特定のスマートコントラクトやイベントを対象とした、GraphQL APIの定義です。Subgraphを作成することで、特定のデータに特化したAPIを構築することができます。
Subgraphの作成手順は以下の通りです。
- ターミナルを開き、Subgraphを作成するディレクトリに移動します。
- 以下のコマンドを実行して、新しいSubgraphを作成します。
graph init my-subgraph
このコマンドは、Subgraphのテンプレートを作成します。 - 作成されたSubgraphディレクトリに移動します。
schema.graphqlファイルを編集し、GraphQLスキーマを定義します。GraphQLスキーマは、Subgraphが提供するデータの構造を定義します。src/mapping.tsファイルを編集し、スマートコントラクトのイベントをGraphQLエンティティにマッピングするロジックを記述します。graph.yamlファイルを編集し、Subgraphの設定を行います。Subgraphの設定には、スマートコントラクトのアドレス、ネットワーク、データソースなどが含まれます。
Subgraphの作成には、GraphQLの知識と、スマートコントラクトの理解が必要です。GraphQLスキーマの定義や、マッピングロジックの記述には、慎重な検討が必要です。
4. GraphQLスキーマの定義
GraphQLスキーマは、Subgraphが提供するデータの構造を定義します。GraphQLスキーマは、型システムを使用して、データの型や関係を明確に定義します。GraphQLスキーマを定義することで、クライアントは、必要なデータのみを効率的に取得することができます。
GraphQLスキーマの定義には、以下の要素が含まれます。
- Type: データの型を定義します。
- Field: 型の属性を定義します。
- Query: データを取得するためのエントリポイントを定義します。
- Mutation: データを変更するためのエントリポイントを定義します。
GraphQLスキーマの例を以下に示します。
type Token {
id: ID!
symbol: String!
totalSupply: BigInt!
}
type Transaction {
id: ID!
from: String!
to: String!
value: BigInt!
}
query Token {
token(id: ID!): Token
}
query Transactions {
transactions(from: String!): [Transaction!]
}
この例では、Token型とTransaction型を定義し、それぞれの型に属性を定義しています。また、TokenとTransactionsというクエリを定義し、それぞれのクエリがどのようなデータを返すかを定義しています。
5. マッピングロジックの記述
マッピングロジックは、スマートコントラクトのイベントをGraphQLエンティティにマッピングするロジックです。マッピングロジックを記述することで、スマートコントラクトのイベントが発生した際に、GraphQLエンティティを更新することができます。
マッピングロジックの記述には、TypeScriptを使用します。TypeScriptは、JavaScriptのスーパーセットであり、静的型付けなどの機能を提供します。TypeScriptを使用することで、マッピングロジックの可読性や保守性を向上させることができます。
マッピングロジックの例を以下に示します。
import { TransferEvent } from "../generated/MyContract/MyContract";
import { Token } from "../generated/schema";
export function handleTransfer(event: TransferEvent):
void {
let token = new Token(event.transaction.hash.toHex());
token.symbol = "MYT";
token.totalSupply = event.balance;
token.save();
}
この例では、TransferEventというスマートコントラクトのイベントを処理する関数を定義しています。この関数は、イベントが発生した際に、TokenというGraphQLエンティティを作成し、イベントのデータをエンティティに保存します。
6. Subgraphのデプロイとクエリの実行
Subgraphを作成し、GraphQLスキーマとマッピングロジックを定義したら、Subgraphをデプロイし、GraphQLクエリを実行することができます。
Subgraphのデプロイ手順は以下の通りです。
- ターミナルを開き、Subgraphディレクトリに移動します。
- 以下のコマンドを実行して、Subgraphをデプロイします。
graph deploy --node https://play.graph.com/ my-subgraph
このコマンドは、SubgraphをGraph Networkにデプロイします。 - Subgraphがデプロイされると、Subgraphのエンドポイントが生成されます。
Subgraphのエンドポイントを使用して、GraphQLクエリを実行することができます。GraphQLクエリは、Subgraphが提供するデータを取得するためのリクエストです。GraphQLクエリは、GraphQLの構文に従って記述する必要があります。
GraphQLクエリの例を以下に示します。
query {
token(id: "0x1234567890abcdef1234567890abcdef12345678") {
id
symbol
totalSupply
}
}
この例では、idが”0x1234567890abcdef1234567890abcdef12345678″であるTokenを取得するクエリを記述しています。このクエリを実行すると、Subgraphは、指定されたidのTokenのid、symbol、totalSupplyを返します。
まとめ
本マニュアルでは、GRTの基本的な概念から、環境構築、スマートコントラクトのインデックス作成、GraphQLクエリの実行まで、GRTを始めるために必要なすべてのステップを詳細に解説しました。GRTは、ブロックチェーンデータの利用を効率化するための強力なツールです。本マニュアルを参考に、GRTを活用して、より高品質なdAppsを開発してください。