search-aptos-examples について
Aptos 上で Move を開発する人向けに、コントラクトを書く前に aptos-core と daily-move の公式例を検索する手順を示すスキルです。コントラクトの種類ごとに例を整理し、パターンの理解とセキュリティチェックの維持を重視します。
主な機能
- 01コントラクトの種類別の例検索
- 02aptos-core と daily-move の参照
- 03セキュリティパターンの応用ガイド
- 04テストとアクセス制御の確認項目
活用シーン
- 01NFT やトークンのコントラクトパターン検索
- 02DeFi、DAO、マーケットプレイスの例の調査
- 03Move のモジュールやオブジェクトパターンの学習
- 04コード応用前のセキュリティとテストの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ aptos-labs/ aptos-agent-skills --skill search-aptos-examplesインストール後、Claude Code で/search-aptos-examplesを入力して読み込まれたか確認します。
詳細
Aptos のサンプルを検索するスキル
概要
このスキルは、新しいコントラクトを記述する前に、Aptos の公式リポジトリで関連するサンプルを見つけるのに役立ちます。確立されたパターンに従えるよう、必ず最初にサンプルを検索してください。
リポジトリ:
aptos-labs/aptos-core/aptos-move/move-examples/— ベストプラクティスを示す 53 個以上の公式 Move サンプルaptos-labs/daily-move/snippets/— デザインパターン、Move 2 の機能、コンポーザブル NFT などを扱う、厳選された 17 個の学習用サンプル
基本的なワークフロー
ステップ 1:作成するものを特定する
コントラクトを分類します。
- NFT/トークン:NFT コレクション、デジタルアセット、コレクティブル
- 代替可能なアセット:コイン、トークン、通貨
- DeFi:DEX、AMM、レンディング、ステーキング
- ガバナンス:DAO、投票、提案
- マーケットプレイス:取引、エスクロー、オークション
- ゲーム:アイテム、キャラクター、ゲームロジック
- インフラストラクチャ:レジストリ、設定、ユーティリティ
ステップ 2:関連するサンプルを検索する
カテゴリ別の優先サンプル:
NFT とトークンオブジェクト
token_objects/- 最新のオブジェクトベースのトークン(V2 パターン)mint_nft/- NFT のミントパターンnft_dao/- NFT 保有を条件とするガバナンスcollection_manager/- コレクション管理- (daily-move)
composable-nfts/- ほかの NFT を含む NFT - (daily-move)
modifying-nfts/- 変更可能な NFT メタデータのパターン - (daily-move)
parallel-nfts/- 並行 NFT ミント - (daily-move)
liquid-nfts/- 分割所有/流動性を持つ NFT
使用する場面: NFT コレクション、デジタルコレクティブル、トークン化されたアセットを構築する場合
代替可能なアセット
fungible_asset/- 最新の代替可能トークン規格coin/- 基本的なコインの実装managed_fungible_asset/- 管理可能な代替可能アセット- (daily-move)
fa-lockup-example/- FA のロックアップとエスクローのパターン - (daily-move)
fractional-token/- トークンの分割所有 - (daily-move)
controlled-mint/- アクセス制御によるミント管理
使用する場面: トークン、通貨、報酬ポイントを作成する場合
DeFi と取引
marketplace/- NFT マーケットプレイスのパターンswap/- シンプルなトークンスワップliquidity_pool/- AMM プールの実装staking/- ステーキングの仕組み
使用する場面: DEX、マーケットプレイス、取引プラットフォームを構築する場合
ガバナンスと DAO
dao/- DAO ガバナンスのパターンvoting/- 投票の仕組みmultisig/- マルチシグアカウント
使用する場面: DAO、ガバナンスシステム、投票機能を構築する場合
基本的なパターン
hello_blockchain/- モジュール構造の基本message_board/- シンプルな状態管理resource_account/- リソースのパターン(レガシーのため、新しいコードでは避けてください)- (daily-move)
error-codes/- エラーコードの規約とパターン - (daily-move)
private-vs-public/- 関数の可視性とアクセス - (daily-move)
objects/- オブジェクトモデルの基礎
使用する場面: Move の基本やシンプルなコントラクトを学ぶ場合
高度なパターン
object_playground/- オブジェクトモデルの探求capability/- ケイパビリティベースのセキュリティupgradeable/- アップグレード可能なコントラクト- (daily-move)
design-patterns/- 自律型オブジェクトなどのデザインパターン - (daily-move)
struct-capabilities/- 構造体ベースのケイパビリティパターン - (daily-move)
move-2/- Move 2 の言語機能とイディオム - (daily-move)
storage/- ストレージレイアウトと最適化のパターン - (daily-move)
data-structures/- ヒープデータ構造の実装
使用する場面: 複雑なアーキテクチャやセキュリティパターンを扱う場合
ゲーム
- (daily-move)
lootbox/- ランダム化されたルートボックスの仕組み
使用する場面: ゲーム、ランダムな報酬、ルートシステムを構築する場合
ステップ 3:サンプルコードを確認する
確認するポイント:
-
モジュール構造:
- インポートはどのように整理されていますか?
- どのような構造体が定義されていますか?
- エラーコードはどのような構造ですか?
-
オブジェクトの作成:
- オブジェクトはどのように作成されていますか?
- どのような ref が生成されますか?
- 所有権はどのように管理されていますか?
-
アクセス制御:
- 署名者の権限はどのように検証されていますか?
- オブジェクトの所有権はどのように確認されていますか?
- どのようなロールや権限がありますか?
-
操作:
- 転送はどのように処理されていますか?
- 更新はどのように保護されていますか?
- どのような検証が実行されていますか?
-
テスト:
- どのようなテストパターンが使われていますか?
- カバレッジはどのように確保されていますか?
ステップ 4:パターンをユースケースに合わせて調整する
そのままコピーせず、調整してください:
- パターンを理解する: なぜこのような構造になっているのでしょうか?
- 主要な概念を特定する: 重要なセキュリティチェックは何でしょうか?
- ニーズに合わせて調整する: 独自の要件に合わせて変更してください。
- セキュリティを維持する: すべてのセキュリティチェックをそのまま維持してください。
- 十分にテストする: 100%のカバレッジを確保してください。
サンプル検索テーブル
| ビルド対象 | 検索語 | ソース | 主要なファイル |
|---|---|---|---|
| NFT コレクション | token_objects, mint_nft | aptos-core | token_objects/sources/token.move |
| 代替可能トークン | fungible_asset | aptos-core | fungible_asset/sources/fungible_asset.move |
| マーケットプレイス | marketplace | aptos-core | marketplace/sources/marketplace.move |
| DAO | dao, voting | aptos-core | dao/sources/dao.move |
| トークンスワップ | swap, liquidity_pool | aptos-core | swap/sources/swap.move |
| ステーキング | staking | aptos-core | staking/sources/staking.move |
| シンプルなコントラクト | hello_blockchain, message_board | aptos-core | hello_blockchain/sources/hello.move |
| オブジェクトパターン | object_playground | aptos-core | object_playground/sources/playground.move |
| コンポーザブル NFT | composable-nfts | daily-move | snippets/composable-nfts/ |
| FA ロックアップ/エスクロー | fa-lockup-example | daily-move | snippets/fa-lockup-example/ |
| デザインパターン | design-patterns | daily-move | snippets/design-patterns/ |
| Move 2 の機能 | move-2 | daily-move | snippets/move-2/ |
| データ構造 | data-structures | daily-move | snippets/data-structures/ |
| ストレージパターン | storage | daily-move | snippets/storage/ |
| ルートボックスのパターン | lootbox | daily-move | snippets/lootbox/ |
サンプルへのアクセス方法
方法 1:GitHub のウェブインターフェース
https://github.com/aptos-labs/aptos-core/tree/main/aptos-move/move-examples
オンラインで閲覧し、ソースファイルを直接読めます。
方法 2:リポジトリをクローンする(推奨)
# Clone Aptos core
git clone https://github.com/aptos-labs/aptos-core.git
# Navigate to examples
cd aptos-core/aptos-move/move-examples
# List all examples
ls -la
# View specific example
cd token_objects
cat sources/token.move
方法 3:daily-move リポジトリ
オンラインで閲覧する:
https://github.com/aptos-labs/daily-move/tree/main/snippets
ローカルにクローンする:
git clone https://github.com/aptos-labs/daily-move.git
cd daily-move/snippets
ls -la
方法 4:Aptos のドキュメントを検索する
https://aptos.dev/build/smart-contracts
多くのサンプルが解説付きでドキュメント化されています。
サンプルに見られる一般的なパターン
パターン 1:オブジェクトの作成(token_objects より)
// From: token_objects/sources/token.move
public entry fun create_token(
creator: &signer,
collection_name: String,
description: String,
name: String,
uri: String,
) {
let constructor_ref = token::create_named_token(
creator,
collection_name,
description,
name,
option::none(),
uri,
);
// ... additional setup
}
要点: コレクションには名前付きトークンを使用し、固有のアイテムには create_object を使用します。
パターン 2:アクセス制御(dao より)
// From: dao/sources/dao.move
public entry fun execute_proposal(
proposer: &signer,
proposal_id: u64
) acquires DAO, Proposal {
let dao = borrow_global_mut<DAO>(@dao_addr);
let proposal = vector::borrow_mut(&mut dao.proposals, proposal_id);
// Verify proposal passed
assert!(proposal.votes_for > proposal.votes_against, E_PROPOSAL_NOT_PASSED);
// Execute actions
// ...
}
要点: 重要な操作を実行する前に、状態条件を検証します。
パターン 3:転送制御(fungible_asset より)
// From: fungible_asset/sources/fungible_asset.move
public fun transfer<T: key>(
from: &signer,
to: address,
amount: u64
) acquires FungibleStore {
// Verify sender has sufficient balance
let from_store = borrow_global_mut<FungibleStore<T>>(signer::address_of(from));
assert!(from_store.balance >= amount, E_INSUFFICIENT_BALANCE);
// Deduct from sender
from_store.balance = from_store.balance - amount;
// Add to recipient
let to_store = borrow_global_mut<FungibleStore<T>>(to);
to_store.balance = to_store.balance + amount;
}
要点: チェック・エフェクト・インタラクションのパターン(検証、減算、加算)。
必ず守るルール
- ✅ 新しいコントラクトを書く前に、必ずサンプルを検索します
- ✅ aptos-core(公式)と daily-move(学習用)の両方のリポジトリを必ず確認します
- ✅ コピーする前に、必ずパターンを理解します
- ✅ 必ずパターンをユースケースに合わせて調整します
- ✅ サンプルに含まれるセキュリティチェックを必ず維持します
- ✅ どのサンプルを参考にしたか、必ず記載します
- ✅ 調整したコードを必ず十分にテストします
絶対にしてはいけないこと
- ❌ 理解せずにコードをコピーしてはいけません
- ❌ サンプルに含まれるセキュリティチェックを省略してはいけません
- ❌ 非推奨のパターン(リソースアカウント、アドレスベース)を使用してはいけません
- ❌ サンプルが常に最新だと思い込んではいけません(ドキュメントで確認してください)
- ❌ V1 と V2 のパターンを混在させてはいけません
- ❌ サンプルを調整する際に、実際の秘密鍵や認証情報を含めてはいけません —
"0x..."のプレースホルダーを使用してください
検索チェックリスト
コントラクトコードを書く前に、次の項目を確認します。
- カテゴリを特定した(NFT、DeFi、DAO など)
- aptos-core で関連するサンプルを 2~3 件見つけた
- daily-move のスニペットで学習用のサンプルを確認した
- モジュールの構造を確認した
- セキュリティパターンを特定した
- オブジェクト作成のパターンを理解した
- アクセス制御の仕組みを把握した
- テストのパターンを確認した
- ユースケースに合わせて調整する準備ができた
サンプルを調整するワークフロー
手順:NFT コレクションの構築
-
検索:
token_objectsのサンプルを見つけます -
構造を確認:
token_objects/ ├── sources/ │ ├── collection.move # Collection management │ ├── token.move # Token operations │ └── property_map.move # Metadata handling └── tests/ └── token_tests.move -
主要なパターンを特定:
create_collectionによるコレクションの作成create_named_tokenによるトークンの発行PropertyMapを使用したメタデータの保存TransferRefによる転送制御
-
ニーズに合わせて調整:
- オブジェクト作成のパターンを維持します
- セキュリティチェックを維持します
- カスタムフィールドを追加します
- ビジネスロジックを追加します
- 網羅的なテストを書きます
-
コード内で参照:
// Adapted from: aptos-core/move-examples/token_objects module my_addr::custom_nft { // ... your implementation }
参考資料
公式サンプル:
- aptos-core:https://github.com/aptos-labs/aptos-core/tree/main/aptos-move/move-examples
- daily-move:https://github.com/aptos-labs/daily-move/tree/main/snippets
- ドキュメント:https://aptos.dev/build/smart-contracts
関連スキル:
write-contracts- 検索後にパターンを適用しますsecurity-audit- 調整したコードのセキュリティを検証しますgenerate-tests- 調整したパターンをテストします
覚えておきましょう: まずサンプルを検索します。パターンを理解します。安全に調整します。十分にテストします。