[Solidityのはじめ方] Part21: Hardhatを使ったローカルテスト環境構築

Solidity

スマートコントラクト開発を効率化しよう!

これまでのステップでSolidityの基本からセキュリティまで学んできましたね!Step 6では、いよいよスマートコントラクトのテストとデプロイに焦点を当てます。今回は、開発フレームワークの代表格であるHardhatを使って、ローカルでのテスト環境を構築する方法を学びましょう。

Hardhatを使うことで、コントラクトのコンパイル、テスト、デプロイ、デバッグといった一連の開発フローをスムーズに進めることができます。特にローカル環境でのテストは、迅速なフィードバックループを実現し、開発効率を大幅に向上させます🚀。

Hardhatは、Ethereumのスマートコントラクト開発のための柔軟で拡張可能な開発環境です。主に以下の機能を提供します。

  • ローカルEthereumネットワーク: 実際のブロックチェーンを使わずに、開発マシン上でテストやデバッグを実行できるHardhat Networkを提供します。
  • コントラクトのコンパイル: SolidityコードをEVM(Ethereum Virtual Machine)が理解できるバイトコードにコンパイルします。
  • 自動テスト: JavaScriptやTypeScriptを使ってスマートコントラクトのテストを記述し、実行できます。
  • デプロイスクリプト: スマートコントラクトを様々なネットワーク(ローカル、テストネット、メインネット)にデプロイするためのスクリプトを作成・実行できます。
  • 豊富なプラグイン: Ethers.js連携、Waffleテスティング、ガス代レポートなど、多くの便利なプラグインが利用可能です。

Hardhatは、開発プロセス全体をサポートし、より堅牢で安全なスマートコントラクトを構築するのに役立ちます。

Hardhatを使用するには、Node.js(とそれに付属するnpmまたはyarn)がインストールされている必要があります。まだインストールしていない場合は、公式サイトからダウンロードしてインストールしてください。

Node.js 公式サイト

それでは、実際にHardhatプロジェクトを作成してみましょう。

  1. プロジェクト用ディレクトリの作成:

    まず、プロジェクト用の新しいディレクトリを作成し、そのディレクトリに移動します。

    mkdir my-hardhat-project
    cd my-hardhat-project
  2. npmプロジェクトの初期化:

    次に、npmプロジェクトを初期化します。これによりpackage.jsonファイルが作成されます。

    npm init -y
  3. Hardhatのインストール:

    Hardhatをプロジェクトの開発依存関係としてインストールします。

    npm install --save-dev hardhat

    同時に、Hardhatがよく利用するプラグインやライブラリもインストールしておくと便利です。

    npm install --save-dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v5 @ethersproject/abi @ethersproject/providers

    @nomicfoundation/hardhat-toolbox は、これらの多くをまとめてインストールしてくれる便利なパッケージです。

    npm install --save-dev @nomicfoundation/hardhat-toolbox

    上記コマンドで、テストや開発に必要な基本的なツール群(Ethers.js, Chai, Mochaなど)が一度にインストールされます。

  4. Hardhatプロジェクトの作成:

    以下のコマンドを実行して、Hardhatプロジェクトを対話的に作成します。

    npx hardhat

    実行すると、いくつかの質問が表示されます。

    • What do you want to do?Create a JavaScript project または Create a TypeScript project を選択します(ここではJavaScriptを選択した前提で進めます)。
    • Hardhat project root: → 通常はデフォルト(現在のディレクトリ)のままでEnterを押します。
    • Do you want to add a .gitignore?yes を選択するのがおすすめです。
    • Do you want to install this sample project's dependencies with npm (@nomicfoundation/hardhat-toolbox)? → 既にインストール済み、またはこれからインストールする場合はどちらでも構いませんが、yes を選ぶのが一般的です。

    完了すると、プロジェクトに必要なファイルやディレクトリが自動生成されます 🎉。

npx hardhat コマンドで生成されたプロジェクトは、一般的に以下のような構造になっています。

my-hardhat-project/
├── contracts/          # Solidityコントラクトファイル (.sol) を置く場所
│   └── Lock.sol        # サンプルコントラクト
├── scripts/            # デプロイや対話用スクリプト (.js/.ts) を置く場所
│   └── deploy.js       # サンプルデプロイスクリプト
├── test/               # テストスクリプト (.js/.ts) を置く場所
│   └── Lock.js         # サンプルテストスクリプト
├── hardhat.config.js   # Hardhatの設定ファイル
├── package.json        # プロジェクト情報と依存関係
├── node_modules/       # インストールされたnpmパッケージ
└── .gitignore          # Gitで無視するファイル・ディレクトリ指定
ファイル/ディレクトリ説明
contracts/作成するスマートコントラクトのSolidityソースファイル(.sol)を格納します。
scripts/コントラクトのデプロイや、デプロイ後のコントラクトと対話するためのスクリプト(JavaScriptまたはTypeScript)を格納します。
test/コントラクトの機能を検証するためのテストコード(JavaScriptまたはTypeScript)を格納します。MochaやChaiといったテストフレームワークがよく使われます。
hardhat.config.jsHardhatの設定ファイルです。Solidityのバージョン、使用するネットワーク(ローカル、テストネット、メインネット)、プラグインの設定などを行います。

Hardhatには、Hardhat Networkと呼ばれるローカル開発用のEthereumネットワークが組み込まれています。これにより、実際のテストネットやメインネットに接続せずに、素早くコントラクトのテストやデバッグを行うことができます。

Hardhat Networkは主に2つの方法で利用されます。

  1. テスト/スクリプト実行時に自動起動:

    npx hardhat testnpx hardhat run <script> を実行すると、Hardhatは自動的にHardhat Networkの新しいインスタンスを起動し、処理が終わると破棄します。設定ファイルでデフォルトネットワークがHardhat Networkになっている場合、この挙動になります。

    # 設定されたテストをHardhat Network上で実行
    npx hardhat test
    
    # scripts/deploy.js をHardhat Network上で実行
    npx hardhat run scripts/deploy.js
  2. スタンドアロンノードとして起動:

    Hardhat Networkを、Ganacheのように独立したノードとして起動することもできます。これにより、MetaMaskなどのウォレットを接続して、フロントエンドアプリケーションから対話する、といった使い方が可能になります。

    npx hardhat node

    このコマンドを実行すると、ローカルマシン上でJSON-RPCエンドポイント(デフォルトは http://127.0.0.1:8545/)が起動します。また、テスト用に十分なEtherを持つアカウントがいくつか自動生成され、その情報(アドレスと秘密鍵)がコンソールに表示されます。

    注意: npx hardhat node で表示されるアカウントと秘密鍵は開発用です。絶対に実際の資金を扱わないでください。

ローカルでのテストには、このHardhat Networkが非常に便利です。コンパイルからテスト実行までの流れを体験してみましょう。

# コントラクトをコンパイル
npx hardhat compile

# テストを実行 (自動的にHardhat Networkが使われる)
npx hardhat test

サンプルプロジェクトには基本的なコントラクト (contracts/Lock.sol) とそのテスト (test/Lock.js) が含まれているので、これらのコマンドを実行するだけで、Hardhatによる開発フローの一部を体験できます。

今回は、Solidity開発を効率化するための強力なツールであるHardhatを導入し、ローカルテスト環境を構築する方法を学びました。

  • Hardhatはコントラクト開発のライフサイクル(コンパイル、テスト、デプロイ)をサポートするフレームワークであること。
  • Node.jsとnpmを使ってHardhatプロジェクトをセットアップする手順。
  • プロジェクトの基本的なディレクトリ構造(contracts, scripts, test)。
  • ローカル開発用のHardhat Networkの起動方法と使い方。
  • 基本的なHardhatコマンド(compile, test, node)。

これで、スマートコントラクトをローカルでテストするための準備が整いました!

次のステップ ▶️ 単体テストの書き方(Mocha/Chai) では、今回セットアップしたHardhat環境を使って、実際にスマートコントラクトの単体テストを書いていく方法を詳しく見ていきます。お楽しみに!

コメント

タイトルとURLをコピーしました