機能

Assetの作成

Last updated January 31, 2026

このガイドでは、Metaplex Core SDKを使用してSolanaでCore Asset(NFT)を作成する方法を説明します。オフチェーンメタデータをアップロードし、オンチェーンAssetアカウントを作成し、オプションでCollectionに追加したりプラグインを添付したりします。

構築するもの

以下を含むCore Asset:

  • Arweaveに保存されたオフチェーンメタデータ(名前、画像、属性)
  • 所有権とメタデータURIを持つオンチェーンAssetアカウント
  • オプション:Collectionメンバーシップ
  • オプション:プラグイン(ロイヤリティ、フリーズ、属性)

概要

メタデータJSONを分散ストレージにアップロードし、URIでcreate()を呼び出してCore Assetを作成します。Assetはスタンドアロンでミントするか、Collectionにミントでき、作成時にプラグインを含めることができます。

  • メタデータJSONをArweave/IPFSにアップロードし、URIを取得
  • name、URI、オプションのプラグインでcreate()を呼び出す
  • コレクションの場合:collectionパラメータを渡す
  • アセットあたり約0.0029 SOLのコスト

対象外

Token Metadata NFT(mpl-token-metadataを使用)、圧縮NFT(Bubblegumを使用)、ファンジブルトークン(SPL Tokenを使用)、NFT移行。

クイックスタート

ジャンプ先: メタデータをアップロード · Assetを作成 · Collectionと共に · プラグインと共に

  1. インストール:npm install @metaplex-foundation/mpl-core @metaplex-foundation/umi
  2. メタデータJSONをアップロードしてURIを取得
  3. create(umi, { asset, name, uri })を呼び出す
  4. core.metaplex.comで確認

前提条件

  • 署名者とRPC接続で構成されたUmi
  • トランザクション手数料用のSOL(アセットあたり約0.003 SOL)
  • アップロード準備ができたメタデータJSON(名前、画像、属性)

作成プロセス

  1. オフチェーンデータをアップロード。 名前、説明、画像URL、属性を含むJSONファイルを保存します。ファイルは公開URI経由でアクセス可能である必要があります。
  2. オンチェーンAssetアカウントを作成。 メタデータURIでcreate命令を呼び出してAssetをミントします。

オフチェーンデータのアップロード

任意のストレージサービス(Arweave、IPFS、AWS)を使用してメタデータJSONをアップロードします。Umiは一般的なサービス用のアップローダープラグインを提供します。利用可能なすべてのメタデータフィールドについてはJSON Schemaを参照してください。

upload-metadata.ts
import { irysUploader } from '@metaplex-foundation/umi-uploader-irys'
// アップローダーを構成(Irys、AWSなど)
umi.use(irysUploader())
// 最初に画像をアップロード
const [imageUri] = await umi.uploader.upload([imageFile])
// メタデータJSONをアップロード
const uri = await umi.uploader.uploadJson({
name: 'My NFT',
description: 'This is my NFT',
image: imageUri,
attributes: [
{ trait_type: 'Background', value: 'Blue' },
],
})

URIを取得したら、Assetを作成できます。

Assetを作成

create命令を使用して新しいCore Assetをミントします。

1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
2import { create } from '@metaplex-foundation/mpl-core'
3import { mplCore } from '@metaplex-foundation/mpl-core'
4
5// Initialize UMI
6const umi = createUmi('https://api.devnet.solana.com')
7 .use(mplCore())
8
9// Create a new NFT asset
10const asset = await create(umi, {
11 name: 'My NFT',
12 uri: 'https://example.com/metadata.json'
13}).sendAndConfirm(umi)
14
15console.log('Asset created:', asset.publicKey)

CollectionにAssetを作成

Collectionの一部としてAssetを作成するには、collectionパラメータを渡します。Collectionは既に存在している必要があります。

1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
2import { create, fetchCollection } from '@metaplex-foundation/mpl-core'
3import { mplCore } from '@metaplex-foundation/mpl-core'
4import { generateSigner, publicKey } from '@metaplex-foundation/umi'
5
6// Initialize UMI
7const umi = createUmi('https://api.devnet.solana.com')
8 .use(mplCore())
9
10const collectionAddress = publicKey('YOUR_COLLECTION_ADDRESS')
11
12// Fetch the existing collection
13const collection = await fetchCollection(umi, collectionAddress)
14
15// Generate a new keypair for the asset
16const assetSigner = generateSigner(umi)
17
18// Create asset in the collection
19await create(umi, {
20 asset: assetSigner,
21 collection,
22 name: 'Collection Item #1',
23 uri: 'https://example.com/item1.json',
24}).sendAndConfirm(umi)
25
26console.log('Asset created in collection:', assetSigner.publicKey)

Collectionの作成についてはCollectionを参照してください。

プラグイン付きでAssetを作成

plugins配列で渡すことで、作成時にプラグインを追加します。この例ではRoyaltiesプラグインを追加します:

1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
2import { create, ruleSet } from '@metaplex-foundation/mpl-core'
3import { mplCore } from '@metaplex-foundation/mpl-core'
4import { generateSigner, publicKey } from '@metaplex-foundation/umi'
5
6// Initialize UMI
7const umi = createUmi('https://api.devnet.solana.com')
8 .use(mplCore())
9
10const creator = publicKey('YOUR_CREATOR_ADDRESS')
11
12// Generate a new keypair for the asset
13const assetSigner = generateSigner(umi)
14
15// Create asset with Royalties plugin
16await create(umi, {
17 asset: assetSigner,
18 name: 'NFT with Royalties',
19 uri: 'https://example.com/metadata.json',
20 plugins: [
21 {
22 type: 'Royalties',
23 basisPoints: 500, // 5%
24 creators: [
25 { address: creator, percentage: 100 },
26 ],
27 ruleSet: ruleSet('None'),
28 },
29 ],
30}).sendAndConfirm(umi)
31
32console.log('Asset created with plugins:', assetSigner.publicKey)

一般的なプラグイン

よく使用されるプラグインをいくつか紹介します。完全なリストについてはプラグイン概要を参照してください。

よくあるエラー

Asset account already exists

アセットキーペアが既に使用されています。新しい署名者を生成してください:

const assetSigner = generateSigner(umi) // 一意である必要があります

Collection not found

コレクションアドレスが存在しないか、有効なCore Collectionではありません。アドレスを確認し、最初にCollectionを作成したことを確認してください。

Insufficient funds

支払者ウォレットにはレント用に約0.003 SOLが必要です。以下で資金を追加:

solana airdrop 1 <WALLET_ADDRESS> --url devnet

注意事項

  • assetパラメータは新しいキーペアである必要があります - 既存のアカウントを再利用できません
  • 別の所有者にミントする場合は、ownerパラメータを渡します
  • 作成時に追加されたプラグインは、後から追加するよりも安価です(1トランザクション対2トランザクション)
  • すぐにフェッチするスクリプトでアセットを作成する場合はcommitment: 'finalized'を使用

クイックリファレンス

プログラムID

ネットワークアドレス
MainnetCoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d
DevnetCoREENxT6tW1HoK8ypY1SxRMZTcVPm7R94rH4PZNhX7d

最小コード

minimal-create.ts
import { generateSigner } from '@metaplex-foundation/umi'
import { create } from '@metaplex-foundation/mpl-core'
const asset = generateSigner(umi)
await create(umi, { asset, name: 'My NFT', uri: 'https://...' }).sendAndConfirm(umi)

コスト内訳

項目コスト
Assetアカウントレント約0.0029 SOL
トランザクション手数料約0.000005 SOL
合計約0.003 SOL

FAQ

Core AssetとToken Metadata NFTの違いは何ですか?

Core Assetは単一アカウントを使用し、コストが約80%削減されます。Token Metadataは3つ以上のアカウント(mint、metadata、token)を使用します。新規プロジェクトにはCoreが推奨されます。

1つのトランザクションで複数のアセットを作成できますか?

いいえ。各create命令は1つのアセットを作成します。大量ミントにはCore Candy Machineまたはバッチトランザクションを使用してください。

最初にCollectionを作成する必要がありますか?

いいえ。AssetはCollectionなしで存在できます。ただし、Collectionはコレクションレベルのロイヤリティと操作を可能にします。

別のウォレットにミントするにはどうすればよいですか?

ownerパラメータを渡します:

await create(umi, { asset, name, uri, owner: recipientAddress })

どのメタデータ形式を使用すべきですか?

namedescriptionimage、およびオプションのattributes配列を含む標準NFTメタデータ形式を使用します。JSON Schemaを参照してください。

用語集

用語定義
AssetNFTを表すCoreオンチェーンアカウント
URIオフチェーンメタデータJSONを指すURL
署名者トランザクションに署名するキーペア(アセットは作成時に署名者である必要があります)
Collection関連するAssetをグループ化するCoreアカウント
PluginAssetに動作を追加するモジュラー拡張機能
レントSolana上でアカウントを維持するために必要なSOL
Previous
Rust SDK