SolanaのAssociated Token Accountとは?
執筆者 Petar Todorov
Solana Account Modelは、すべてのオンチェーンデータを整理・保存する仕組みであり、Associated Token Account(ATA)はそのモデルを構成する重要な要素の一つです。本記事では、ATAとは何か、その仕組み、そして自分でAssociated Token Accountを作成する方法について解説します。
Associated Token Accountとは
Associated Token AccountはSolana Associated Token Account Programを通じて作成され、特定のトークン、その残高、そして所有者に関する情報を保持します。 これはProgram Derived Addressの一種です。
各用語の意味は以下の通りです。
- Associated Token Account - トークンに紐づいたアカウント(Solana Token Programを想起してください)
- Program Derived Address - Solanaのプログラム、具体的にはAssociated Token Account Programから「派生(derive)」して作られたアドレス
Associated Token Accountと、それらの間の送金はどのように機能するか
Associated Token Account間の送金は、アカウント同士で直接行われると同時に、それらのウォレットアドレスを介して間接的にも行われます。
トークンアカウントはEthereumにおけるERC-20トークンに相当しますが、根本的な違いがあります。Ethereumのスマートコントラクトはそれ自体の状態とコードを所有しますが、Solanaのトークンアカウントはコードのみを保持し、その状態(トークン残高など)はそのトークンの各所有者ごとに作成されるAssociated Token Accountに「エクスポート」されます。
ここまでの内容を、USDCを例に簡単に確認してみましょう。
- Solana上のUSDCはトークンアカウントである
- トークンアカウントはSystem Programによって作成されるが、SPL Token ProgramによってToken mintとして初期化される
- USDCトークンが初期化された後、ユーザーは送金を開始できる
- USDCトークンを保有するユーザーは、Associated Token Account Program(ATP)を通じて作成されたAssociated Token Accountを持つ
- 2者間のUSDCのやり取りは、両ユーザーのATA間で行われる

USDCの送金は、ユーザーのATA間で直接行われると同時に、Solanaノード上のウォレットアドレスを介して間接的にも行われます。これらの送金は、同じToken mintのシードでATAが作成されているユーザー同士でなければなりません。
Associated Token Account Programとは
Solana Program Libraryの一部であるAssociated Token Account Programは、すべてのATAの親プログラムであり、ユーザーのウォレットと、そのユーザーが権限を持つATAとをマッピングします。さらに、ATA Programは、あるユーザーが別のユーザーにトークンを送りたい場合、受取人がそのトークンに対応するATAを持っていなくても、確実にトークンを受け取れるようにします。この場合、スマートコントラクトがRPCノード上で実行される際に、プログラムが自動的にATAアカウントを作成します。
Associated Token Account ProgramのソースコードはRustで書かれており、GitHubで確認できます。
以下は、TypeScriptにおいてATAが内部でどのように作成されるかを示したものです。

Associated Token Account Programはどのように動作するか
ATA Programの内部で行われている処理は以下の通りです。
1. 定数のIDを取得する
まず、`TOKEN_PROGRAM_ID` と `SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID` の定数を取得します。プログラムIDとは、そのプログラムのアドレスを指す言い方です。
2. findAssociatedTokenAddress関数を取得する
次に、`findAssociatedTokenAddress` 関数に進みます。この関数はpublicKeyを返し、これが新しく作成されるATAのアドレスとなります。
3. findProgramAddressメソッドを呼び出す
この関数の本体では、`findProgramAddress` メソッドが呼び出され、以下の2つの引数が渡されます。
- シードの配列
- SPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_ID
ATAはProgram Derived Address(PDA)の一形態であるため、プログラムに引数を渡すことでアカウントを作成できます。PDAの作成にはシードを引数として渡すことが含まれ、この場合、それらは以下の通りです。
- wallet_address - ATA内の資金を所有するアカウントのアドレス(authority)
- token_program_id - SPL Token ProgramのプログラムID
- token_mint_address - ATAに保存されるToken accountのアドレス
Associated Token Account ProgramのIDはSPL_ASSOCIATED_TOKEN_ACCOUNT_PROGRAM_IDです。
Associated Token Accountの作成方法
Associated Token Accountの作成は、Solana上でspl-token-cliを使ってcreate-tokenを呼び出すだけです。ATAの作成には、それが「紐づく」対象のトークンがすでに存在していることが前提となります。

このコードは `create-account` コマンドを呼び出し、これは `<TOKEN_MINT_ADDRESS>` を引数として受け取ります。
Associated Token Accountを作成するには、以下の4つのステップに従う必要があります。
- SOLの送金 - System ProgramがATAを初期化し、rent-exemptにする
- 空き領域の確保 - System ProgramがATAに空き領域を割り当てる
- 所有権の移転 - System Programがアカウントの所有権をSPL Associated Token Account Programに移転する
- アカウントの初期化 - このプロセスはアカウントの初期化をまとめ、トークンアドレス、新しく作成されたATAアドレス、そしてその所有者を設定する
ownerとauthorityの違いは何か
ownerとは、ATAを制御するSolanaプログラムの種類であり、一方authorityとは、owner programにトランザクションを送信し、authorityに代わってATA内のデータを変更させるアカウント(ウォレット)です。
Associated Token Accountのコストはいくらか
デフォルトでは、Associated Token Accountは作成時にrent-exemptとしてマークされる必要があるため、アカウントが保持すべき最低額は少なくとも0.00203928 SOLとなります。System ProgramはこのSOLをATAに送金し、トランザクションを開始したアカウントから差し引かれます。
この初期手数料以外は、それ以降のやり取りにかかるコストはSolana上の通常のトランザクションと変わりません。
Associated Token Accountの確認方法
Associated Token AccountはPhantomのようなクライアントを通じて確認できます。これらは、ユーザーのウォレットが権限を持つすべてのATAを自動的に導出します。 また、ブロックチェーンは公開されているため、Solscan.ioのようなエクスプローラーを使ってこの情報にアクセスすることもできます。
確認したいウォレットのアドレスを貼り付けると、そのATAがToken Accountsの下に表示されます。

既存のアカウントにAssociated Token Accountを紐づけることはできるか
Associated Token Accountを既存のアカウントに紐づける処理は、デフォルトで裏側で行われています。ATAが作成される仕組み上、 プログラムやクライアントは、あらゆるアカウントのシードを簡単に見ることができます。 これらは以下への「リンク」とみなすことができます。
- そのATAに対する権限を持つウォレット
- Token accountのアドレス(つまり、そのATAが保持するトークンの種類)
AlchemyでSolanaアプリを構築する
Associated Token Accountについて学ぶことは、一人前のSolana開発者になるための最初のステップの一つです。Solanaノードについて理解し、RPCプロバイダーを選定した後は、当社の使いやすいSolana APIを利用することで、最初のdAppの構築をスムーズに始められます。
よくある質問
Solanaにおけるassociated token account(ATA)とは何か
Associated Token AccountはSolana Associated Token Account Programを通じて作成され、特定のトークン、その残高、所有者に関する情報を保持します。これはProgram Derived Addressの一種であり、ユーザーのウォレットを特定のトークンにマッピングします。
ATAは通常のトークンアカウントとどう違うか
Solana上のトークンアカウントはコードのみを含み、その状態はそのトークンの各所有者ごとに作成されるAssociated Token Accountに「エクスポート」されます。ATAはウォレットと特定のToken mintの両方に紐づいた、決定論的に導出されるアドレスです。
Associated Token Account Programとは何か
Associated Token Account ProgramはSolana Program Libraryの一部であり、ユーザーのウォレットを、そのユーザーが権限を持つATAにマッピングします。ユーザーが、あるトークンに対応するATAを持っていない受取人にトークンを送った場合、自動的にATAアカウントを作成します。
Associated Token Accountを作成するのにいくらかかるか
ATAは作成時にrent-exemptである必要があり、最低0.00203928 SOLの残高が求められます。この金額はトランザクションを開始したアカウントから送金され、継続的なrentの要件をカバーします。
ATAアドレスの導出に使われるシードは何か
ATAアドレスは3つのシード、すなわちウォレットアドレス(authority)、トークンプログラムID、Token mintアドレスを使って導出されます。これらはAssociated Token Account Programに渡され、決定論的なアドレスが作成されます。
Associated Token Accountはどうやって作成するのか
spl-token-cliを使い、`create-account` コマンドをToken mintアドレスを引数として呼び出すことでATAを作成できます。このプロセスには、SOLの送金、空き領域の作成、所有権の移転、アカウントの初期化が含まれます。
自分のAssociated Token Accountはどうやって確認するのか
Phantomなどのウォレットを使えば、自分のウォレットが権限を持つすべてのATAを自動的に確認できます。あるいは、Solscan.ioなどのブロックチェーンエクスプローラーでウォレットアドレスを検索し、Token Accountsのセクションを見ることでも確認できます。
ATAを持たない相手にトークンを送るとどうなるか
Associated Token Account Programは、送金の際に受取人のATAが存在しなければ自動的に作成し、その新しいATAの資金となるrent-exempt分のSOLを送信者のアカウントから差し引きます。
関連する概要
Solana2026年7月27日
Solanaノード:バリデーター、RPCノード、セルフホスティング
Solanaノードとは何か、バリデーター、RPCノード、セカンダリーデータシステムの違い、そしてセルフホストとプロバイダー利用をどう使い分けるか。
Solana2026年7月22日
Solanaアーカイブデータ: ブロックとトランザクションの全履歴をクエリする方法
Solanaアーカイブデータの解説: ノードが履歴をプルーニングする理由、アーカイブアクセスが必要なRPCメソッド、大規模にブロックとトランザクションの全履歴をクエリする方法。
Solana2026年5月28日
Solana Agent Kit vs GOAT vs ElizaOS:どのフレームワークを使うべきか?
Solana Agent Kit、GOAT、ElizaOSを比較:Solanaネイティブな深さ、マルチチェーンの広さ、フルエージェントランタイムのいずれかを選ぶ。コード例と意思決定フレームワークを掲載。

ブロックチェーンで魔法を生み出す
Alchemyは、最も強力なweb3開発者向けプロダクトとツールを、豊富なリソース、コミュニティ、そして卓越したサポートと組み合わせて提供します。