環境構築をする
💠 希少性を備えたジェネレーティブ NFT アートを作成する
Cryptopunks(クリプトパンクス)や Bored Ape Yacht Club(BAYC:ボアードエイプ・ヨットクラブ)などのNFTプロジェクトを知っていますか?
これらのプロジェクトは、数億ドルの収益を生み出し、所有者の一部は億万長者となっています。
Cryptopunks(クリプトパンクス)。
Bored Ape Yacht Club(BAYC:ボアードエイプ・ヨットクラブ)。
これらは、数量が限られたアバターのコレクションです。
各アバターは一意(ユニーク)であり、一連の特徴(肌の色、髪型など)を持っています。
さまざまな特徴を画像として作成した後、コードよってそれらを組み合わせ生成する NFT のことを Generative Art NFT と呼びます。
今回のレッスンでは環境構築をした後、CryptopunksやBAYCのような希少性を備えたGenerative ArtのNFTコレクションを作成する方法を学びます。
✍️: NFTに関する詳しい説明は、こちら をご覧ください。
💻 Python と pip をインストールする
🤩: 注意 このレッスンを進めるのに、Python やその他のプログラミング言語を知る必要はありません。
まず、こちら のWebサイトを参考に、最新版のPython3をダウンロードしてください。
ダウンロードが完了したら、ターミナルで下記を行して、Python3のバージョンを確認してください。
// Python のバージョンを確認
python3 - V;
下記のようにターミナルに出力されていれば、Pythonのダウンロードは成功です。
Python 3.10.2
- 最新のバージョンでない場合は、
warning
が表示されるので、指示に従って、Python3を最新版に更新しましょう。
次に、ターミナルで下記を行して、pipのバージョンを確認してください。
// pip のバージョンを確認
python3 -m pip list
下記のようにターミナルに出力されていれば、pipのダウンロードは成功です。
Package Version
---------- ---------
certifi 2021.10.8
pip 22.0.3
setuptools 58.1.0
- 最新のバージョンでない場合は、
warning
が表示されるので、指示に従って、pipを最新版に更新しましょう。
最新版に更新する必要がある方は下のコマンドを実行してみてください。
python -m pip install --upgrade pip
次に、ターミナルで下記を実行して、Generative Artを生成する際に使用するライブラリをインストールしてください。
pip install Pillow pandas progressbar2
この処理により、generative-nft-library
ライブラリを動かすのに必要な下記3つのPython3パッケージがあなたの環境にインストールされます。
-
Pillow: 画像処理ライブラリで、特徴的な画像を合成するのに役立ちます。
-
Pandas: データ解析ライブラリで、画像のメタデータの生成と保存を支援します。
-
Progressbar: 画像生成の進捗状況を表示するライブラリです。
まず、node
/ yarn
を取得する必要があります。お持ちでない場合は、こちらにアクセスしてください。
node v16
をインストールすることを推奨しています。
それでは本プロジェクトで使用するフォルダーを作成してきましょう。作業を始めるディレクトリに移動したら、次のコマンドを実行します。
🍽 Git リポジトリをあなたの GitHub にフォークする
まだGitHubのアカウントをお持ちでない方は、こちら の手順に沿ってアカウントを作成してください。
GitHubのアカウントをお持ちの方は、下記の手順に沿ってプロジェクトの基盤となるリポジトリをあなたのGitHubにフォークしましょう。
- こちらからunchain-tech/ETH-NFT-Collectionリポジトリにアクセスをして、ページ右上の
Fork
ボタンをクリックします。
- Create a new forkページが開くので、「Copy the
main
branch only」という項目にチェックが入っていることを確認します。
設定が完了したらCreate fork
ボタンをクリックします。あなたのGitHubアカウントにPolygon-Generative-NFT
リポジトリのフォークが作成されたことを確認してください。
それでは、フォークしたリポジトリをローカル環境にクローンしましょう。
まず、下図のように、Code
ボタンをクリックしてSSH
を選択し、Gitリンクをコピーしましょう。
ターミナル上で作業を行う任意のディレクトリに移動し、先ほどコピーしたリンクを用いて下記を実行してください。
git clone コピーした_github_リンク
無事に複製されたらローカル開発環境の準備は完了です。
🔍 フォルダ構成を確認する
実装に入る前に、フォルダ構成を確認しておきましょう。クローンしたスタータープロジェクトは下記のようになっているはずです。
Polygon-Generative-NFT
├── .git/
├── .gitignore
├── LICENSE
├── README.md
├── package.json
├── packages/
│ ├── client/
│ └── contract/
│ └── library/
└── yarn.lock
スタータープロジェクトは、モノレポ構成となっています。モノレポとは、コントラクトとクライアント(またはその他構成要素)の全コードをまとめて1つのリポジトリで管理する方法です。
packagesディレクトリの中には、client
とcontract
とlibrary
という3つのディレクトリがあります。
package.json
ファイルの内容を確認してみましょう。
モノレポを作成するにあたり、パッケージマネージャーの機能であるWorkspacesを利用しています。
workspacesの定義をしている部分は以下になります。
"workspaces": {
"packages": [
"packages/*"
]
},
この機能により、yarn installを一度だけ実行すれば、すべてのパッケージ(今回はコントラクトのパッケージとクライアントのパッケージ)を一度にインストールできるようになります。
ターミナル上でPolygon-Generative-NFT
ディレクトリ下に移動して下記を実行しましょう。
yarn install
yarn
コマンドを実行することで、JavaScriptライブラリのインストールが行われます。
📺 フロントエンドの動きを確認する
次に、下記を実行してみましょ う。
yarn client start
あなたのローカル環境で、Webサイトのフロントエンドが立ち上がりましたか?
例)ローカル環境で表示されているWebサイト
上記のような形でフロントエンドが確認できれば成功です。
これからフロントエンドの表示を確認したい時は、ターミナルに向かい、Polygon-Generative-NFT
ディレクトリ上で、yarn client start
を実行します。これからも必要となる作業ですので、よく覚えておいてください。
ターミナルを閉じるときは、以下のコマンドが使えます ✍️
- Mac:
ctrl + c
- Windows:
ctrl + shift + w
👏 コントラクトを作成する準備をする
本プロジェクトではコントラクトを作成する際にHardhat
というフレームワークを使用します。
packages/contract
ディレクトリにいることを確認し、次のコマンドを 実行します。
npx hardhat init
hardhat
がターミナル上で立ち上がったら、それぞれの質問を以下のように答えていきます。
・What do you want to do? →「Create a JavaScript project」を選択
・Hardhat project root: →「'Enter'を押す」 (自動で現在いるディレクトリが設定されます。)
・Do you want to add a .gitignore? (Y/n) → 「y」
(例)
$ npx hardhat init
888 888 888 888 888
888 888 888 888 888
888 888 888 888 888
8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
888 888 "88b 888P" d88" 888 888 "88b "88b 888
888 888 .d888888 888 888 888 888 888 .d888888 888
888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888
👷 Welcome to Hardhat v2.13.0 👷
✔ What do you want to do? · Create a JavaScript project
✔ Hardhat project root: · /Polygon-Generative-NFT/packages/contract
✔ Do you want to add a .gitignore? (Y/n) · y
✨ Project created ✨
See the README.md file for some example tasks you can run
Give Hardhat a star on Github if you're enjoying it! 💞✨
https://github.com/NomicFoundation/hardhat
⚠️: 注意
Windows で Git Bash を使用してハードハットをインストールしている場合、このステップ (HH1) でエラーが発生する可能性があります。問題が発生した場合は、WindowsCMD(コマンドプロンプト)を使用して HardHat のインストールを実行してみてください。
この段階で、フォルダー構造は下記のようになっていることを確認してください。
Polygon-Generative-NFT
├── .gitignore
├── package.json
└── packages/
├── client/
├── library/
└── contract/
+ ├── .gitignore
+ ├── README.md
+ ├── contracts/
+ ├── hardhat.config.js
├── package.json
+ ├── scripts/
+ └── test/
次に、安全なスマートコントラクトを開発するために使用されるライブラリ OpenZeppelin と秘密鍵などのファイルを隠すためにdotenvというパッケージを追加します。
packages/contract
ディレクトリにいることを確認し、以下のコマンドを実行してください。
yarn add @openzeppelin/contracts@^4.8.2 dotenv@^16.0.3
OpenZeppelin はイーサリアムネットワーク上で安全なスマートコントラクトを実装するためのフレームワークです。
OpenZeppelinには非常に多くの機能が実装されておりインポートするだけで安全にその機能を使うことができます。
dotenv
モジュールに関する詳しい説明は、こちらを参照してください。
それでは、packages/contract
ディレクトリ内のpackage.json
ファイルを更新しましょう。下記のように"private": true,
の下に"scripts":{...}
を追加してください。よく利用するコマンドを設定しておきます。
{
"name": "contract",
"version": "1.0.0",
"private": true,
"scripts": {
"run:script": "npx hardhat run scripts/run.js",
"deploy": "npx hardhat run scripts/deploy.js --network sepolia",
"test": "npx hardhat test"
},
"devDependencies": {
⭐️ 実行する
すべてが機能していることを確認するには、以下を実行します。
yarn test
次のように表示されます。
Lock
Deployment
✔ Should set the right unlockTime (743ms)
✔ Should set the right owner
✔ Should receive and store the funds to lock
✔ Should fail if the unlockTime is not in the future
Withdrawals
Validations
✔ Should revert with the right error if called too soon
✔ Should revert with the right error if called from another account
✔ Shouldn't fail if the unlockTime has arrived and the owner calls it
Events
✔ Should emit an event on withdrawals
Transfers
✔ Should transfer the funds to the owner
9 passing (846ms)
ターミナル上でls
と入力してみて、下記のフォルダーとファイルが表示されていたら成功です。
README.md cache hardhat.config.js package.json test
artifacts contracts node_modules scripts
ここまできたら、フォルダーの中身を整理しましょう。
まず、test
の下のファイルLock.js
を削除します。
-
test
フォルダーに移動:cd test
-
Lock.js
を削除:rm Lock.js
次に、上記の手順を参考にしてcontracts
の下のLock.sol
を削除してください。実際のフォルダは削除しないように注意しましょう。