😎
DockerでHardhatの開発環境を作る
はじめに
Dappsを作りたくなったらローカルにブロックチェーンとスマートコントラクトを実行できる環境が欲しくなると思います。ローカルでブロックチェーンを動かし、スマートコントラクトのテスト等ができるHardhatの環境をDockerで構築してみます。
ファイル構成
hardhat
├ docker
│ └ Dockerfile
└ src
docker-compose.yml
Dockerfile
FROM node:21-bullseye
RUN apt update && apt -y upgrade
WORKDIR hardhat
RUN npm install -g npm
RUN npm install --save-dev hardhat
docker-compose.yml
version: "3.8"
services:
hardhat:
container_name: hhat
build: ./hardhat/docker
ports:
- 8545:8545
volumes:
- ./hardhat/src:/hardhat
tty: true
environment:
- TZ=Asia/Tokyo
volumes:
node_modules
「volumes」の指定は、後工程で作成されるnode_modulesディレクトリをボリュームマウントへ変更するためのものです。詳しくは以下を参照ください。
コンテナ起動
docker-compose up -d
Hardhatの初期化
docker-compose exec hardhat /bin/bash
以下はコンテナ内で実行します
npx hardhat init
ウィザードが表示されるので要件に応じて選択してください。以下は例です。
✔ What do you want to do? · Create a TypeScript project
✔ Hardhat project root: · /hardhat
✔ Do you want to add a .gitignore? (Y/n) · y
✖ Help us improve Hardhat with anonymous crash reports & basic usage data? (Y/n) · y
✔ Do you want to install this sample project's dependencies with npm (hardhat @nomicfoundation/hardhat-toolbox)? (Y/n) · y
TypeScriptでプロジェクトを作成すると、アカウントを一覧表示するコマンドがないようなので作成します。hardhat.config.ts
を以下のように編集します。
import { HardhatUserConfig, task } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import { HardhatRuntimeEnvironment } from "hardhat/types";
const accounts = async (args: string, hre: HardhatRuntimeEnvironment) => {
const accounts = await hre.ethers.getSigners();
for (const account of accounts) {
console.log(account.address);
}
};
task("accounts", "Show the list of accounts", accounts);
const config: HardhatUserConfig = {
solidity: "0.8.17",
};
export default config;
こちらは以下を参考にしています。
まとめ
以上でhardhatの動作する環境自体は準備できました。スマートコントラクトを作成したり、ローカルノードを立ち上げたりするのは別で取り上げようと思います。
Discussion