JavascriptでCore Collectionを作成する方法

Last updated January 31, 2026

このガイドでは、@metaplex-foundation/mpl-core Javascript SDKパッケージを使用して、Metaplex CoreオンチェーンプログラムでCore Collectionを作成する方法を示します。

Coreとは?

Coreはシングルアカウント設計を使用し、代替ソリューションと比較してミントコストを削減し、Solanaネットワーク負荷を改善します。また、開発者がアセットの動作と機能を変更できる柔軟なプラグインシステムを持っています。

始める前に、Collectionsについて説明しましょう:

Collectionsとは?

Collectionsは、同じシリーズやグループに属するAssetsのグループです。Assetsをグループ化するには、まずコレクション名やコレクション画像などのそのコレクションに関連するメタデータを保存することを目的としたCollection Assetを作成する必要があります。Collection Assetはコレクションの表紙として機能し、コレクション全体のプラグインも保存できます。

前提条件

  • お好みのコードエディタ(Visual Studio Codeを推奨)
  • Node 18.x.x以上。

初期設定

このガイドでは、単一ファイルスクリプトに基づいてJavascriptでCore Collectionを作成する方法を教えます。ニーズに合わせて関数を変更・移動する必要があるかもしれません。

プロジェクトの初期化

お好みのパッケージマネージャー(npm、yarn、pnpm、bun)で新しいプロジェクトを初期化し(オプション)、プロンプトが表示されたら必要な詳細を入力します。

npm init

必要なパッケージ

このガイドに必要なパッケージをインストールします。

npm i @metaplex-foundation/umi
npm i @metaplex-foundation/umi-bundle-defaults
npm i @metaplex-foundation/mpl-core
npm i @metaplex-foundation/umi-uploader-irys;

インポートとラッパー関数

ここでは、このガイドに必要なすべてのインポートを定義し、すべてのコードを実行するラッパー関数を作成します。

import {
createCollection,
mplCore
} from '@metaplex-foundation/mpl-core'
import {
createGenericFile,
generateSigner,
signerIdentity,
sol,
} from '@metaplex-foundation/umi'
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
import { irysUploader } from '@metaplex-foundation/umi-uploader-irys'
import { base58 } from '@metaplex-foundation/umi/serializers'
import fs from 'fs'
import path from 'path'
// ラッパー関数を作成
const createCollection = async () => {
///
///
/// すべてのコードはここに記述
///
///
}
// ラッパー関数を実行
createCollection()

Umiの設定

Umiを設定する際、さまざまなソースからキーペア/ウォレットを使用または生成できます。テスト用に新しいウォレットを作成したり、ファイルシステムから既存のウォレットをインポートしたり、ウェブサイト/dAppを作成する場合はwalletAdapterを使用できます。 注意: この例ではgeneratedSigner()でUmiを設定しますが、以下のすべての設定方法を見つけることができます!

注意: walletAdapterセクションは、walletAdapterがすでにインストールされセットアップされていることを前提として、Umiに接続するために必要なコードのみを提供します。包括的なガイドについては、こちらを参照してください。

Collectionのメタデータの作成

ウォレットやExplorerでCollectionの認識可能な画像を表示するには、メタデータを保存するURIを作成する必要があります!

画像のアップロード

Umiには、ArweaveNftStorageAWSShdwDriveなどのストレージソリューションにアップロードできるダウンロード可能なストレージプラグインが付属しています。このガイドでは、Arweaveにコンテンツを保存するirysUploader()プラグインを使用します。 この例では、Irysを使用してArweaveにアップロードするローカルアプローチを使用します。ブラウザから別のストレージプロバイダーにファイルをアップロードしたい場合は、別のアプローチが必要です。ブラウザシナリオではfsのインポートと使用は機能しません。

import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
import { irysUploader } from '@metaplex-foundation/umi-uploader-irys'
import fs from 'fs'
import path from 'path'
// Umiを作成しIrysを使用するよう指示
const umi = createUmi('https://api.devnet.solana.com')
.use(irysUploader())
// `fs`を使用して文字列パスでファイルを読み込む
// コンピューティングの観点からパスの概念を理解する必要があります。
const imageFile = fs.readFileSync(
path.join(__dirname, '..', '/assets/my-image.jpg')
)
// `createGenericFile`を使用してファイルをumiが理解できる`GenericFile`型に変換
// mimeタグタイプを正しく設定しないとArweaveは画像を表示する方法がわかりません。
const umiImageFile = createGenericFile(imageFile, 'my-image.jpeg', {
tags: [{ name: 'Content-Type', value: 'image/jpeg' }],
})
// ここでIrys経由でArweaveに画像をアップロードし、
// ファイルが配置されているuriアドレスが返されます。
// これをログ出力できますが、uploaderはファイルの配列を受け取るため
// uriの配列も返します。
// 欲しいuriを取得するには配列のインデックス[0]を呼び出します。
const imageUri = await umi.uploader.upload([umiImageFile]).catch((err) => {
throw new Error(err)
})
console.log(imageUri[0])

メタデータのアップロード

有効で動作する画像URIができたら、コレクションのメタデータの作成を開始できます。 ファンジブルトークンのオフチェーンメタデータの標準は以下の通りです。これはJavascript内のオブジェクト{}に記述するか、metadata.jsonファイルに保存する必要があります。 JavaScriptオブジェクトアプローチを見ていきます。

const metadata = {
name: 'My Collection',
description: 'This is a Collection on Solana',
image: imageUri[0],
external_url: 'https://example.com',
properties: {
files: [
{
uri: imageUri[0],
type: 'image/jpeg',
},
],
category: 'image',
},
}

ここのフィールドには以下が含まれます:

フィールド説明
nameCollectionの名前。
descriptionCollectionの説明。
image以前アップロードしたimageUri(または画像のオンライン上の場所)に設定されます。
animation_urlアップロードしたanimation_url(またはビデオ/glbのオンライン上の場所)に設定されます。
external_url選択した外部アドレスにリンクします。通常はプロジェクトのウェブサイトです。
properties{uri: string, type: mimeType}[] arrayを取るfilesフィールドを含みます。また、imageaudiovideovfxhtmlに設定できるカテゴリフィールドも含みます
メタデータを作成したら、Collectionにアタッチするためのuriを取得するためにJSONファイルとしてアップロードする必要があります。これを行うには、UmiのuploadJson()関数を使用します:
// Umiの`uploadJson()`関数を呼び出してIrys経由でArweaveにメタデータをアップロード
const metadataUri = await umi.uploader.uploadJson(metadata).catch((err) => {
throw new Error(err)
})

この関数は、アップロード前にJavaScriptオブジェクトを自動的にJSONに変換します。 これで、エラーがスローされなければ、metadataUriにJSONファイルのURIが最終的に保存されているはずです。

Core Collectionのミント

ここから、@metaplex-foundation/mpl-coreパッケージのcreateCollection関数を使用してCore NFT Assetを作成できます。

const collection = generateSigner(umi)
const tx = await createCollection(umi, {
collection,
name: 'My Collection',
uri: metadataUri,
}).sendAndConfirm(umi)
const signature = base58.deserialize(tx.signature)[0]

そして、以下のように詳細をログ出力します:

// 署名とトランザクションとNFTへのリンクをログ出力
console.log('\nCollection Created')
console.log('View Transaction on Solana Explorer')
console.log(`https://explorer.solana.com/tx/${signature}?cluster=devnet`)
console.log('\n')
console.log('View Collection on Metaplex Explorer')
console.log(`https://core.metaplex.com/explorer/${collection.publicKey}?env=devnet`)

追加アクション

続ける前に、FreezeDelegateプラグインやAppData外部プラグインなど、プラグインや外部プラグインがすでに含まれたコレクションを作成したい場合はどうすればよいでしょうか?以下にその方法を示します。 createCollection()命令は、pluginsフィールドを通じて通常のプラグインと外部プラグインの両方の追加をサポートしています。特定のプラグインに必要なすべてのフィールドを簡単に追加するだけで、すべてが命令によって処理されます。 以下はその方法の例です:

const collection = generateSigner(umi)
const tx = await createCollection(umi, {
collection: collection,
name: 'My Collection',
uri: 'https://example.com/my-collection.json',
plugins: [
{
type: "PermanentFreezeDelegate",
frozen: true,
authority: { type: "UpdateAuthority"}
},
{
type: "AppData",
dataAuthority: { type: "UpdateAuthority"},
schema: ExternalPluginAdapterSchema.Binary,
}
]
}).sendAndConfirm(umi)
const signature = base58.deserialize(tx.signature)[0]

注意: 使用するフィールドとプラグインがわからない場合は、ドキュメントを参照してください!