---
title: "ethers.jsでNFTをミントする方法"
description: "ethers.jsを使ったNFTのミント方法をステップバイステップで解説します。独自のデジタルアセットを簡単に作成し、ブロックチェーンの世界に参加しましょう。"
---

# ethers.jsでNFTをミントする方法

このチュートリアルでは、Ethersを使用してEthereumブロックチェーン上でNFTをミントする方法を、[ethers.js](https://www.alchemy.com/dapps/ethers-js)ライブラリと、Part I: How to Create an NFTで作成したスマートコントラクトを使って説明します。基本的なテストのセットアップについても取り上げます。

_本ガイドの完了までの推定時間: 約10分_

また、NFTチュートリアルシリーズの他の記事もぜひご覧ください。

- 🌟  [How to mint an NFT using Web3.js](https://www.alchemy.com/blog/how-to-mint-an-nft-using-web3-js)
- 👛  [How to view your NFT in your mobile wallet](https://www.alchemy.com/blog/how-to-view-your-nft-in-your-mobile-wallet)
- 💸  [How to set a price on an NFT](https://www.alchemy.com/blog/how-to-set-a-price-on-an-nft)
- 💻  [NFT minter tutorial: How to create a full stack DApp](https://www.alchemy.com/blog/nft-minter-tutorial-how-to-create-a-full-stack-dapp)

[別のチュートリアル](https://www.alchemy.com/docs/reference/nft-api-overview)では、Web3と[OpenZeppelin contracts library](https://docs.openzeppelin.com/contracts/erc721)を使ってNFTをミントする方法を学びました。今回の演習では、[OpenZeppelin library](https://docs.openzeppelin.com/contracts/4.x/erc721)のバージョン4と、Web3の代わりに[Ethers.js](https://docs.ethers.io/)というEthereumライブラリを使った別の実装方法を説明します。

また、[Hardhat](https://www.alchemy.com/dapps/hardhat)と[Waffle](https://www.alchemy.com/dapps/waffle)を使ったコントラクトのテストの基本についても取り上げます。このチュートリアルではYarnを使用していますが、好みに応じてnpm/npxを使用しても構いません。

最後に、TypeScriptを使用します。これについてはドキュメントが比較的充実しているため、ここでは取り上げません。

その他の点については、このチュートリアルはWeb3版と同じ手順で進みます。PinataやIPFSなどのツールも含めて同様です。

## 簡単なおさらい

おさらいですが、「NFTをミントする」とは、あなたのERC721トークンの一意のインスタンスをブロックチェーン上に公開する行為を指します。このチュートリアルは、NFTチュートリアルシリーズの[Part IでRopstenネットワークにスマートコントラクトをデプロイ済み](https://www.alchemy.com//blog/how-to-create-an-nft)であることを前提としています。これにはEthersのインストールも含まれます。

## Step 1: Solidityコントラクトを作成する

[OpenZeppelin](https://www.alchemy.com/dapps/openzeppelin)は、安全なスマートコントラクト開発のためのライブラリです。[ERC20](https://www.alchemy.com/overviews/erc20-solidity)やERC721などの一般的な規格の実装をそのまま継承し、必要に応じて動作を拡張するだけで済みます。このファイルはcontracts/MyNFT.solに配置します。

## Step 2: コントラクトのデプロイとNFTのミントを行うHardhatタスクを作成する

以下の内容でtasks/nft.tsファイルを作成します。

## Step 3: ヘルパーを作成する

タスクの中でいくつかのヘルパーをインポートしたことに気づいたと思います。以下がそれらです。

`contract.ts`

`env.ts`

`provider.ts`

最後のgetProvider\(\)関数はropstenネットワークを使用している点に注意してください。この引数は省略可能で、省略した場合は"homestead"がデフォルトとなります。ここではもちろんAlchemyを使用していますが、他にも[サポートされている選択肢](https://docs.ethers.io/v5/api/providers/#providers-getDefaultProvider)がいくつかあります。

`wallet.ts`

## Step 4: テストを作成する

testディレクトリ内に、以下のファイルを作成します。なお、これらのテストは網羅的なものではありません。OpenZeppelinライブラリが提供するERC721の機能の一部のみをテストしており、より堅牢なテストを構築するための基礎を提供することを目的としています。

`test/MyNFT.spec.ts (unit tests)`

`tasks.spec.ts (integration specs)`

`test-helpers.ts` これには、sinon、chai、sinon-chaiを含む、インポートされたNPMライブラリが必要であることに注意してください。`sinon.restore()`の呼び出しは、スタブの使用のために必要です。

## Step 5: 設定

こちらが、かなりシンプルな`hardhat.config.ts`です。

テストを実行していない場合にのみdotenvを呼び出す条件分岐に注目してください。本番環境ではこれを実行したくない場合もあるかもしれませんが、.envファイルが存在しない場合、dotenvは何も出力せずに無視するので安心してください。

## タスクを実行する

これらのファイルを配置したので、hardhatを実行してタスクを確認できます（簡潔にするため、組み込みタスクは除いています）。

タスクの引数を忘れてしまった場合でも問題ありません。

## テストを実行する

テストを実行するには、`hardhat test`を実行します。

## まとめ

このチュートリアルでは、[Solidity](https://www.alchemy.com/overviews/solidity)をベースとした、十分にテストされたNFTインフラの基盤を作成しました。**waffle.provider.getWallets\(\)**で提供されるウォレットは、テストトランザクションの資金として利用できる[eth残高があらかじめ用意された](https://hardhat.org/hardhat-network/reference/#initial-state)、ローカルの仮の[Hardhat Network](https://hardhat.org/hardhat-network/)アカウントにリンクしています。
