---
title: "Geth ノードとは何か、実行方法"
description: "要件、インストール、デプロイ"
---

## GethとNodeの入門

[Ethereumノード](http://www.alchemy.com/overviews/what-is-an-ethereum-node)とは、Ethereumブロックチェーンネットワークの一部を構成するコンピュータです。これらのノードは、ブロックを検証し、保存し、時にはブロックを生成するソフトウェアを実行する実際のコンピュータです。

「クライアント」とは、実際のソフトウェアの名称です。これにより、JSON-RPC APIを通じてブロックチェーンとやり取りし、ブロックチェーンを読み取り検証し、スマートコントラクトの読み書きを行うことができます。

Gethはこれらのクライアントの1つであり、最も広く使われているものの1つです。Go言語で書かれており、Ethereum Foundationで働く人々やその他の協力者によって開発が続けられています。

**Gethの特徴:**

- 「geth console」で実行できるJavaScriptコンソールが付属しています。
- 他のJavaScriptクライアント\(web3js\)と連携できます。
- Rinkebyテストネットが組み込まれています\(または独自のプライベートEthereumネットワークを構築できます\)
- 他のEthereumノードの標準として扱われることが多いです。

このAlchemyの最新ブログでは、Gethノードのインストールと実行方法を学びます。

## ネットワーク\(MainnetとTestnet\)とGeth

Gethノードを理解するには、Ethereumのさまざまなネットワークを理解する必要があります。

Ethereumには、すべてのトランザクションが行われる単一のコアネットワーク\(Mainnet\)がありますが、動作確認のために構築された[他のテストネットワーク](https://www.alchemy.com/overviews/what-are-testnets)\(Testnet\)も利用されています。ローカルホスト以外でブロックチェーンの機能を試すには、こうした「実験用」ブロックチェーンの使用を検討してください。

### 1. Mainnet

[Ethereum mainnet](https://www.alchemy.com/rpc/ethereum)は、Ethereumを生成するために使われるネットワークです。ETHはマイニングしたり取引所で取引したりでき、常に利用可能です。

### 2. Ropsten

Ropstenは、mainnetに最も近い挙動をするテストネットワークです。同じProof of Workをベースにしています。この[Ropsten test network](https://www.alchemy.com/overviews/ropsten-testnet)は、テストETHがMainnet ETHと同じ方法でマイニングされ、価値のないものを容易に入手できるため、スパム攻撃に対して脆弱です。

### 3. Rinkeby

RinkebyのテストネットはProof of Authorityを使用しており、本人であることを証明できない限りテストETHを入手できません。これは、FacebookなどのソーシャルメディアアカウントとEthereumアドレスを紐付けることで行われます。これにより、大量のETHを得るには相当な労力が必要になるため、ネットワークへの攻撃がはるかに困難になります。RinkebyはGethノードからのみアクセス可能です。

Rinkebyテストネットでの構築を開始し、[無料のfaucetからRinkeby Etherを入手](https://rinkebyfaucet.com/)してください。

### 4. Kovan

主な違いは、Kovanがparityノードでのみ利用可能であり、GitHubを使って本人確認を行う必要がある点です。

### 5. Goerli

GoerliはProof-of-Authorityフレームワークの下でデプロイされました。ChainsafeとAfri Schoedonによって最初に開発されたCliqueコンセンサス手法を採用しています。Goerliネットワークは、Geth、Parity、[Nethermind](https://www.alchemy.com/dapps/nethermind)、Hyperledger Besuに支えられ、Goerliコミュニティによって維持されています。GoerliはKovanやRinkebyよりも、ネットワーク規模、ノード数、クライアントの種類が多くなっています。

[Goerli Etherの入手方法](https://goerlifaucet.com/)を学び、Alchemyの[GoETH faucet](https://goerlifaucet.com/)を使ってGoerliテストネットワークで始めましょう。

### 6. Kiln

この記事の執筆時点では、Ethereumが今年後半にProof of Stakeへのマージに向けて全速力で進んでいることに伴い、上記のテストネットの多くが非推奨または移行されることになります。現時点では、KilnテストネットがProof of Stakeへの移行前の最終的なパブリックテストネットとなっています。

このマージは、Ethereumネットワークにとって、その誕生以来最も大きな変化の1つを迎える重要な達成です。Kilnで問題が起きなければ、現行のEthereumテストネット\(Goerli、Ropstenなど\)は中断することなく進行できるはずです。

[Kilnテストネット](https://www.alchemy.com/overviews/kiln-testnet)について詳しく学び、[偽のKiln Etherを入手](https://kilnfaucet.com/)してKilnでの構築を始めましょう。

## Gethノードとは

<ImageBlock
  src="https://media.alchemy.com/1704166765-geth-node.png"
  alt="Gethノードの種類を示す図: Ethereumのlightノード、fullノード、archiveノード"
  width={1224}
  height={602}
/>

Gethを使えば、独自のプライベートEthereumネットワークを構築できます。Ethereumネットワークのブロックチェーンは、genesisブロックと呼ばれるルートブロックから始まります。genesisブロックにはトランザクションは含まれていません。

Ethereumノードにはさまざまな種類がありますが、Gethノードはlightノード、fullノード、archiveノードの3種類に分類されます。

### _Lightノード_

lightノードはすべてのブロックを検証しないため、Ethereumブロックチェーンのコピーを保持しません。そのため、fullノードのデータに依存します。lightノードを実行することには、起動の高速化、ストレージ使用量の削減、計算・メモリ要件の軽減など、いくつかの利点があります。lightノードは信頼レベルが低く、多くの場合fullノードに依存しているため、問題になることがあります。

Lightノード:

- ヘッダーチェーンを保存し、それ以外はすべてリクエストします。
- ブロックヘッダー内のstate rootに照らしてデータの有効性を検証します。
- 埋め込みデバイスや携帯電話など、ギガバイト単位のブロックチェーンデータを保存する余裕がない低容量デバイス向けの用途を提供します。

### _Fullノード_

fullノードは、ブロック内のトランザクションが[Ethereum Yellow Paper](https://ethereum.github.io/yellowpaper/paper.pdf)に定められた基準に従っていることを検証します。これは、ネットワークを介して転送されるブロックが正当なものであることを保証するために行われます。その取り組みは信頼できるものです。この検証手法により、fullノードはネットワークをEthereumの要件に沿った状態に保ちます。

Fullノード:

- ブロックチェーンの全データを保存します。
- ブロック検証に参加し、すべてのブロックとstateを検証します。
- すべてのstateを導出します。
- ネットワークに対応し、要求に応じてデータを提供します。

### _Archiveノード_

archiveノードとは、トランザクション履歴全体を保存するノードです。ネットワークの健全性と構造はこれらのノードに依存しています。

Archiveノード:

- fullノードに保存されるすべての内容を保存し、過去のstateのアーカイブを構築します。これは、アカウント残高やオンチェーンデータを照会したい場合、あるいは[OpenEthereum](https://ethereum.org/en/developers/docs/nodes-and-clients/#:~:text=Stores%20everything%20kept,and%20chain%20analytics.)を使って自分のトランザクションセットをマイニングせずに簡単かつ確実にテストしたい場合に必要です。
- テラバイト単位のデータを提供します。このため一般ユーザーにはあまり適していませんが、ブロックエクスプローラー、ウォレットベンダー、チェーン分析サービスなどには便利です。

<ImageBlock
  src="https://media.alchemy.com/1704166787-pow-consensus.png"
  alt="ネットワーク全体でProof of Workのコンセンサスに達するEthereumノードを示す図"
  width={1079}
  height={493}
  caption="source: https://ethereum.org/en/developers/docs/nodes-and-clients/"
/>

‍

## Gethのインストール要件

- マルチコアCPU\(7GB以上のRAM\)
- 空き容量約600GB以上のローカルSSDドライブ
- OPTIONAL キャッシングによる最適化されたパフォーマンスのために16/32GB以上のCPUを使用します。キャッシング機能\(つまり'--cache'フラグの使用\)を利用することで、Gethはハードドライブではなくメモリからstateを取得できるようになります。
- Macユーザー向けの[Homebrew](https://formulae.brew.sh/formula/ethereum)
- Linux/Ubuntu向けの[PPA](https://launchpad.net/~ethereum/+archive/ubuntu/ethereum)
- OPTIONAL Parity\(詳細については、[parityからGethへの移行方法を学ぶ](https://hub.docker.com/r/ethereum/client-go/)\)‍

## Gethのインストール方法

Gethは、パッケージマネージャー経由\(MacOSではhomebrew、UbuntuではPPA\)でインストールしたり、直接ダウンロードしたり、[docker](https://hub.docker.com/r/ethereum/client-go/)で実行したり、あるいは[ゼロから構築](https://github.com/ethereum/go-ethereum)することもできます。

### MacOSターミナルでのHomebrew:

<CodeSnippet
  code={`\$ brew tap ethereum/ethereum
\$ brew install ethereum`}
  language="text"
  theme="light"
/>

さまざまな便利なコマンドの一覧は[こちら](https://hub.docker.com/r/ethereum/client-go/)\(abigen、bootnode、checkpoint-admin、clef、devp2p、ethkey、evm、faucet、gethなど\)、または以下を実行することもできます:

<CodeSnippet code={`\$ geth --help`} language="text" theme="light" />

### Linux/UbuntuでのPPA:

<CodeSnippet
  code={`\$ sudo add-apt-repository -y ppa:ethereum/ethereum`}
  language="text"
  theme="light"
/>

### go-Ethereumの安定版をインストール:

<CodeSnippet
  code={`\$ sudo apt-get update
\$ sudo apt-get install ethereum`}
  language="text"
  theme="light"
/>

### Docker:

Dockerを[こちら](https://hub.docker.com/r/ethereum/client-go/)からダウンロードします。その後、以下を実行します:

<CodeSnippet
  code={`\$ docker pull ethereum/client-go:latest`}
  language="text"
  theme="light"
/>

そして次を実行します:

<CodeSnippet
  code={`\$ docker run ethereum/client-go:latest`}
  language="text"
  theme="light"
/>

## Gethを実行する

Gethフォルダ/ルートフォルダを解凍した場所でターミナルから以下のコマンドを実行し、Gethを実行します:

<CodeSnippet
  code={`\$ ./Geth console --testnet --syncmode "light" --rpc --rpcaddr "localhost" --rpcport "8485" --rpccorsdomain "*" --rpcapi="db,eth,net,web3,personal"`}
  language="text"
  theme="light"
/>

これによりすぐにGethコンソールに移動します。

`net`と入力することで、peerがあるかどうかを確認できます。`eth.syncing`と入力することで、ノードが現在同期中かどうかを確認できます。ノードは再起動するまで同期を開始しない場合があります。

例えば、`eth.syncing`を実行すると、以下のようなサンプルクエリが出力されます:

<ImageBlock
  src="https://media.alchemy.com/1704167169-eth-syncing-output.svg"
  alt="ブロック同期の進行状況を示すeth.syncingクエリのGethコンソール出力"
  width={1570}
  height={393}
/>

## 最後に

Gethは、一般消費者向けに広く利用されているweb/拡張機能ウォレット\([MetaMask](https://www.alchemy.com/dapps/metamask)、[Coinbase](https://www.alchemy.com/dapps/coinbase)、Rainbowなど\)の大部分にすでに組み込まれていることが多いです。

しかし、マイニングを試したり独自のカスタムEthereumソフトウェアを開発したりしたい場合、Gethのインストールと実行にはそれだけの価値があります。また、自分のノードとウォレットの鍵を自分で管理したい\(サードパーティ製ソフトウェアに頼らず自分でトランザクションに署名したい\)場合にも役立ちます。Gethを使えば、Ethereum開発の世界全体を開くことができます!
