---
title: "アーカイブノードとは - 知っておくべきこと"
description: "アーカイブノードの仕組み、構築方法、使用すべき場面について"
---

# アーカイブノードとは - 知っておくべきこと

EthereumやPolygonのようなパブリックブロックチェーンは、コンピュータのグローバルなピアツーピアネットワークです。各ピアデバイスであるノードは、ブロックチェーン上の情報を保存・処理し、ネットワークの状態を検証するなどの役割を担います。

ノードは他のピアとブロックチェーン上でやり取りできますが、その機能とユースケースは種類によって異なります。例えば、本記事で扱うアーカイブノードは、ブロックチェーンの完全な履歴データを保存し、リクエストに応じて提供できます。これは、直近のブロックチェーンの状態のみを保存するフルノードや、主にフルノードにデータをリクエストするライトノードとは異なります。

この概要では、アーカイブノードについて詳しく解説し、Ethereumでの動作方法を説明します。アーカイブノードを運用することの意義、使用するクライアント、そして過去のブロックチェーンデータをクエリするためのアーカイブノードの構築方法について学ぶことができます。

<ImageBlock
  src="https://media.alchemy.com/1704095139-blockchain-network-p2p-nodes.jpeg"
  alt="ブロックチェーンネットワーク上でピアツーピアのノードがどのように接続・連携するかを示す図"
  width={1600}
  height={1037}
  caption="ブロックチェーンネットワーク上でピアツーピアのノードがどのように接続・連携するかを示す図"
  priority
/>

## Ethereumのアーカイブノードとは？

Ethereumのアーカイブノードは、genesisブロック（最初に生成されたブロック）に至るまで、ブロックチェーンの全履歴を保存できるフルノードです。各ノードの詳細については[ブロックチェーンノードのガイド](http://www.alchemy.com/overviews/what-is-an-ethereum-node)で網羅していますので、ここでは各タイプの概要のみを簡単に説明します。

### フルノード

フルノードは現在および直近のブロックチェーンの状態（直近128ブロックまで）を保存し、新しく追加されるブロックの検証に参加します。トランザクションの処理、スマートコントラクトの実行、ブロックチェーンデータのクエリ・提供が可能です。トレーシングを介して一部の過去データにアクセスすることもできますが、この用途には非効率です。

### ライトノード（「ライトクライアント」とも呼ばれる）

ライトクライアントはブロックヘッダーのみを保存し、最小限のブロックチェーンデータ（ブロックのタイムスタンプ、ハッシュ、マイニング難易度など）にアクセスできます。ただし、フルノードと連携することで必要なデータを取得し、情報を検証すること（トランザクションのステータス確認や残高照会など）も可能です。ライトノードの運用は、ハードウェア、運用コスト、技術的専門知識のいずれの面でも最小限の投資で済みます。

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Light Node", dataType: "object" },
      { key: "2", width: 200, title: "Full Node", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>Block Headers</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Block Headers</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>Full Block State</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Full Block State</p>", tooltip: "", icon: "" },
        id: 1,
      },
    ],
  }}
/>

### アーカイブノード

アーカイブノードはフルノードと同じ情報に加え、ブロックチェーンの過去のすべての状態を保存します。アーカイブノードの運用には、ハードウェア、運用コスト、技術的専門知識、経験のいずれの面でも最も大きな投資が必要です。アーカイブノードはアーカイブされたブロックチェーンデータを迅速かつ効率的に構築し、特定のブロック時点でのユーザーの残高など、任意の過去データをクエリする用途に有用です。

アーカイブノードは他のノードよりも多くのデータを保存するため、より多くのストレージ容量を必要としますが、特定のケースではその投資に見合う価値があります。次のセクションでは、アーカイブノードの動作方法と、他のノードタイプとのアーキテクチャの違いについて解説します。

## アーカイブノードはどのように動作するのか？

アーカイブノードは、ブロック間のブロックチェーンの全履歴状態を保存します。アーカイブノードは本質的に、異なる時点でのネットワークのスナップショットを含んでいます。

### アーカイブノードはどのようなデータを同期するのか？

**アーカイブノードは「フル同期」を行い、genesisブロックからブロックヘッダー、トランザクション、レシートを含む完全なブロックデータをダウンロードします。**

すべてのノードと同様に、アーカイブノードもネットワーク上のデータを保存・検証するために、ブロックチェーンの現在の状態と「同期」する必要があります。同期には、ピアから状態データを復元し、トランザクションを検証し、ブロックチェーンのローカルインスタンスを構築する作業が必要です。

アーカイブノードはダウンロードしたすべてのブロックを検証し、すべてのトランザクションを再実行し、すべての中間状態をディスクに書き込みます。この最後の部分が、アーカイブノードが異なる時点でのブロックチェーンの状態の「アーカイブ」を提供する理由です。

#### アーカイブノードの同期にはどれくらい時間がかかるのか？

**アーカイブノードの同期にかかる平均的な時間は状況によって異なりますが、1ヶ月から3ヶ月程度（問題が発生した場合はそれ以上）を見込んでおくべきです。**

[アーカイブノードは通常のフルノードやライトクライアントよりも同期に時間がかかります](https://www.palkeo.com/en/projets/ethereum/parity_archive_node.html)。これは単に、アーカイブノードが誕生時からの完全なデータセットを復元する必要があるためです。

フルノードとライトノードは、履歴データや不要なブロックチェーンデータをプルーニングするため、同期にかかる時間ははるかに短くなります。例えば、フルノードは最新ブロックとその数百ブロック前までしか同期しません（ライトクライアントは最新のブロックヘッダーのみを同期します）。

この同期速度の遅さは開発プロジェクトを停滞させる可能性があるため、[ブロックチェーンノードプロバイダーを利用すること](https://www.alchemy.com/overviews/blockchain-node-providers)が推奨されます。ノードプロバイダーを利用すれば、完全に同期済みのアーカイブノードをオンデマンドでデプロイでき、自前でアーカイブノードを運用する手間を省くことができます。

#### アーカイブノードのサイズはどれくらいか？

本記事執筆時点で、2大クライアント（GethとOpenEthereum）を稼働させているアーカイブノードは、[**10TB以上のデータ**](https://etherscan.io/chartsync/chainarchive)を保存しています。

参考までに、Gethを稼働させているフルノードは、ブロックチェーンデータをわずか700GB強しか保存していません。この差異の理由については既に説明した通りです。すなわち、フルノードが定期的に古いデータをプルーニングするのに対し、アーカイブノードはgenesisからブロックチェーンデータを復元する必要があるためです。

<ImageBlock
  src="https://media.alchemy.com/1704095252-ethereum-archive-node-size.png"
  alt="Ethereumアーカイブノードの平均サイズが過去にどのように増加してきたかを示すグラフ"
  width={1600}
  height={652}
  caption="Ethereumアーカイブノードの平均サイズが過去にどのように増加してきたかを示すグラフ。[Source]"
/>

## なぜアーカイブノードを使うのか？

アーカイブノードは、ブロックチェーンに関する過去の情報にアクセスするためのゲートウェイを提供します。これは、直近128ブロック（フルノードで取得可能な範囲）に含まれるデータよりも古いデータが必要な場合に有用です。

Ethereumアーカイブノードの2つのユースケースを以下に示します。

### 1. ブロックチェーンの履歴情報の監査

ブロックチェーンを監査するサービスや、特定の履歴データを収集するサービスを構築する場合、アーカイブノードが最適です。良いユースケースとしては、ブロックチェーンエクスプローラー（[Etherscan](https://www.alchemy.com/dapps/etherscan)）、オンチェーン分析ツール（[Dune Analytics](https://www.alchemy.com/dapps/dune-analytics)）、暗号資産ウォレットの構築などが挙げられます。

これらのサービスは、ユーザーに古い状態データをクエリして提供するためにアーカイブノードに依存しています。例えば、Etherscanを使えばEthereumで最初にマイニングされたブロックに関する情報を取得できます。同様に、Dune Analyticsでは[Uniswapの発足以来の総ユーザー数](https://dune.com/queries/2740)を確認できます。

### 2. dApp開発

自前でノードを運用することは、dApp構築における最低限の要件であることが一般的です。トランザクションの送信、トランザクションのメモリプールの分析、スマートコントラクトイベントのリッスン、最新のブロックチェーン情報の呼び出しといった作業のみが必要な場合は、フルノードで十分です。

しかし、フルノードを使って直近128ブロックより前の情報を呼び出そうとするとエラーが発生します。フルノードはブロックチェーンデータをプルーニングし、ネットワークの状態を検証するために必要な最小限のデータのみを保持しています。

過去のブロックチェーンデータを_迅速に_クエリする必要があるdAppプロジェクトでは、アーカイブノードの運用が必要です。この「迅速に」という点が重要です。なぜなら、フルノードでもアーカイブデータを構築することは可能ですが、時間がかかるためです。アーカイブノードを使えば、特定のブロック番号におけるアカウントの残高取得といった操作を、シームレスかつ高速に行うことができます。

アーカイブノードへのアクセスを必要とする可能性がある[アプリ](https://www.alchemy.com/dapps/top/defi-dapps)の例としては、以下が挙げられます。

- オンチェーンレピュテーションサービス（例：DegenScore）は、長期間にわたるユーザーの活動を追跡します。
- ガバナンスプラットフォーム（例：Tally、[Snapshot](https://www.alchemy.com/dapps/snapshot)）は、ユーザーがガバナンス提案について議論・投票できるようにします。

これらのdApp例やその他多くの類似例に共通するのは、**過去のオンチェーンデータを参照する必要性**です。

## アーカイブノードの運用方法は？

アーカイブノードの運用には、ノードクライアントに加え、フルノードやライトクライアントよりも強力なハードウェアが必要です。

アーカイブノードは、サードパーティのプロバイダーに依存せずに過去の状態データを取得するのに_確かに_有用です。特に税務コンプライアンスなど、特定の目的でその情報が必要な場合、自分の情報を自分でコントロールできるようになります。しかし、保存・処理する必要のある情報量が膨大であるため、適切なハードウェア要件を満たすことが不可欠です。

### アーカイブノードクライアントとは？

**アーカイブノードクライアントとは、ローカルで実行できるブロックチェーンの実装です。** クライアントは、ノード（アーカイブノードを含む）が他のピアとやり取りし、ブロックチェーンデータにアクセスできるようにします。問題なくEthereumアーカイブノードを運用するには、信頼性が高く性能の良いノードクライアントが必要です。

### 主なアーカイブノードクライアントには何があるか？

最も広く使われ信頼されているアーカイブノードクライアントは、Go Ethereum（Geth）、Erigon、Nethermind、Besuです。それぞれをより詳しく見ていくことで、これらのクライアントについての理解を深めることができます。

#### Gethアーカイブノード

Gethは、Ethereumブロックチェーン向けに開発された最も初期のクライアント実装の1つです。また、Ethereumノードで使用される主要なクライアントでもあります。Gethはユーザー向けに豊富なツール群と機能を備えています。Go言語で書かれており、GNU Lesser Public Licenseの下で公開されています。詳細は[Gethでアーカイブノードを運用する方法](https://www.alchemy.com/overviews/what-is-a-geth-node-and-how-to-run-one)をご覧ください。

#### Erigonアーカイブノード

ErigonはノードユーザーのためのもうひとつのGoベースのEthereumクライアントです。Erigonは、効率的な状態ストレージ、より高速な同期時間、Grafanaダッシュボードによる分析、便利なJSON-RPCデーモンへのアクセスを提供します。詳細は[Erigonでアーカイブノードを運用する方法](https://github.com/ledgerwatch/erigon)をご覧ください。

#### Nethermindアーカイブノード

NethermindはC#の.NETフレームワークを用いて構築されたEthereumプロトコルの実装です。Nethermindは、現在利用可能な最速のEthereumクライアントであると謳っており、安定性、セキュリティ、信頼性、データの整合性を提供しています。詳細は[Nethermindでアーカイブノードを運用する方法](https://docs.nethermind.io/nethermind/ethereum-client/sync-modes#archive-sync)をご覧ください。

#### Besuアーカイブノード

Hyperledger Besuは、企業ユーザー向けに設計されたEthereumクライアントですが、個人でも利用可能です。BesuはJavaで書かれており、トレーシング、GraphQL API、充実したモニタリングなど便利な機能を備えています。詳細は[Besuでアーカイブノードを運用する方法](https://besu.hyperledger.org/en/stable/Concepts/Node-Types/#run-an-archive-node)をご覧ください。

### アーカイブノードの運用にはどのようなハードウェアが必要か？

アーカイブノードは他のタイプのノードよりも多くの読み書き操作を行い、より多くのRAMとCPUを使用するため、その計算負荷の高い処理を補うための専用ハードウェアへの投資が求められる場合があります。

以下は、Ethereumアーカイブノードを運用するための要件の一覧です。

オペレーティングシステム：Windows、Linux、またはmacOS

プロセッサー：Intel i7またはそれに相当するもの

ストレージ：8～10TB以上の容量を持つソリッドステートドライブ（SSD）

RAM：16～32GB以上のRAMディスク

**CPU：** 4コア以上のCPU

**帯域幅：** 25MB/s以上の速度

ノードのハードウェアをセットアップし、クライアントを設定したら、フロントエンドライブラリ（ethers.js/[web3.js](https://www.alchemy.com/dapps/web3-js)）と[JSON-RPCコール](https://www.wallarm.com/what/what-is-json-rpc)を使ってEthereumブロックチェーンを利用開始できます。例えば、`eth_getBalance\`関数を呼び出すことで、古いアドレスの残高を取得することができます。

## Alchemyでの無料アーカイブノードアクセス

これまで説明してきたように、Ethereumアーカイブノードの運用には莫大な投資が必要です。これには、特にアーカイブノード自体が同期外れになった場合に管理するために必要な時間と労力は含まれていません。しかし、Alchemyのようなノードプロバイダーが管理するアーカイブノードエンドポイントに接続することで、こうした手間をすべて省くことができます。

Alchemyの[Supernode](https://www.alchemy.com/supernode?a=b4f033deab)は、アーカイブデータに対する無制限のリクエストをサポートし、必要な過去のブロックチェーン情報すべてへのアクセスを提供します。良い点は？アーカイブノードへの接続を_無料で_行えることです。

Alchemyは、Supernodeの無料プランを利用しているユーザーに対しても[無制限のアーカイブノードアクセスを提供しています](https://www.alchemy.com/blog/more-capacity-lower-prices)。つまり、追加料金を支払うことなく、過去のオンチェーンデータを取得したり、genesisからチェーン全体をフォークしたりすることが可能です。Alchemyは、[Polygon](https://www.alchemy.com/blog/polygon-archive-node-limit)、Ethereum、その他多くの主要チェーン向けにアーカイブノードへのアクセスを提供しています。

<ImageBlock
  src="https://media.alchemy.com/1704095403-running-node-vs-using-node-provider.jpeg"
  alt="自前でノードを運用することとAlchemyのようなノードプロバイダーを利用することの違いを示す図"
  width={1600}
  height={1029}
  caption="自前でノードを運用することとAlchemyのようなノードプロバイダーを利用することの違いを示す図"
/>

### Alchemyでフルアーカイブノードに接続する方法

Alchemyでアーカイブノードに接続する手順は以下の通りです。

1. [サインアップ](https://dashboard.alchemy.com/signup?a=b4f033deab)してアカウントを作成し（無料です！）、最初のプロジェクトを作成します。

2. [Alchemyキーを作成](https://www.alchemy.com/docs/alchemy-quickstart-guide)します。これがアーカイブノードに接続するためのURLエンドポイントになります。

3. コマンドラインインターフェースから、アーカイブデータを取得するためのリクエストをEthereumブロックチェーンに送信し始めます。

### まとめ

アーカイブノードは、直近128ブロックを超える過去のブロックチェーン状態を保存できます。dAppやWeb3サービスが過去のブロックチェーンデータへのアクセスを必要とする場合、アーカイブノードを運用することは当然の選択と言えます。ただし、完全に機能するアーカイブノードを運用するには相応の負担が伴い、それが開発者の意欲をそぎ、開発計画を停滞させる可能性があることには注意が必要です。

Alchemyの[Supernode](https://www.alchemy.com/supernode?a=b4f033deab)は、無料のURLエンドポイントを使ってアーカイブノードにユーザーを接続することで、この問題を解決します。Alchemyを使えば、Ethereumアーカイブノードの運用がこれまでになく簡単になります。
