> ## 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.

# getAccountInfoの使い方

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

[`getAccountInfo`](https://www.helius.dev/docs/api-reference/rpc/http/getaccountinfo) RPCメソッドは、Solanaブロックチェーンをクエリするための基本的なツールです。特定のアカウント公開鍵に関連付けられたすべての保存情報を取得できます。これには、アカウントのランポート残高、それを所有するプログラム、実行可能かどうか、および保存されたデータが含まれます。

## 一般的な使用例

* **SOLのバランス確認:** 任意のアカウントのネイティブSOLバランスを確認します。
* **アカウントの存在確認:** 指定された公開鍵を持つアカウントが初期化されているかどうか（ランポートやデータがあるか）を確認します。
* **プログラムアカウントの調査:** プログラムが所有するアカウント内に保存されたデータを取得し、プログラムの状態を理解するために重要です。
* **アカウントの所有者の特定:** アカウントの所有者であるプログラムを確認します。これにより、アカウントのデータをどのように解釈するか、またはシステム所有のアカウントかどうかが判断できます。
* **アカウントが実行可能かどうかの確認:** アカウントにデプロイされたプログラムが含まれているかを識別します。

## パラメータ

1. `publicKey` (文字列、必須): クエリするアカウントのbase-58エンコードされた公開鍵。

2. `config` (オブジェクト、省略可能): 次のフィールドを持つ構成オブジェクト:

* `commitment` (文字列、省略可能): クエリに使用する[コミットメントレベル](https://www.helius.dev/blog/solana-commitment-levels)を指定します。デフォルトは`finalized`です。
* `finalized`: クラスターのスーパー多数によって最大ロックアウトに達したと確認される最新のブロックをクエリします。
* `confirmed`: クラスターのスーパー多数によって投票された最新のブロックをクエリします。
* `processed`: ノードの最新のブロックをクエリします。ただし、ブロックが完成していない可能性があります。
* `encoding` (文字列、省略可能): アカウントデータのエンコーディング。デフォルトは`base64`です。
* `base58` (遅い)
* `base64`
* `base64+zstd` (データが圧縮されている場合)
* `jsonParsed`: アカウントデータが既知のプログラム状態（例: トークンアカウント、ステークアカウント）の場合、ノードはそれをJSON構造に解析しようとします。一般的なプログラムアカウントの場合、通常はバイナリ（base64）に戻ります。
* `dataSlice` (オブジェクト、省略可能): 特定のスライスに返されたアカウントデータを制限します。`base58`、`base64`、または`base64+zstd`エンコードの場合のみ利用可能です。
* `offset` (番号): アカウントデータの先頭からスライスを開始するバイト数。
* `length` (番号): 返されるバイト数。
* `minContextSlot` (番号、省略可能): リクエストが評価される最小スロット。

## レスポンス

アカウントが見つかった場合、`result`フィールドには、2つの主なプロパティを含むオブジェクトが含まれます。

* `context` (オブジェクト): リクエストに関するメタデータが含まれます。

* `slot` (番号): 情報が取得されたスロット。

* `apiVersion` (文字列、省略可能): RPC APIバージョン。

* `value` (オブジェクト | null): アカウントが存在しない場合、これは`null`になります。それ以外の場合、それには次の情報を含むオブジェクトになります。

* `lamports` (番号): アカウントが所有するランポート数 (1 SOL = 1,000,000,000ランポート)。

* `owner` (文字列): このアカウントを所有するプログラムのbase-58エンコードされた公開鍵。

* `data` (配列 | オブジェクト | 文字列): アカウントに保存されているデータ。使用された`encoding`パラメータに応じて形式が異なる。

* `base64`（デフォルト）、`base58`、`base64+zstd`の場合：通常は配列`[encoded_string, encoding_format]`、例: `["string_data", "base64"]`。

* `jsonParsed`の場合：データがRPCノードによって解析される場合、JSONオブジェクトになることがあります（例: SPLトークンアカウント）。それ以外の場合、既知のレイアウトとして認識されない場合、`["", "base64"]`または同様のものに戻ることがあります。

* `executable` (ブーリアン): アカウントにプログラムが含まれている場合`true`、そうでない場合`false`。

* `rentEpoch` (番号): このアカウントが次のエポックで賃貸料を負う予定の時期。

* `space` (番号、省略可能): データのバイト数（注意: 公式Solanaドキュメントに記載されている`space`ですが、一部のRPCプロバイダーはこれを含むことがあります。これはアカウントのデータに割り当てられた総スペースを表します）。[アカウントデータとデシリアライズ](https://www.helius.dev/blog/solana-dev-101-deserializing-account-data-on-solana)に関する詳細については、詳細ガイドを参照してください。

アカウントが見つからない場合、結果の`value`フィールドは`null`になります。

## 例: アカウント情報の取得

メインネット上のSerum Program V3 ID (`9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin`)の情報を取得しましょう。

**注:** 下記の例では`YOUR_API_KEY`を実際のHelius APIキーで置き換えてください。

<CodeGroup>
  ```bash curl theme={"system"}
  curl https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY -X POST -H "Content-Type: application/json" -d \
  '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getAccountInfo",
    "params": [
      "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin",
      {
        "encoding": "jsonParsed"
      }
    ]
  }'
  ```

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

  async function getAccountDetails() {
    const rpcUrl = 'https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY'; // Replace YOUR_API_KEY
    const connection = new Connection(rpcUrl, 'confirmed');
    const accountPubKey = new PublicKey('9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin');

    try {
      const accountInfo = await connection.getAccountInfo(accountPubKey);

      if (accountInfo === null) {
        console.log('Account not found.');
        return;
      }

      console.log('Account Info:');
      console.log(`   Lamports: ${accountInfo.lamports}`);
      console.log(`   Owner: ${accountInfo.owner.toBase58()}`);
      console.log(`   Executable: ${accountInfo.executable}`);
      console.log(`   Rent Epoch: ${accountInfo.rentEpoch}`);
      // Data is a Buffer, you might need to deserialize it based on the account type
      // console.log(`   Data: ${accountInfo.data.toString()}`); 
    } catch (error) {
      console.error('Error fetching account info:', error);
    }
  }

  getAccountDetails();
  ```

  ```typescript Kit theme={"system"}
  import { address, createSolanaRpc } from "@solana/kit";

  const rpc_url = "https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY";
  const rpc = createSolanaRpc(rpc_url);

  const publicKey = address("vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg");
  const accountInfo = await rpc.getAccountInfo(publicKey).send();

  console.log("Account Info:", accountInfo);
  ```

  ```rust Rust theme={"system"}
  use solana_client::nonblocking::rpc_client::RpcClient;
  use solana_sdk::{commitment_config::CommitmentConfig, pubkey::Pubkey};
  use anyhow::Result;
  use std::str::FromStr;

  #[tokio::main]
  async fn main() -> Result<()> {
      let client = RpcClient::new_with_commitment(
          String::from("https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY"),
          CommitmentConfig::confirmed()
      );
      let pubkey = Pubkey::from_str("vines1vzrYbzLMRdu58ou5XTby4qAqVRLmqo36NKPTg")?;
      let account = client.get_account(&pubkey).await?;

      println!("{:#?}", account);

      Ok(())
  }
  ```
</CodeGroup>

## 開発者のヒント

* **パフォーマンス:** 複数のアカウントの頻繁なチェックを必要とするアプリケーションには、`getMultipleAccounts`を使用してリクエストをバッチ化し、往復回数を減らすことを検討してください。
* **データのデシリアライズ:** `data`フィールドは、しばしば所有プログラムのデータ構造に基づいてデシリアライズが必要です。プログラムに特化したツールとライブラリ（例: トークンアカウント用のSPLトークンライブラリ）が通常必要です。私たちの[アカウントデータのデシリアライズ](https://www.helius.dev/blog/solana-dev-101-deserializing-account-data-on-solana)に関するブログ記事には、役立つ技術と例があります。
* **レート制限:** 多数のアカウントをクエリする場合や頻繁にリクエストを行う場合は、RPCノードのレート制限に注意してください。
* **コスト管理:** `getAccountInfo`は一般に低コストのクエリですが、頻繁なポーリングは積み重なる可能性があります。クエリパターンを最適化してください。
* **`jsonParsed`の利点:** `jsonParsed`は便利ですが、すべてのアカウントタイプをサポートしない可能性があり、プログラムがそのデータ構造を更新すると出力が変わる可能性があります。重要なアプリケーションには、既知のレイアウトによるバイナリデータの解析がより安定しています。
* **`dataSlice`を検討:** アカウントのデータの一部のみが必要な場合、`dataSlice`を使用して転送データ量を削減し、クエリコストを低下させる可能性があります。

## 関連メソッド

<CardGroup cols={2}>
  <Card title="getMultipleAccounts" href="/ja/api-reference/rpc/http/getmultipleaccounts">
    より良いパフォーマンスのために一度に複数のアカウントをバッチフェッチする
  </Card>

  <Card title="getBalance" href="/ja/api-reference/rpc/http/getbalance">
    アカウントの詳細なしでSOLバランスだけを取得する
  </Card>
</CardGroup>
