---
title: "AnchorとAnchor Program Registryとは"
description: "SolanaでアプリケーションをビルドするためのAnchorとAnchor Program Registryの使い方"
---

# AnchorとAnchor Program Registryとは

Anchorは、Solana上で安全でセキュアかつ効率的な高水準プログラムを書くための、主要なSolana開発フレームワークです。Anchorにおけるプログラムとは、Solanaブロックチェーン上のスマートコントラクトであり、ユーザーがSolanaブロックチェーンにデータをアンカリングできるようにするものです。Solanaの巨大な開発者コミュニティにより、Solana上で検証済みのプログラムはAnchor Program Registryにホストされ、簡単にアクセスできるようになっています。

この記事では、最も[重要なSolana開発者向けツール](http://www.alchemy.com/overviews/solana-developer-tools)の一つであるAnchorと、Solana上での開発のためのAnchor Program Registryの使い方を理解する手助けをします。また、Anchorと、Solanaと連携するためのPythonベースの開発フレームワークであるSeahorseとの比較も行います。

## **Solanaのアカウントモデルとは？**

開発者がSolanaブロックチェーン上で構築するものはすべて[**プログラムとアカウント**](https://www.alchemy.com/overviews/solana-account-model)に関わり、これらがブロックチェーン上で実行され、データを保存します。Solanaには以下のような異なるアカウントカテゴリがあります。

- **データアカウント** - データを保存する
- **プログラムアカウント** - 実行可能なプログラムを保存する
- **ネイティブアカウント** - Solana上のネイティブプログラムを示す

そして、すべてのアカウントは一連の情報を保存します。

- **lamports** - アカウントが所有するlamportsの数
- **owner** - アカウントのプログラムオーナー
- **executable** - アカウントが命令を処理できるかどうかを確認する
- **data** - アカウントが保存する生のデータバイト配列
- **rent_epoch** - アカウントが[レンタル料を支払う](https://www.alchemy.com/overviews/how-to-calculate-rent-for-solana-programs)次のエポック

## **Anchorとは？**

[**Anchor**](https://www.anchor-lang.com/)は、Solana上で安全でセキュアかつ高水準のプログラムを書くために使われるフレームワークで、アカウントの低レベルな構築やSolanaプログラムへのインターフェースの変更を抽象化します。

フレームワークは基盤として機能するため、ユーザーはゼロから不要なロジックを作成する必要がなく、冗長なコードを避け、クリーンでセキュアなプログラムを書く助けとなります。具体的には、Anchorはボイラープレートを通じてデシリアライズされたアカウントと命令データ、コマンドラインインターフェース（CLI）、そして[Solanaアプリを開発する](https://www.alchemy.com/overviews/learn-solana-development)ためのワークスペースを提供します。

### **Anchorはどのように機能するか？**

Anchorはマクロとトレイトを使用して、開発者向けのボイラープレートRustコードを生成します。すべてのAnchorプログラムは3つのコンポーネントで構成されます。

1. **declare_id** - プログラムのオンチェーンアドレスを宣言するために使われるマクロ
1. **\#\[program\]** - プログラムの命令ロジックを含むモジュールを示すために使われる属性マクロ
1. **\#\[account\]** - プログラムのカスタムアカウント型を定義するために使われる属性マクロ

**Anchorプログラムの基本的な構造は次の通りです。**

<ImageBlock
  src="https://media.alchemy.com/1703690818-basic-structure-of-an-anchor-program.png"
  alt="Anchorプログラムの基本的な構造"
  width={1600}
  height={1080}
  caption="Anchorプログラムの基本的な構造"
/>

### **1. デフォルトのキーペアを作成する**

Anchorプログラムを初めてビルドすると、プログラムをデプロイするためのデフォルトキーペアとなる新しいキーペアが生成されます。

この公開鍵は、declare_id!マクロで指定されるprogramIDとして使用されるべきです。

### **2. プログラムに命令を与える**

その後、\#\[program\]属性を使ってプログラムに個別に命令を与えることができます。各命令関数はContext型のパラメータを必要とし、命令データを表す追加のパラメータを任意で含めることができます。Anchorは命令データのデシリアライズを自動的に処理するため、ユーザーは命令データをRustの型として扱うことができます。

### **3. アカウントデシリアライザを実装する**

_\#\[derive\(Accounts\)\]_は、指定されたstructにAccountデシリアライザを実装し、各アカウントを手動でデシリアライズする必要をなくします。これは、すべての必要な制約チェックを実行し、プログラムが安全に動作するために必要な条件をアカウントが満たしていることを保証する役割を担います。

### **4. initialize関数を呼び出す**

Initialize関数が呼び出されると、プログラムは以下を行います。

- 命令に渡されたアカウントが、Initialize structで指定されたアカウント型と一致することを確認する
- 指定された追加の制約に対してアカウントを確認する

これがAnchorプログラムの動作の仕組みであり、Anchorプログラムの構築を始めるための基本です。Anchorプログラムについてさらに知りたい場合は、公式ドキュメントを確認することを強くお勧めします。

## **Anchor Program Registry（APR）とは？**

**Anchor Program Registry（APR）は、Solanaブロックチェーン上に登録されたAnchorプログラムのディレクトリであり、ユーザーがそれらを簡単に見つけてアクセスできるようにします。APRは、Anchorプログラムがブロックチェーン上で登録・認証されていることを保証します。**

Anchor Program Registryには、作業を楽にするための数多くのプログラムがあります。いくつか例を見てみましょう。

- token_signer - Solanaの鍵管理とセキュリティのための一連のプログラムを提供する。
- spl_governance - **Sealevelパラレルランタイム**を対象とするオンチェーンプログラムのコレクション。
- crate_token - 誰でもトークン化された資産のバスケットを作成、管理、取引できるようにする。

### **Solana開発者はAnchor Program Registryをどのように使うか？**

Solana開発者は、Solanaブロックチェーン上の検証済みプログラムにアクセスするためにAnchor Program Registryを使用します。Anchor Program Registryは検証済みプログラムのソースコードをカタログ化しており、開発者は動作するコードのリポジトリにアクセスできます。

Anchor Program Registryを使用するには、以下の流れに従うことができます。

1. Anchorプログラムのアドレスにアクセスする
1. ウォレットを接続する
1. UIにアクセスする
1. トランザクションに署名し、送信して命令を実行する

APRのインターフェースは、Anchorプログラムがサポートする命令の一覧と、特定の命令の入力を設定するために使用できるフォームフィールドを提供します。

## **Seahorseとは？**

Seahorseは、Anchorと同様のSolana開発フレームワークですが、Python開発者向けに構築されています。Seahorseは、Solanaブロックチェーン上でプログラムとアカウントを構築、デプロイ、操作するための一連のツールを提供します。JavaScript、Rust、Pythonなど異なるプログラミング言語をサポートしており、新しい開発者向けのリソースとドキュメントも完備しています。

### **Anchor vs. Seahorse**

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "Feature", dataType: "object" },
      { key: "2", width: 200, title: "Seahorse", dataType: "object" },
      { key: "3", width: 200, title: "Anchor", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>Programming languages supported</p>", tooltip: "", icon: "" },
        "2": { title: "<p>JavaScript, Rust, Python</p>", tooltip: "", icon: "" },
        "3": { title: "<p>JavaScript, TypeScript</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>Focus</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Flexibility and scalability</p>", tooltip: "", icon: "" },
        "3": { title: "<p>User experience and ease of use</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>Tools and feature</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Smart contract development</p>", tooltip: "", icon: "" },
        "3": { title: "<p>Decentralized Application Development</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p>Local development environment</p>", tooltip: "", icon: "" },
        "2": { title: true, tooltip: "", icon: "" },
        "3": { title: true, tooltip: "", icon: "" },
        id: 3,
      },
      {
        "1": { title: "<p>Testnet for running simulations</p>", tooltip: "", icon: "" },
        "2": { title: true, tooltip: "", icon: "" },
        "3": { title: true, tooltip: "", icon: "" },
        id: 4,
      },
      {
        "1": { title: "<p>Documentation and resources</p>", tooltip: "", icon: "" },
        "2": { title: true, tooltip: "", icon: "" },
        "3": { title: true, tooltip: "", icon: "" },
        id: 5,
      },
    ],
  }}
/>

## **Anchorを学ぶためのリソース**

Anchorフレームワークについて学ぶために利用できるリソースがいくつかあります。

1. [Anchor Docs](https://www.anchor-lang.com/) - 最も関連性が高く最新の情報を見つける
1. [Soldev](https://soldev.app/course) - サンプルコードとともにAnchorでスマートコントラクトの開発を始める
1. [Sol Playground](https://beta.solpg.io/) - オンラインIDEを使ってAnchorでプログラムの開発を始める

Anchorフレームワークについて学び、独自の分散型アプリケーションの構築を始めるための豊富なリソースが用意されています。

## **AnchorとAlchemyで開発を始める**

Anchorフレームワークは、**信頼性が高くセキュアなSolanaプログラム（スマートコントラクト）**を構築するための価値あるツールです。さらに、Anchor Program Registryは、Solanaブロックチェーン上の検証済みプログラムのディレクトリであり、より良い相互運用性を実現するための重要なリソースです。

Anchorフレームワークの汎用性とスケーラビリティは、Solana開発者にとって魅力的な選択肢となっています。Solana開発の旅を始める準備ができたなら、今すぐ無料の[Solana RPCアカウント](https://dashboard.alchemy.com/signup/?a=solana-anchor)にサインアップしましょう。
