Solana Program Libraryとは
Solanaは、開発者が分散型アプリケーションを構築・デプロイできる高速なプログラマブルブロックチェーンです。Solanaは、Solana Program Libraryと呼ばれる専用のドキュメントライブラリを維持しています。これは、Solanaブロックチェーン上で使用するために事前にコンパイル・デプロイ・最適化されたプログラム(すなわちスマートコントラクト)のコレクションです。
この記事では、Solanaの世界を探り、Solana Program Libraryを使ってどのように素早く開発できるかを理解していきます。Solanaが初めての方でも経験豊富な開発者でも、SPLを使えば独自のカスタムトークンや分散型取引所を簡単に作成・デプロイできます。
Solanaにおけるプログラムとは何か
Solanaにおけるプログラムは、アカウントと呼ばれるバッファストレージに格納された実行可能コードであり、トランザクションを介して実行できます。これはEthereumや他のプログラマブルブロックチェーンにおけるスマートコントラクトと似ています。 しかし、プログラムと状態がスマートコントラクト内に一緒に格納されるEthereumとは異なり、Solanaはステートレスプログラムモデルを採用しており、データとプログラムはアカウントに格納されます。
Solanaにおけるアカウントとは何か
Solanaのドキュメントによると、「アカウントとは、データを保持するか実行可能プログラムであるかのいずれかのSolana台帳上のレコードである」とされています。
Solanaをデータベースだと考えてみてください。アカウントが行であり、公開鍵がIDとして機能し、値がそのアカウントに格納された情報です。この情報は、プログラム(すなわちスマートコントラクト)の形か、プログラムのデータ/状態の形のいずれかになります。
アカウントは一意の公開鍵(256バイト)によって識別され、通常は「DM6n1qcUCLzJ1RaAuA4gUbBZ9sfHP6KvEwX8oExQqPhk」のようなものになります。
Solanaはコードとそのデータの間に論理的な分離を持っており、そのため実行可能アカウントと非実行可能アカウントという2種類のアカウントが存在します。
1. 実行可能アカウント
不変のプログラムコードのみを格納し、「実行可能」としてマークされているアカウントです。
2. 非実行可能アカウント
これらのアカウントは、変数、アセット、プログラムの状態を含め、そのプログラムが使用しうるすべてのデータを格納します。誰でもこれらのアカウント内のデータを読み取ることはできますが、プログラムの所有者(デプロイした人)のみがそれを変更できます。
これらのアカウントはバリデータノードによって維持されており、上記の情報を格納するためのメモリ領域と引き換えに「レント」と呼ばれる維持コストを課しています。レントはlamports(SolaのネイティブトークンであるSOLの端数単位)で支払われます。
Solanaのコードとプログラムデータが別々に維持されているのは、Sealevel Parallel Runtimeというシステムによるものです。
Sealevel Parallel Runtimeとは何か
Sealevel Parallel RuntimeはSolanaによる並列トランザクション処理システムの実装です。 Ethereumのような従来のシングルスレッド型ブロックチェーンは、並行性を回避するために一度に1つのトランザクションしか処理できません。これは、Ethereumのスマートコントラクトがステートフルであること、つまり状態とコードが同じコントラクト内に結合されていることが原因です。
Sealevelの助けにより、Solanaは競合しない数千のトランザクションを並列に処理できます。複数のバリデータコアを利用することで、Solanaはブロック時間400ミリ秒で最大50,000 Tpsを実行できます。これは、トランザクション命令がステートレスであり、事前にどのアカウントのデータを変更するかを決定しているために可能となっています。したがって、同じアカウントデータを共有しないプログラムは同時に実行できます。
Solanaにおけるプログラムの種類とは何か
Solanaのエコシステムは、ネイティブプログラムとオンチェーンプログラムという2つの異なる種類のプログラムで構成されています。両者を見ていきましょう。
ネイティブプログラムとは何か
ネイティブプログラムは、アカウントストレージの割り当て管理、新規アカウントの作成、トランザクションの処理、Solanaネットワークのルールの強制など、Solanaネットワークの中核機能を実装する役割を担っています。
ネイティブプログラムはSolanaのコアブロックチェーンモデルの不可欠な一部です。通常、パフォーマンスとセキュリティに最適化された、RustやC/C++のような低レベル言語で書かれています。ネイティブプログラムはどのプログラム/ユーザーからも呼び出すことができますが、これはオペレーティングシステムのカーネルレベルのプログラムがユーザーから直接呼び出しやアクセスができないのとは対照的です。
これらのプログラムの更新は、機能追加、バグ修正、パフォーマンス改善のためのコアブロックチェーンアップグレードやクラスターアップグレードの一環としてのみ行われます。
バリデータの安全性を確保するのに役立つネイティブプログラムは数多くあります。その一部を紹介します。
1. システムプログラム
システムプログラムは、新規アカウントの作成、2つのアカウント間のSOLの転送、アカウント所有権の割り当てなど、より多くのアカウント管理操作を担っています。
2. Berkeley Packet Filter (BPF):
Berkeley Packet Filterは、オンチェーンでのプログラムのデプロイ、アップグレード、実行を処理します。
3. ステークプログラム
ステークプログラムは、Solanaブロックチェーン上でのSOLトークンのステーキング管理を担っています。
オンチェーンプログラムとは何か
オンチェーンプログラムは、ブロックチェーン上に直接デプロイされるユーザー作成のプログラム(すなわちスマートコントラクト)です。 これらは、dapp、取引所、練習用コントラクト、マルチシグウォレットの実装、その他の汎用プログラムなど多岐にわたります。
ネイティブプログラムとは異なり、オンチェーンプログラムはSolanaクラスターの中核を成すものではありません。代わりに、開発者がSolanaブロックチェーン上で作成・デプロイするカスタムプログラムです。つまり、オンチェーンプログラムはSolanaブロックチェーンの運用に不可欠なものではありません。
これらはネイティブプログラムが提供するコアインフラの上に構築されており、開発者がSolanaブロックチェーン上で幅広いアプリケーションやサービスを構築できるようにしています。
プログラムがやり取りするデータは別々のデータアカウントに格納され、命令を通じて参照として渡されます。プログラムデータをアップグレードできるのはアカウント所有者のみです。

Solana Program Libraryとは何か
Solana Program Library (SPL)は、Solanaブロックチェーン上で分散型アプリケーションを構築するために使用できる、あらかじめ書かれたモジュール式プログラムのコレクションです。SPLは、再利用可能なモジュール式コンポーネントのセットを提供することで、開発者がアプリを作成しやすくすることを目指しており、開発者がゼロから複雑なコードを書く必要性を減らします。
したがって、SPLは開発者が「ビルディングブロック」的なアプローチでアプリを構築できるようにしており、各コンポーネントをアプリケーションに簡単に組み込めます。
SPLには複数の汎用オンチェーンプログラムが含まれており、Tokenプログラムとそのバリエーションが最も広く使われています。これらはゼロから実装することなくプロジェクトに組み込むのに役立ちます。
SPLの前提条件
SPLとやり取りするには、CLIによるアプローチか、Solanaブロックチェーンとやり取りするためのJavaScriptコードにsolana/web3.jsを組み込む、よく使われるJSアプローチのいずれかを選べます。
どのSolanaクラスターとやり取りする場合でも、Solana CLI(コマンドラインインターフェース)をセットアップする必要があります。CLIは初心者の開発者にとって最も扱いやすいものではないかもしれませんが、Solanaアカウントへの最も直接的で安全なアクセスを提供します。さらに、CLIはSolanaのコア開発者が新機能を最初にデプロイする場所でもあります。
SPL Tokenプログラムとは何か
SPL TokenプログラムはSolanaブロックチェーン上のファンジブルトークンおよびノンファンジブルトークンの汎用実装です。 これは、開発者が独自のトークンを作成できるようにするインターフェースと詳細な実装を提供します。コードはネイティブにRustで書かれており、その自動生成バインディングはCおよびJavaScriptで利用可能です。ソースコードはSPL GitHubリポジトリで公開されています。
Ethereumでは、ERC20トークンプログラムはEthereumのERC-20コントラクトとは異なる形で動作します。違いを理解するために例を見てみましょう。
Ethereumブロックチェーン上で3つの異なるトークンを公開したいとします。そのためには、各トークンごとに3つの別々のコントラクトをデプロイする必要があります。そして、各トークンコントラクトはそれぞれの状態(例:残高や転送)を個別に管理します。
一方、Solanaでは、3つの別々のトークンプログラムをデプロイする必要はありません。代わりに、多数のアカウント(例:ミントアカウントと受け取りアカウント)に対して動作できる1つの汎用トークンプログラムをデプロイできます。
ミントアドレスがトークンの種類を一意に識別します。この情報は、Solanaチェーン上に既にデプロイされている単一の静的ERC20プログラムインスタンスに引数として渡すことができます。
SPL Tokenプログラムを使ってファンジブルトークンを作成する方法
SPL Tokenプログラムを使えば、数ステップで自分のファンジブルトークンを作成できます。Tokenプログラムに取り掛かる前に、CLIウォレットのセットアップ、またはPhantomウォレットをSolanaのDevnetに接続し、十分なDevnet SOLをウォレットにエアドロップしておいてください。
ステップ1:ファンジブルトークンを作成する
create tokenコマンドは、オンチェーンのSPL Tokenプログラムに対して新しいTokenを作成するよう指示するものです。トークンの作成に成功すると、トランザクション署名とともにToken IDを受け取ります。ただし、まだこれらをミントする必要があります。
これがトークンコマンドです:spl-token create-token

ステップ2:トークンアカウントを作成する
トークンに関連する情報を別のデータアカウントに格納します。トークンアカウントはSPL-Tokenプログラムによって所有されており、これらのトークンへのアクセスを、トークンを使用/転送できるowner欄(これが私たちのToken-IDです)とともに制御します。
これはデータアカウントであるため、そのデータはTokenプログラムによる追加/ミント、転送、バーンによって変更されます。
これがトークンアカウント作成コマンドです:spl-token create-account
以下に示すように、トークンとその関連アカウントを作成することで、トランザクション手数料としてわずかなSOLが減っています。また、初期供給量がゼロであることにも注意してください。つまり、トークンをミントすることで望ましい供給量を追加する必要があります。

ステップ3:望ましい数量のトークンをミントする
指定した数のトークンをミントするには、以下のコマンドを実行します。
コマンドが実行されると、指定した数のトークンがファイルシステムウォレットにミントされ、トークン供給量が更新されます。

現在のトークン供給量と、そのトークンに関連するアカウントは、以下のコマンドを実行することで確認できます。

それでは、トークンをSolanaで人気のあるウォレットであるPhantomウォレットに転送してみましょう。
ステップ4:トークンを転送する
計画としては、受取人(私たちのPhantomウォレット)に「x」量のトークンを転送します。「fund recipient」は、受取人のトークンアカウントが存在しない場合にそれを作成する役割を担っています。これはAssociated Token Accountの作成と呼ばれます。
トークンを転送するコマンドはこちらです:

転送が成功すると、成功メッセージを受け取ります。

転送を確認するには、次のコマンドを実行します:*spl-token accounts
注:token supplyコマンドを実行しても、供給量はネットワーク上で流通しているトークンの数を示す一方、残高はトークンアカウントが保有するトークンの数を指すため、依然として2,000トークンと表示されます。

ステップ5:トークン供給量を制限する
コントラクトのセキュリティと需要にとって重要な側面の1つは、トークン供給量を制限することです。ミント機能を無効化するには、mint authorityを「None」に設定します。
トークンのmint authorityを無効化するコマンド:*spl-token authorize mint --disable


ステップ6:トークンをバーンする
トークンの供給量を減らしたい場合は、バーンすることを選択できます。
そのためのコマンドはこちらです:spl-token burn

バーンすると、供給量と残高の両方が減少します。この例で見ることができるように、残高は4,978から3,978に減少し、供給量は4,000に減少しました。

SPLは、以下のようなより多くの操作をTokenプログラムを使って実行する方法についての完全なリファレンスガイドを提供しています:
- SOLをトークンでラップする。
- 明示的な受取人トークンアカウントへトークンを転送する。
- ノンファンジブルトークンを作成する。
SPLでSolana開発の旅を始めよう
Solana Program Libraryは、簡単にやり取りできる事前公開済みのオンチェーンプログラムを数多く備えています。SPLを使えば、開発者は基本的な定型トークン作成コードに時間を費やすのではなく、アプリの独自の機能や特徴に集中できます。
初心者で、Solana開発の旅を始めたいなら、最初のステップはSPLとAlchemyのSolana API、そして無料のSolana RPCノードアカウントを探索することです。これらは、あなたのプログラムをすぐに動かす助けになります。
関連する概要
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開発者向けプロダクトとツールを、豊富なリソース、コミュニティ、そして卓越したサポートと組み合わせて提供します。