hardhat について
hardhatはEthereum開発者向けのSolidity開発環境です。ネットワーク設定やプラグインに対応し、コントラクトのコンパイル、テスト、デプロイを行えます。
主な機能
- 01Solidityコントラクトのコンパイル
- 02Mochaによるテスト実行
- 03ネットワークへのデプロイ
- 04メインネットのフォークでテスト
- 05プラグインによる拡張
活用シーン
- 01Solidityプロジェクトのコンパイル
- 02ローカルブロックチェーンでのテスト
- 03テストネットへのコントラクトデプロイ
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ alphaonedev/ openclaw-graph --skill hardhatインストール後、Claude Code で/hardhatを入力して読み込まれたか確認します。
詳細
hardhat
目的
Hardhatは、Solidityスマートコントラクトのコンパイル、テスト、デプロイを効率的に行えるEthereum開発環境です。プロフェッショナルなブロックチェーン開発者向けのワークフローを自動化します。
使用する場面
ローカルブロックチェーンシミュレーター、自動テスト、Goerliなどのテストネットへのデプロイが必要なEthereumスマートコントラクト開発には、Hardhatを使用してください。特に、デバッグやdAppsとの統合など、Solidityコードのコンパイルが必要なプロジェクトで活用してください。Ethereum以外のブロックチェーンや、単純なスクリプト作成には適していません。
主な機能
- コンパイラのバージョンをカスタマイズしてSolidityファイルをコンパイルできます(例:hardhat.config.jsで
solidity: "0.8.17"を指定)。 - MochaまたはHardhatのAPIを使ってユニットテストを実行でき、
expect(await contract.balance()).to.equal(100)のようなアサーションをサポートします。 - ethers.jsを使ってコントラクトをネットワークにデプロイでき、テスト用にメインネットをフォークする機能も組み込まれています。
- プラグイン(例:@nomiclabs/hardhat-ethers)で拡張し、ガスレポートなどの高度な機能を利用できます。
- 設定で複数のネットワークを扱えます。たとえば、RPC URLとaccounts配列を指定してGoerliを定義できます。
使用パターン
Hardhatプロジェクトをセットアップするには、新しいディレクトリでnpx hardhat initを実行し、Solidityファイルをcontractsフォルダーに、テストをtestフォルダーに追加します。ワークフローでは、まずネットワークとSolidityの設定をhardhat.config.jsで行ってください。デプロイにはスクリプトを使用します。scriptsにethersをインポートしてコントラクトをデプロイするJSファイルを作成してください。コンパイル、テストの実行、デプロイの順に反復してテストします。スクリプトでは、process.env.PRIVATE_KEYのような環境変数を使い、機密データを必ず管理してください。
主なコマンド/API
- コントラクトをコンパイル:
npx hardhat compile --forceを実行すると、キャッシュを無視してすべてのファイルを再ビルドします。 - テストを実行:
npx hardhat test test/MyContract.jsを実行すると、特定のテストをMochaで実行します。 - ネットワークにデプロイ:
npx hardhat run scripts/deploy.js --network goerliを実行します。deploy.jsは次のようになります。const hre = require("hardhat"); async function main() { const MyContract = await hre.ethers.deployContract("MyContract"); await MyContract.waitForDeployment(); } main(); - ネットワーク情報を表示:
npx hardhat nodeを実行すると、テスト用のローカルブロックチェーンが起動します。 - APIの使用:スクリプトで
hre.ethers.getSigners()を使うとアカウントを取得できます。設定にはhardhat.config.js形式を使用します。module.exports = { networks: { goerli: { url: process.env.GOERLI_RPC_URL, accounts: [process.env.PRIVATE_KEY] } }, solidity: "0.8.17" }; - 環境変数を設定:コマンドの実行前に、
export PRIVATE_KEY=0xYourPrivateKeyのようにキーをエクスポートします。
統合に関する注意事項
ethers.jsとHardhatを統合するには、@nomiclabs/hardhat-ethersをインストールし、ウォレットとプロバイダーの管理に使うスクリプトでインポートします。CI/CDではGitHub Actionsと組み合わせ、ワークフローのYAMLにnpx hardhat testのようなステップを追加してください。高度なテストにはFoundry、マイグレーションスクリプトにはTruffleなどのツールを組み合わせます。InfuraまたはAlchemyを使用する場合は、環境変数でRPC URLを設定します(例:export GOERLI_RPC_URL=https://goerli.infura.io/v3/$INFURA_API_KEY)。互換性を確保するため、プロジェクト間でSolidityのバージョンを一致させてください。
エラー処理
コンパイルエラーが発生した場合は、コンソール出力でSolidityの問題を確認します。例:「ParserError: Expected token」の場合は、.solファイルの構文を修正してください。ネットワークエラーには、スクリプトでtry-catchを使用します。
try { await contract.deploy(); } catch (error) { console.error("Deployment failed:", error.message); process.exit(1); }
よくある問題:秘密鍵が無効な場合は、ethers.utils.isHexString(process.env.PRIVATE_KEY)で形式を確認してください。RPCの失敗時はURLを検証し、再試行を追加します。エラーチェックを行いながらhre.network.provider.send("eth_getBalance", [address])を使用してください。デバッグに備えて、エラーは必ずタイムスタンプとともに記録してください。
具体的な使用例
-
例:シンプルなコントラクトをセットアップしてコンパイルする
プロジェクトを作成します。npx hardhat initを実行し、次の内容でcontracts/Greeter.solを追加します。pragma solidity ^0.8.0; contract Greeter { string public greeting; constructor() { greeting = "Hello"; } }次に、
npx hardhat compileを実行してコンパイルします。これにより、artifacts/にアーティファクトが出力されます。 -
例:Goerliテストネットにデプロイする
scripts/deploy.jsに次のように記述します。const hre = require("hardhat"); async function main() { const Greeter = await hre.ethers.deployContract("Greeter"); console.log("Deployed to:", await Greeter.getAddress()); } main();環境変数を設定します:
export PRIVATE_KEY=0xYourKey && export GOERLI_RPC_URL=https://goerli.infura.io/v3/your-key。次を実行します:npx hardhat run scripts/deploy.js --network goerli。
グラフの関連性
- 関連するタグ:ethereum、solidity、smart-contracts
- クラスターの一部:blockchain
- 埋め込みによる関連:development、testing、deployment