GraphQLでブロックチェーンのデータを取得するThe Graph〜Web3.0とブロックチェーンの未来〜
はじめに
最近、noteを始めました。筆者は、スタートアップ企業の創業メンバーで、Webアプリケーション開発にも携わっています。今は、Web3.0文脈のブロックチェーン技術が気になっています。
noteを始めて2週間程ですが、これまでに、Solanaやインターネットコンピューターのnoteを書きました。
今後もWeb技術に関するブロックチェーン関連のnoteを書いていきたいと考えていますが、今回はGraphQLでブロックチェーンのデータへのアクセスを円滑にする、The Graphを紹介したいと思います。
インターネットの歴史
様々なサイトで紹介されていますが、ここでも簡単におさらいします。ご存知の方は読み飛ばして頂いて結構です。
Web1.0
インターネットの起源は、1969年に構築されたARPANET(アーパネット)です。ARPANETは、米国内の大学や研究機関の間をつなぐネットワークとして使用されていました。
そして、1990年にスイスのCERN(セルン)という国際的な研究所で働いていたティム・バーナーズ・リー氏が、最初のブラウザとサーバを完成させました。Webは、世界中のユーザーのブラウザ等のクライアントから、Webサーバに対して、HTTPというシンプルな通信プロトコルでアクセスできる仕組みです。
そして、Webの普及を一気に推し進めたのが、1993年にイリノイ大学の米国立スーパーコンピュータ応用研究所が公開したMosaicというブラウザです。それまでのブラウザは、文字しか取り扱えなかったところ、Mosaicは本文にインラインで画像を顕在させることができました。
Mosaicを源流としたInternet explorerやFirefoxといったブラウザが、HTMLとCSSを独自に拡張した結果、HTMLやCSSのレンダリング結果が大きく異なり、開発者がブラウザごとの対応を迫られる事態になっていました。
このような背景から、1994年にティム・バーナーズ・リー氏が中心となってWorld Wide Web Consortium(W3C)という団体を設立し、HTML、HTTP、URI、CSS等の標準化を行い、インターネットは普及していきました。当初のインターネットは、静的HTMLのページを利用することでしか情報を表示することができず、ユーザーがデータを変更することは不可能でした。
Web2.0
1990年代後半から、インターネットは、単に静的なHTMLのページを表示するだけの機能から、ユーザーが作成したコンテンツを基に動的に変わる参加型へと変化していきます。
2000年にロイ・フィールディング氏の博士論文により、「REST(レスト)」というWebのアーキテクチャスタイルが発表されました。RESTは、GET、PUT、POST、DELETEといった操作を実行することでWebのリソースを操作するリソース指向アーキテクチャです。
当時は、Googleが検索エンジンとして一定の地位を持ち始めた頃で、現在のようなプログラムから操作可能なWebAPIは存在しませんでした。しかし、GoogleやAmazonといった企業がREST形式のWebAPIを提供し始めたことで、RESTが普及しました。
RESTでは、例えば、Web上の記事等の情報(リソース)に対して、名前(URI)が付されています。また、RESTは、ネットワークシステムのアーキテクチャスタイルとして有名なクライアント/サーバから派生したアーキテクチャスタイルです。クライアント/サーバとは、特定のプログラムを実行するコンピュータ(サーバ)と、ユーザーが操作するコンピュータ(クライアント)に分け、これらが相互にネットワークで接続されるアーキテクチャスタイルです。クライアントがサーバにリクエストを送信し、サーバがレスポンスを返します。
これにより、ユーザーがWebアプリケーション等の入力フォームから企業等が運営するサーバーを介してデータベースを更新し、更新した結果がWebアプリケーションに表示されるようになり、閲覧するだけの静的はHTMLのページから、ユーザーがコンテンツを作成する参加型のWebアプリケーションへと変化していきました。
これに伴い、住所や氏名などの個人情報や、通販の購入履歴、Webの閲覧履歴等から、趣味や嗜好性などの情報についてもビジネスに活用されるようになり、広告等に利用されるようになりました。
Web3.0
Web3.0は、ブロックチェーンのようなP2P技術、VR、IoTなどが組み合わされたインターネット環境になると考えられています。
中でも、インターネットをよりオープンにし、非中央集権性を向上させる役割を担うのがブロックチェーン技術です。
現在のインターネットは、通信業者やその通信網に依存していますが、ブロックチェーンの登場により、このような構造が変わる可能性があります。
ブロックチェーンは、分散型台帳技術を基に、コンピュータのP2Pネットワークによってデータが共同で管理されます。管理ルールはプロトコルで形式化され、ネットワーク参加者全員のコンセンサスによって保護されます。
また、Webのプロトコルは、本来的にステートレスな設計思想です。ステートとは情報のことで、ステートレスとは、情報の送信者や受信者が相手の情報を知らないということで、サーバー側がクライアント側の情報を持たないということです。先程Web2.0のセクションで紹介したRESTも、ステートレスな設計思想が原則となっています。
しかし、現実問題として、ログインして利用するようなサービスは、クッキーやセッションを用いたステートフルな状態管理を行っています。
セッションやクッキーによるステートフルな状態管理により、サービスの利便性が向上しているのは間違いありませんが、これらの情報が、GAFA等の中央管理者によって管理されています。そのため、Webサイトが攻撃を受けて個人情報が流出するリスクがあり、セキュリティ、プライバシー、個人データの管理等の課題を抱えています。
また、GAFA等の中央管理者がWebで提供するサービスのビジネスモデルは、ユーザーが無料でサービスを利用し、そこで収集されたデータを基にターゲティング広告等によって収益を上げることです。結果的に、ユーザーは自分の個人情報を提供することで無料でサービスを利用する構図になっています。
ブロックチェーンは、ステートフルな設計思想を基にしているため、中央管理者が介在せずに、ユーザーがサービスを利用することが可能になり、上記のような課題を解決することが期待されています。
ブロックチェーンの現状
ビットコインの誕生
ビットコインの技術的な話については、下記の記事をご覧ください。
【ブロックチェーン技術】ビットコインとイーサリアムの基礎知識
ビットコインは、2008年にサトシナカモトという人物が論文を発表しました。
個人情報をインターネット上に公開しなくとも決済が可能で、また、取引時間に制限が無く、24時間365日決済可能という意味でブロックチェーンを活用した初めてのアプリケーション(DApps)です。
ビットコインは、暗号化技術、コンセンサスアルゴリズム、P2Pネットワーク、分散型台帳技術を組み合わせて、中央管理者が介在せず、誰にも改ざんされずに10年以上動き続けています。今ではデジタルゴールドと呼ばれるようになり、誰もが一度は耳にする存在となりました。
イーサリアムによるスマートコントラクトの誕生
イーサリアムの技術的な話については、下記の記事をご覧ください。
イーサリアムは、誰でも自由にブロックチェーンアプリケーションを実装できるプラットフォームとして2015年に登場しました。
2020年夏頃からDeFi(Decentralized Finance:分散型金融)が流行し、2021年に入ってNFT(Non-fungible Tokens:非代替性トークン)が注目され、2020年から2021年にかけてブロックチェーン市場全体が盛り上がりを見せました。
イーサリアムは、送金や決済を目的としたものではなく、サービス事業者という中央管理者を必要としないサービスを実現することを目的として、汎用的なブロックチェーン上でアプリケーションを実行するためのプラットフォームとして開発されました。
イーサリアムの最大の特徴は、スマートコントラクトを実行できることです。プログラムをイーサリアムのブロックチェーン上に公開すると、中央管理者が介在せず、誰にも改ざんされずにプログラムが動き続けます。
イーサリアムは世界中のコンピュータで構成され、それぞれのコンピュータが故障しても、1台でもコンピュータが動作していればブロックチェーンが停止しません。そのため、ブロックチェーン上で動作するアプリケーションは不具合さえ無ければ常に動き続けます。
しかし、イーサリアムは取引量が爆発的に増えたことで価格が上昇し、ガス代が高騰しているという問題がありました。当然、イーサリアムもこの問題を解決するために動いていますが、このような状況を背景に、現在は様々なブロックチェーンが注目を集めています。
この辺の話については、下記の記事をご覧ください。
【徹底解説】DeFiの動向とイーサリアムのガス代高騰問題を解決するその他のブロックチェーン
イーサリアムの登場によって、DeFiやNFTを始めとした、ブロックチェーンを活用した様々なアプリケーション(Dapps)が誕生しました。また、イーサリアムの問題を解決すべく、バイナンススマートチェーン(BSC)やソラナ(Solana)等のブロックチェーンでも同様のDappsが続々と誕生しています。
しかしながら、イーサリアム等のブロックチェーンは、あくまでスマートコントラクトを実行するためのネットワークです。スマートコントラクトは、Dappsの中核となる技術ですが、Web全体が非中央集権化するためには、まだまだ課題があると思います。
というのは、スマートコントラクトは、サーバーサイドのロジックの役割を担いますが、Webアプリケーションが機能するためには、フロントエンドアプリケーションや、データを保存するデータストア、ストレージ等、他にも様々な機能が必要だからです。そのため、現実的には、いきなりWeb全体がブロックチェーンに置き換わるのではなく、従来のWebアプリケーションに部分的にブロックチェーン技術が取り入れられていくのだと考えています。
GraphQLとは
ここで、ブロックチェーンから現状のWeb技術に話を戻します。前述した通り、従来のWebはRESTの思想が大きく影響しており、クライアント/サーバー方式のため、Webアプリケーションの課題はより素早くサーバーからデータを取得することでした。
GraphQLは、2015年にFacebookが公開したOSS(オープンソースソフトウェア)で、APIのための問い合わせ言語です。
従来のRESTフルなアーキテクチャでは、URIは情報に対応します。例えば、 フロントエンドアプリケーションから記事情報を取得する際には、`https://xxx.xxx/api/article/1` のようなエンドポイントにリクエストを送信すると、下記のような記事情報がレスポンスとして返ってきます。
{
"data": {
"title": "記事のタイトル",
"category": "記事のカテゴリ",
"tags": ["タグ1", "タグ2", ],
"image": "画像のURL",
"content": "記事の本文",
"author": "筆者",
"created_at": "作成日",
"updated_at": "更新日"
}
}
もし、フロントエンドで使うデータが記事のタイトルだけである場合にも、上記のように必要のない大量のデータを受け取ってしまい非効率となってしまうことがRESTの問題でした。
GraphQLを利用すると、例えば以下のように、必要なデータだけ取得することができます。
リクエスト
query {
article(articleId: 1){
title
}
}
レスポンス
{
"data": {
"title": "記事のタイトル"
}
}
必要のないデータを取得しないことで、より高速にレスポンスを受け取ることができます。
また、RESTだと`https://xxx.xxx/api/article/1`、`https://xxx.xxx/api/article/2` のように複数のエンドポイントが必要になりますが、GraphQLを使うとエンドポイントが一つになるので、クライアントから欲しい情報を書いてリクエストすれば、必要な情報だけサーバーがレスポンスを返してくれるようになります。
GraphQLでブロックチェーンを実行するThe Graph
そして、GraphQLを使ってブロックチェーンネットワークにクエリを実行するThe Graphというサービスがあります。
The Graphは、ブロックチェーンのデータを整理するための分散型インデックスプロトコルで、一元化されたインデックスサーバーを構築することで、例えばEtheriumのブロックチェーンからデータを取得してデータベースに保存し、データを整理して効率的にアクセスするためのAPI を公開します。
Etheriumだけでなく、Polkadot、NEAR、Solana、Celo等のブロックチェーンにも対応することを表明しています。
具体的には、The Graphは、GraphQLを使用して、サブグラフと呼ばれるAPI でクエリを実行することで、ネットワーク上でインデックスが作成されたデータを取得することができます。これによって、Dappsの開発者はサーバーレスアプリケーションを構築することができます。
The Graphのネットワークは、Indexer、Curator、Delegator、Consumerで構成されます。
The Graphを利用するDappsの開発者がConsumerで、ブロックチェーンから必要なデータを取得して処理するのがIndexerです。Consumerは、クエリの実行にあたってクエリ利用料を支払います。既存のAWSやGCP等のサービスを使って支払う利用料のようなイメージです。Indexerは、クエリが実行される度にクエリ料の一部を報酬として受け取ります。そのため、よく使われるサブグラフAPIの方が報酬が高くなります。そして、どのサブグラフがよく使われる高品質なサブグラフであるかを伝える役割を担うのがCuratorです。Indexerになるためには、The Graphのトークンをステーキングする必要があり、DelegatorはThe GraphのトークンをIndexerに委譲することができます。
より具体的には、以下のとおりです。
Consumerは、サブグラフのAPIを使ってクエリを行うThe Grahのエンドユーザーです。サブグラフを作成するために、対象となるスマートコントラクトや、スマートコントラクト内のイベント、データベースに保存するデータ等の情報を定義し、IPFSに保存します。また、クエリ料金の価格を設定することもできます。
Indexerは、インデックス作成とクエリ処理サービスを提供するためにGraphトークン(GRT)をステークするGraphネットワークのノードオペレータです。Indexerは、サブグラフのキュレーションシグナルに基づいて、インデックスを作成するサブグラフを選択します。Indexerは、クエリ料と報酬を獲得することができます。Indexerは、インデックスを作成するために、GoogleCloud等のサービスを利用して、IPFSからサブグラフを取得し、ブロックチェーンにアクセスし、サブグラフデータをデータベース(PostgreSQL)に保存します。
Curatorは、どのサブグラフが高品質で優先されるべきかを示すために GRT をステークします。特定のサブグラフにシグナルを送り、シグナルを送ったサブグラフに対してクエリ料の一部を獲得することができます。
Delegatorは、既存のIndexerに対してGRTを委譲し、その見返りとしてクエリ料とIndexerの報酬の一部を獲得することができます。
サブグラフの作成方法は、下記のリンク先にあります。
また、The Graphネットワークの詳細は下記のリンク先にあります。
まとめ
筆者は、今、Web3.0の文脈でのブロックチェーンに大変興味があります。ビットコインから始まったブロックチェーンが、Etheriumによって分散型アプリケーションとして実際に利用されるようになっています。そして、Solana等のガス代が安い高速なスマートコントラクトが登場し、分散型ストレージのFilecoin、フロントエンドアプリケーションをデプロイすることができるインターネットコンピューター、ブロックチェーンへのデータアクセスを円滑にするThe Graph等、様々な技術が登場しています。引き続き、Web3.0文脈で面白そうな技術があればnoteで紹介していきたいと思います。
なお、インターネットコンピューター用のGraphQLプロジェクトとして、下記のようなプロジェクトがあるようですが、まだまだこれからのようです。
この記事が気に入ったらサポートをしてみませんか?