> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# getClusterNodesの使用方法

> getClusterNodesの使用例、コード例、リクエストパラメータ、レスポンス構造、およびヒントについて学びます。

[`getClusterNodes`](https://www.helius.dev/docs/api-reference/rpc/http/getclusternodes) RPCメソッドは、現在Solanaクラスターに参加している既知の全てのノードのリストを返します。この情報は、ネットワーク分析、代替RPCエンドポイントの発見、またはクエリノードからみたネットワークの現在のトポロジーを理解するのに役立ちます。

## 一般的な使用ケース

* **ネットワークトポロジー分析:** クラスター内の既知のノードのスナップショットを取得し、それらの公開鍵とネットワークアドレス（ゴシップ、TPU、RPC）を含みます。
* **RPCエンドポイントの発見:** クラスター内で他の潜在的なRPCサーバーを特定します（ただし、可用性やレート制限は異なる場合があります）。
* **ノードバージョンの監視:** クラスター内の異なるノードで実行されているソフトウェアバージョンを観察します。

## リクエストパラメータ

このメソッドはパラメータを受け取りません。

## レスポンス構造

JSON-RPCレスポンスの`result`フィールドはオブジェクトの配列になります。各オブジェクトはノードを表し、以下のフィールドを含みます:

* **`pubkey`** (string): ノードの公開鍵（アイデンティティ）、base58エンコード。
* **`gossip`** (string | null): ノードのゴシップサービスのIPアドレスとポート。利用不可の場合は`null`になることがあります。
* **`tpu`** (string | null): ノードのトランザクション処理ユニット（TPU）のIPアドレスとポート。トランザクションを直接送信するために使用されます。`null`になることがあります。
* **`rpc`** (string | null): ノードのJSON-RPCサービスのIPアドレスとポート。このノードによってRPCサービスが有効または広告されていない場合は`null`になることがあります。
* **`version`** (string | null): ノードのソフトウェアバージョン。バージョン情報が利用不可の場合は`null`。
* **`featureSet`** (u32 | null): ノードのフィーチャーセットの一意の識別子。`null`になることがあります。
* **`shredVersion`** (u16 | null): このノードがブロック（シュレッド）を保存および送信する際に使用するデータ構造のバージョン。`null`になることがあります。

## 例

### 1. 既知のクラスターノードをすべて取得する

この例では、クエリされたRPCエンドポイントが知っているすべてのノードのリストを取得します。

<CodeGroup>
  ```bash cURL theme={"system"}
  curl https://mainnet.helius-rpc.com/?api-key=<api-key> -X POST -H "Content-Type: application/json" -d \
    '{
      "jsonrpc": "2.0",
      "id": 1,
      "method": "getClusterNodes"
    }'
  ```

  ```javascript JavaScript (using @solana/web3.js) theme={"system"}
  const { Connection } = require('@solana/web3.js');

  async function getNodesInCluster() {
    const connection = new Connection('https://mainnet.helius-rpc.com/?api-key=<api-key>');
    try {
      const clusterNodes = await connection.getClusterNodes();
      console.log(`Found ${clusterNodes.length} cluster nodes:`);
      clusterNodes.forEach(node => {
        console.log(
          `  PubKey: ${node.pubkey}, Gossip: ${node.gossip || 'N/A'}, RPC: ${node.rpc || 'N/A'}, Version: ${node.version || 'N/A'}`
        );
      });
      // For full details:
      // console.log(JSON.stringify(clusterNodes, null, 2));
    } catch (error) {
      console.error('Error fetching cluster nodes:', error);
    }
  }

  getNodesInCluster();
  ```
</CodeGroup>

## 開発者向けのヒント

* **ノードの視点:** 返されるリストは、クエリしている特定のRPCノードが知っているノードを反映しています。異なるRPCノードでは、特にネットワークの変化によって、異なるクラスターの見え方をする可能性があります。
* **RPCの可用性:** リストにあるすべてのノードが必ずしもRPCポートを開いている、または公開しているわけではありません。`rpc`フィールドがnullでないことは広告されたRPCエンドポイントを示しますが、アクセス可能性やパフォーマンスを保証するものではありません。
* **動的リスト:** クラスタートポロジーは動的です。ノードは参加と離脱ができるため、リストは時間とともに変わることがあります。
* **大規模なレスポンス:** Mainnet Betaのような大規模なネットワークでは、レスポンスが非常に大きくなり、多くのノードをリストすることになります。

このガイドでは、Solanaクラスター内のノードを発見し理解するための`getClusterNodes` RPCメソッドを使用するための必要な情報を提供します。
