Hardhatとは?
Hardhatは、Ethereumスマートコントラクトの作成、コンパイル、テスト、デバッグ、デプロイ、検証に使用されるオープンソースの開発環境です。Ethereum Virtual Machine(一般にEVMと呼ばれます)上で動作するアプリケーションを構築するための、体系的な作業環境を暗号資産開発者に提供します。Hardhatは、ブロックチェーン、暗号資産、ウォレット、トークン、スマートコントラクトのプログラミング言語ではありません。コンパイラー、テストランナー、シミュレーション用ブロックチェーンネットワーク、デプロイシステム、ライブラリ、スクリプト、プラグインを連携させる開発者向けツールです。Hardhatの公式ドキュメントでは、HardhatをEthereumソフトウェアの作成、テスト、デバッグ、デプロイに使える柔軟で拡張性の高い環境と説明しています。
公開ブロックチェーンにトランザクションを送信すると間違いが永久に残り、コストが高くなる可能性があるため、開発者はHardhatを使ってローカルでコントラクトをテストできます。Hardhatは、Ethereum開発コミュニティ向けにNomic Foundationが保守しています。Hardhatの現行バージョン
Hardhat 3は、開発環境の現行メジャーバージョンです。2026年7月13日時点で、最新のタグ付きリリースは2026年7月2日に公開されたHardhat 3.9.1です。
現行のリリースラインには、再設計されたプラグインシステム、Solidityネイティブテスト、組み込みコードカバレッジ、マルチチェーンシミュレーション、型付きアーティファクト、ビルドプロファイル、新しいネットワークマネージャーが含まれます。古いプロジェクトを保守している開発者は、アップグレードする前に、使用中のプラグインや設定ファイルがHardhat 3に対応しているか確認してください。将来のメジャーリリースを自動的にすべて受け入れるのではなく、プロジェクトの開発用依存関係のバージョンを固定する必要があります。暗号資産開発でHardhatが使われる理由
スマートコントラクトは、トークン、プロトコルの財務資産、レンディングポジション、ステーキングシステム、分散型ガバナンス、その他の価値ある暗号資産を管理することがあります。プログラミング上の誤りによって、資金が凍結されたり、不正な送金が可能になったり、残高が誤って計算されたり、悪用可能な経済的条件が生じたりする可能性があります。Hardhatは、コントラクトを稼働中のブロックチェーンにデプロイする前に、開発者が問題を発見できるよう支援します。Solidityのソースコードのコンパイル、自動テストの実行、トランザクションのシミュレーション、実行トレースの表示、ガス使用量の見積もり、再現可能な手順によるコントラクトのデプロイが可能です。スクリプトや継続的インテグレーションシステムを通じて、プロジェクト構成を標準化し、作業を自動化する際にも役立ちます。Hardhatは開発プロセスを改善しますが、スマートコントラクトの安全性を保証するものではありません。本番環境の暗号資産アプリケーションでは、独立したレビュー、脅威モデリング、テスト、監視、慎重なアクセス制御も引き続き必要です。Hardhat 3のアーキテクチャ
Hardhat 3では、多くの機能がコアランタイムと任意のプラグインに分かれています。コア環境は、プロジェクト設定の読み込み、タスク管理、ブロックチェーン接続の作成、スクリプトやテストへの開発サービスの提供を行います。プラグインは、コントラクトライブラリ、アサーションツール、デプロイ機能、検証サービス、テストランナー、ハードウェア署名のサポート、その他の機能を追加できます。このモジュール式設計により、プロジェクトで実際に必要なツールだけをインストールできます。その一方で、使用するプラグインの組み合わせによって、2つのHardhatプロジェクトの動作が異なる場合があります。開発者は必要なプラグインをすべて文書化し、プロジェクトのパッケージ設定で互換性のあるバージョンを固定する必要があります。Hardhat Runtime Environment
Hardhat Runtime Environmentは、スクリプト、タスク、プラグインがHardhatの機能にアクセスするための中核となるオブジェクトです。一般にHREと略されます。HREは、設定データ、ネットワーク接続、アーティファクト、プラグイン拡張、タスク関連の関数を提供できます。Hardhat 3では、プログラムから複数の独立したランタイム環境を作成できます。これは、高度なスクリプト、テストシステム、分離された設定や同時のネットワーク接続が必要なアプリケーションに便利です。Hardhat Runtime Environmentのドキュメントでは、ランタイムがプロジェクト設定とプラグイン、開発ワークフローをどのように結び付けるかを説明しています。
Hardhatプロジェクトの構成
一般的なHardhatプロジェクトは、プロジェクト設定ファイルと複数の開発用ディレクトリを含むnpmパッケージです。メインの設定ファイル名は通常、
プロジェクトには、Hardhat、プラグイン、ライブラリ、その他の開発用依存関係を記録する
Hardhatのインストール
Hardhatは通常、JavaScriptまたはTypeScriptプロジェクト内の開発用依存関係としてインストールします。現行の公式セットアップでは、Node.js 22.13.0以降が必要です。Node.jsの公式サポートポリシーでは、Hardhat 3がサポートするNode.jsのリリースラインを説明しています。
Hardhatの設定
Hardhatの設定ファイルでは、プロジェクトのコンパイル、テスト、接続、デプロイ方法を定義します。Solidityコンパイラのバージョン、オプティマイザーの設定、プラグイン、ネットワーク、アカウントソース、ビルドプロファイル、タスクオプションを指定できます。Hardhat 3の設定ファイルは、デフォルトでECMAScript Modulesを使用します。環境がサポートしていれば、スクリプトやテストでは他のモジュール形式も使用できます。コンパイラやオプティマイザーの設定が異なると、デプロイ済みのバイトコードも異なる可能性があるため、設定は慎重に確認してください。デプロイ済みコードを検証する際は、そのコードの生成に使用したものと同じコンパイラバージョンと設定を使う必要があります。設定変数と秘密情報
暗号資産開発プロジェクトでは、秘密鍵、リモートプロシージャコールのアドレス、その他の機密値が必要になることがあります。Hardhat 3では、タスクで実際に必要になったときだけ読み込まれる遅延設定変数をサポートしています。これらの値をソースリポジトリの外部に保存すると、誤って公開するリスクを減らせます。Hardhatの設定変数ガイドでは、外部ストレージシステムを通じた値の検証、書式設定、提供方法が説明されています。
Hardhatには、選択した値を暗号化して保存できる公式キーストアプラグインもあります。暗号化しても、脆弱なコンピューターや盗まれたパスワードが安全になるわけではありません。本番デプロイ用の鍵には、強力なアクセス制御、残高の制限、ハードウェア署名、マルチシグ承認、または慎重にレビューされた別の鍵管理方法を使用してください。Solidityコントラクトのコンパイル
HardhatはSolidityのソースコードをコンパイルし、EVM上で動作するバイトコードを生成します。コンパイルによって、一般にABIと呼ばれるアプリケーションバイナリーインターフェースも生成されます。ABIは、コントラクトから呼び出せる関数、イベント、エラー、パラメーター型を記述します。ウォレット、スクリプト、フロントエンドアプリケーション、その他のコントラクトは、ABI情報を使ってやり取りをエンコード、デコードします。複数のソースファイルで異なるバージョンが必要な場合、Hardhatでは1つのプロジェクト内で複数のSolidityコンパイラバージョンを使用できます。コンパイラの違いが増えるとレビューと検証が複雑になるため、不要なバージョンの混在は避けてください。デフォルト値を想定するのではなく、コンパイラを明示的に設定する必要があります。Hardhatのビルドアーティファクト
コンパイル後、Hardhatは各コントラクトに関する情報を含むアーティファクトを作成します。アーティファクトには、コントラクト名、ABI、作成用バイトコード、デプロイ済みバイトコード、ライブラリのリンク情報、ソース情報が含まれる場合があります。Hardhat 3はデフォルトで、型付きアーティファクト用のTypeScript宣言も生成します。型付きアーティファクトにより、実行前に開発ツールで誤った関数名、引数の型、コントラクトとのやり取りを検出しやすくなります。Hardhatのアーティファクト仕様では、コントラクトのアーティファクトとビルド情報の構造を説明しています。
アーティファクトは、信頼できるソースコードと再現可能なコンパイラ設定から生成する必要があります。コンパイラ設定、コントラクト名、依存関係が大きく変わった場合は、古いアーティファクトを削除してください。ビルドプロファイル
Hardhat 3では、ワークフローごとに異なるコンパイラ設定を定義するビルドプロファイルをサポートしています。開発プロファイルでは、コンパイルを高速化し、詳細なデバッグ情報を得ることを優先できます。本番プロファイルでは、デプロイに使用する予定のオプティマイザー設定を有効にできます。カバレッジプロファイルでは、実行されたコードパスを測定するためにバイトコードを変更する場合があります。ビルドプロファイルを使うと、同じ設定を何度も書き換える必要性を減らせます。ただし、各デプロイにどのプロファイルを使ったかをチーム内で明確にする必要があります。意図しないプロファイルでコントラクトをデプロイすると、バイトコード、ガス動作、検証結果が異なる可能性があります。シミュレーション用ブロックチェーンネットワーク
Hardhatには、開発とテストでローカル実行するシミュレーション用ネットワークが含まれています。シミュレーション用ネットワークでは、実際の暗号資産を使わずにコントラクトをデプロイし、トランザクションを送信できます。テスト用アカウントへの資金付与、ブロックの即時生成、タイムスタンプの変更、残高の変更、アカウントの偽装、状態のリセットが可能です。こうした機能により、公開ブロックチェーン上では再現が難しい、またはコストのかかる状況をテストできます。Hardhat 3は、Rustで記述されたEDRを基盤とするシミュレーションランタイムを使用します。このシミュレーション環境は、高速なテスト、詳細なエラー、実行トレース、管理されたブロックチェーン状態を目的として設計されています。ローカルシミュレーションは便利ですが、現実のネットワーク状況をすべて完全に再現できるわけではありません。マルチチェーンシミュレーション
Hardhat 3は、異なるEVM互換チェーン上での開発をサポートするよう設計されています。プロジェクトでは、動作が異なる複数のシミュレーション用ネットワークを設定できます。公式ドキュメントでは、Ethereum MainnetとOP Mainnetのファーストクラスのシミュレーションサポートが示されており、その他の互換環境向けには汎用チェーンタイプが利用できます。Hardhatのマルチチェーンドキュメントでは、チェーンタイプによってチェーン固有の動作をより正確に再現できると説明されています。
コントラクトをデプロイするすべてのネットワークについて、実際の実行ルールを使ってテストしてください。あるネットワーク設定で正しく動作したコントラクトでも、ガスルール、事前デプロイ、トランザクション形式が変わると、別の動作をする場合があります。Hardhat Network Manager
Hardhat Network Managerは、シミュレーション用および外部のブロックチェーンネットワークへの接続を管理します。Hardhat 3では、タスクやスクリプトから複数のネットワーク接続を同時に作成できます。クロスネットワークアプリケーション、ブリッジのテスト、デプロイ調整、一方のチェーンから読み取りながら別のチェーンに書き込むアプリケーションに便利です。設定内のネットワーク名は接続ラベルであり、想定したブロックチェーンに接続している証明ではありません。トランザクションに署名する前に、チェーンID、最新ブロック、アカウント残高、デプロイ先を確認してください。ネットワーク管理ガイドでは、Hardhatがシミュレーション用ネットワークやリモートJSON-RPCエンドポイントに接続する方法を説明しています。
ブロックチェーンネットワークのフォーク
ネットワークのフォーク機能を使うと、選択した公開ネットワークのブロックから、ローカルのHardhatシミュレーションにブロックチェーン状態をコピーできます。実際のネットワークを変更せずに、既存のコントラクト、残高、アカウント、ストレージとローカル環境でやり取りできます。フォークテストは、プロトコル連携、清算シナリオ、ガバナンス変更、トークンの動作、コントラクトのアップグレードのテストに役立ちます。再現可能な結果が重要な場合は、フォーク対象を特定のブロック番号に固定してください。最新ブロックを指定せずにテストすると、公開チェーンの状態の変化に伴い、結果が変わる可能性があります。リモートデータプロバイダーは、リクエストを制限したり、プロジェクトのアクティビティを記録したり、一時的に不完全な情報を返したりする場合もあります。フォークテストを、実際のアカウントや資産を管理する許可と混同してはいけません。Hardhatを使ったスマートコントラクトのテスト
自動テストはHardhatの最も重要な機能の1つです。Hardhat 3では、Solidityで直接記述するテストと、TypeScriptで記述する統合テストに対応しています。1つのプロジェクトで両方のテスト方法を併用できます。SolidityテストはEVM環境内で実行されるため、コントラクト単位の動作を集中的に確認するのに適しています。TypeScriptテストは、アプリケーションのワークフロー、複数のアカウント、オフチェーンロジック、外部データ、広範な連携動作のテストに適しています。Hardhat公式のテスト概要では、それぞれの方法の長所を説明しています。
優れたテストスイートでは、成功する操作、想定される失敗、アクセス制限、極端な入力、状態遷移、通常と異なるトランザクション順序を網羅する必要があります。Solidityテスト
Hardhatは、対応するディレクトリ構成やファイル名の規則に基づき、Solidityのテストファイルを認識します。公開テスト関数では、コントラクトのデプロイ、関数の呼び出し、状態の確認、想定条件が満たされない場合の失敗処理を行えます。Solidityテストでは、テスト環境を変更するチートコードを使用できます。チートコードを使うと、呼び出し元の変更、時間の経過、残高の変更、イベントの確認、リバートの確認、ストレージの調査が可能です。こうした制御により、長時間の待機や複雑な設定が必要な状況をテストしやすくなります。チートコードはシミュレーション用のテスト環境に作用するものであり、公開ブロックチェーンで一般ユーザーが利用できる関数ではありません。ファズテスト
ファズテストでは、生成された入力値を使ってコントラクト関数を繰り返し実行します。開発者が手動で記述した例では想定されていないエッジケースを発見できます。トークンの計算が一般的な値では正しく動作しても、ゼロ、最大整数、丸め境界、予期しない状態の組み合わせでは失敗することがあります。生成される値が意味のあるものになるよう、ファズテストでは現実的な前提条件を定める必要があります。ファズテストに合格しても、設定された入力やプロパティしか検証しないため、コントラクトの安全性が証明されるわけではありません。重要な不変条件は、テストシステムが常に維持すべき動作を認識できるよう、明示的に記述する必要があります。不変条件テスト
不変条件とは、多様な操作の流れを通じて常に維持されるべき性質です。レンディングプロトコルでは、記録された債務総額とユーザーごとの債務の合計が一致する必要がある場合があります。トークンでは、会計モデルに基づき、総供給量と追跡対象の全残高の合計を一致させる必要がある場合があります。自動マーケットシステムでは、特定の準備金の関係を維持する必要がある場合があります。不変条件テストでは、トランザクションの一連の流れを生成し、その性質が維持されるか確認できます。特定の順序で複数の操作が行われたときに脆弱性が生じる、状態を持つ暗号資産プロトコルで特に有効です。TypeScriptテスト
TypeScriptテストは、開発ライブラリとブロックチェーン接続を通じてコントラクトとやり取りします。Hardhat 3で推奨されるセットアップでは、viemとNode.jsのテストランナーを使用します。公式プラグインでは、Mochaを使うethersベースのセットアップにも対応しています。TypeScriptテストでは、複数のコントラクト、アカウント、ファイル、API、ネットワーク接続を連携させられます。分散型アプリケーションのオフチェーンソフトウェアで使うものと同じワークフローをテストすることもできます。外部サービスが利用できないと結果が不安定になるため、ライブの外部サービスへの不要な依存は避けてください。コードカバレッジ
コードカバレッジは、テスト実行時にどのコントラクト文、分岐、関数、パスが実行されたかを測定します。Hardhat 3には、Solidityのコードカバレッジ機能が組み込まれています。Hardhatのコードカバレッジガイドでは、カバレッジ実行時にツールがマーカーを使ってコントラクトを計測すると説明されています。
計測用のバイトコードは通常の本番用バイトコードとは異なり、より多くのガスを使用する場合があります。カバレッジが高くても、テストに有用なアサーションが含まれている、またはコントラクトが安全であるとは証明できません。テストでコードのすべての行を実行しても、重要な経済的結果を確認できていない場合があります。ガス統計とガススナップショット
Hardhatは、テスト実行中にコントラクトの公開関数が消費したガスを測定できます。Hardhatによるデバッグ
Hardhatは、Solidityのエラー、デコードされたログ、スタックトレース、実行トレースを表示できます。実行トレースには、トランザクションに含まれるコントラクト呼び出しと処理の順序が表示されます。Hardhatの実行トレースガイドでは、詳細度の設定によってデバッグ出力の量を調整する方法が説明されています。
詳細なトレースを確認すると、どの呼び出しがリバートしたか、どの関数が実行されたか、ネストしたコントラクト間のやり取りがどのように進んだかが分かります。プロキシ、コールバック、フック、トークン移転、複数の連携コントラクトを含むプロトコルでは、トレースが特に役立ちます。デバッグ出力には、アドレス、パラメーター、その他の機密性のある開発情報が含まれる場合があるため、共有ログでは慎重に扱ってください。Solidityのコンソールログ
Hardhatでは、シミュレーション環境内で開発向けのSolidityコンソールログを利用できます。テストやローカルトランザクションの実行中に、値を出力できます。状態、呼び出し元、残高、中間計算の確認に役立ちます。明確な理由がない限り、開発用ログを本番コードに残さないでください。ログ出力用のヘルパー関数が、バイトコード、コントラクトサイズ、デプロイ動作に影響する場合があります。リリース前に、一時的なデバッグ文を自動テストやアサーションに置き換えてください。Hardhatのタスク
Hardhatタスクとは、開発ワークフローの一部を自動化する、名前付きのコマンドです。コントラクトのコンパイル、アカウントの確認、レポート作成、デプロイ管理、プロジェクト固有の操作を実行できます。プラグインによってタスクが登録され、コマンドラインインターフェースから使用できるようになります。カスタムタスクでは、トランザクションを送信する前にネットワークの識別情報とユーザー入力を検証してください。危険なタスクで、最初に利用できるアカウントを黙って使ったり、本番ネットワークをデフォルトにしたりしてはいけません。明確なコマンド名と確認手順によって、誤ったデプロイや資金移転のリスクを減らせます。Hardhatのスクリプト
Hardhatスクリプトは、ランタイム環境とインストール済みプラグインを使用するTypeScriptまたはJavaScriptのプログラムです。コントラクトのデプロイ、関数呼び出し、状態の読み取り、管理者権限の移転、デプロイ記録の作成を行えます。スクリプトは柔軟ですが、構造化されたデプロイシステムを使う場合よりも、開発者の責任が大きくなります。スクリプトが失敗すると、後続のトランザクションは未完了のまま、一部のトランザクションだけが完了している場合があります。スクリプトは既存の状態を検出し、危険な操作を繰り返さないよう設計してください。本番スクリプトでは、トランザクションハッシュ、デプロイ済みアドレス、パラメーター、ネットワークID、結果を記録してください。Hardhat Ignition
Hardhat Ignitionは、Hardhatプロジェクトで提供される公式の宣言型デプロイシステムです。開発者はデプロイモジュールを使って、必要なコントラクトインスタンスと操作を記述します。Ignitionはそれらの定義を分析し、デプロイ方法を決定します。相互に依存しないトランザクションを並行して送信し、特定のエラーから復旧し、中断したデプロイを再開できます。Hardhat Ignitionのデプロイガイドでは、コントラクトやデプロイ後の呼び出しをモジュールにまとめる方法を説明しています。
宣言型デプロイによって手作業のスクリプトに伴う一部のリスクを減らせますが、モジュールのロジックとパラメーターは引き続き慎重に確認する必要があります。デプロイ定義に誤りがあれば、自動システムがその誤りを一貫して繰り返す可能性があります。スマートコントラクトのデプロイ
デプロイでは、コントラクト作成トランザクションをブロックチェーンネットワークに送信します。トランザクションには、コンパイル済みの作成用バイトコードとコンストラクターパラメーターが含まれます。承認されると、ブロックチェーンの作成ルールに基づいてコントラクトにアドレスが割り当てられます。デプロイでは、意図したコンパイラ、オプティマイザー、コンストラクター引数、アカウント、チェーン、ガス設定を使う必要があります。本番環境へのトランザクションを送る前に、本番用アーティファクトを正確に使って最終的なシミュレーションデプロイを実施してください。デプロイ直後に、管理者権限、所有権、アップグレード権限、財務資産のアドレス、緊急時の制御機能も確認してください。秘密鍵をHardhat設定ファイルやソースリポジトリに直接コミットしてはいけません。スマートコントラクトの検証
スマートコントラクトの検証では、デプロイ済みのバイトコードと申告されたソースコード、コンパイラ設定を関連付けます。ソースコードが検証されていると、ユーザー、監査担当者、ウォレット、監視ツールが、コントラクトの想定される動作を確認できます。Hardhatには公式の検証プラグインがあります。Hardhatの検証ガイドでは、指定されたソースコードからデプロイ済みバイトコードが生成されたことを検証で確認できると説明されています。
検証されたからといって、ソースコードが安全、公正、または隠れた経済的リスクを含まないことが証明されるわけではありません。コンストラクターパラメーター、リンク済みライブラリ、オプティマイザー設定、メタデータ、コンパイラバージョンをデプロイ時と一致させる必要があります。後で検証を再現できるよう、ビルド情報を保存してください。Hardhatプラグイン
プラグインは、Hardhatに開発機能を追加します。公式プラグインでは、viem、ethers、アサーション、ネットワークヘルパー、コントラクト検証、Ignitionによるデプロイ、暗号化設定の保存、ハードウェア署名、テストランナーをサポートしています。公式プラグイン一覧には、Nomic Foundationが保守するプラグインが掲載されています。
コミュニティプラグインが役立つ機能を追加する場合もありますが、同程度のレビューや保守が行われているとは限りません。悪意あるプラグインは、プロジェクトファイル、環境変数、鍵、デプロイデータ、ネットワークトラフィックを読み取る可能性があります。インストールする前に、プラグインの所有者、更新履歴、ソースコード、依存関係、権限、互換性を確認してください。依存関係の安全性
Hardhatプロジェクトは、インストール、テスト、デプロイ時にコードを実行する可能性があるNode.jsパッケージに依存しています。侵害された依存関係が、環境変数、秘密鍵、ソースコード、デプロイ認証情報を盗もうとする場合があります。プロジェクトではロックファイルをコミットし、予期しない依存関係の変更を確認してください。本番環境へのデプロイでは、ソフトウェアを最小限に抑え、パッケージのバージョンを検証したクリーンなシステムを使用してください。自動化された依存関係の更新は、テストとレビューを行わずに反映してはいけません。広く利用されているパッケージであっても、すべてのリリースが安全とは限りません。Hardhatと秘密鍵
Hardhatは、外部ネットワーク上でコントラクトをデプロイ、呼び出しする際に、署名アカウントへのアクセスを必要とする場合があります。平文の設定ファイルに生の秘密鍵を保存すると、重大なセキュリティリスクになります。開発用の鍵には、テスト用の資金だけを入れてください。本番用の鍵は、暗号化ストレージ、ハードウェア署名、権限の制限、マルチシグ手順などで保護してください。可能な場合は、デプロイ用アカウントに予定しているトランザクションの実行に必要な金額だけを保有させてください。デプロイ後に管理者の所有権を、より安全なアカウントに移転できます。ログやエラーレポートから機密設定値が漏れていないことを確認してください。Hardhatとハードウェアウォレット
互換性のあるプラグインやワークフローを利用すれば、ハードウェアウォレットでHardhatのデプロイや管理用トランザクションに署名できます。これにより、開発用コンピューターの外部に秘密鍵を保持できます。対応している場合は、ハードウェアデバイスに宛先、ネットワーク、金額、コントラクトデータが表示されることを確認してください。複雑なコントラクトデプロイは、小型デバイスの画面では内容を理解しにくい場合があります。Hardhatが生成したトランザクションだからといって、ハードウェアウォレットが有害なデプロイを見分けられるわけではありません。ソースコード、コンパイル済みアーティファクト、コンストラクター引数、トランザクションデータを引き続き独立して確認してください。Hardhatでよくあるセキュリティ上の間違い
よくある間違いの1つは、秘密鍵やリカバリーフレーズをソースリポジトリにコミットすることです。別の間違いは、ネットワーク名だけを信頼してチェーンIDを確認せず、誤ったブロックチェーンにデプロイすることです。3つ目の間違いは、テスト、デプロイ、検証で異なるコンパイラ設定を使うことです。4つ目の間違いは、成功する操作だけをテストし、不正な呼び出し元や失敗条件を無視することです。5つ目の間違いは、ブロック番号を固定せず、変化するブロックチェーン状態のフォークに依存することです。6つ目の間違いは、デプロイ用の秘密情報にアクセスできる未レビューのプラグインをインストールすることです。7つ目の間違いは、コードカバレッジが100%ならセキュリティ監査と同等だと考えることです。8つ目の間違いは、デプロイアカウントにプロトコル機能すべてへの恒久的な権限を与えることです。9つ目の間違いは、デプロイ終了後にデプロイ先アドレスや所有権を確認しないことです。10個目の間違いは、秘密鍵を安全に保護していないローカル生成の開発用アドレスに実資金を送ることです。Hardhatのベストプラクティス
プロジェクトの依存関係ファイルで、Hardhat、プラグイン、ライブラリ、コンパイラのバージョンを固定してください。サポート対象のNode.jsリリースを使用し、パッケージロックファイルをコミットしてください。秘密鍵や機密性の高いエンドポイントをソースリポジトリの外部に保管してください。ローカルテスト、公開テスト、デプロイ、長期的な管理には、それぞれ別のアカウントを使用してください。単体、統合、ファズ、不変条件、アクセス制御、失敗条件のテストを作成してください。コードカバレッジを測定する際は、カバレッジが示すのは実行状況であり、正しさではないことを理解してください。再現可能なプロトコル連携テストのために、既知のブロックに固定したフォークテストを使用してください。デプロイ前に、ガス使用量の変化とコントラクトサイズを確認してください。デプロイ後にソースコードを検証し、ビルド情報を保存してください。意味のある暗号資産価値を管理するコントラクトについては、独立したセキュリティレビューを受けてください。Hardhatの限界
Hardhatは、コントラクトの経済設計が安全であることを証明できません。テストスイートがすべての攻撃経路を含むことを保証できません。本番ネットワークの状況をすべて完全に再現できるわけではありません。開発者が誤ったアカウントやネットワークでトランザクションに署名することを防げません。プロジェクト内に不注意に保存された秘密鍵を保護できません。安全でないサードパーティ製依存関係を信頼できるものに変えることはできません。形式検証、監査、バグ報奨金、監視、インシデント対応計画の代わりにはなりません。Hardhatは、より幅広い安全な開発プロセスの一部として使うと最も効果を発揮します。よくある質問
暗号資産におけるHardhatとは何ですか?
Hardhatは、EthereumやEVM互換のスマートコントラクトをコンパイル、テスト、デバッグ、デプロイ、検証する開発環境です。Hardhatはブロックチェーンですか?
いいえ。Hardhatはブロックチェーンネットワークではなく、ソフトウェア開発ツールです。Hardhatは暗号資産ですか?
いいえ。Hardhatはコインやトークンを表すものではありません。Hardhatは誰が開発していますか?
Hardhatは、Ethereum開発コミュニティ向けにNomic Foundationが開発しています。Hardhatの現行メジャーバージョンは何ですか?
Hardhat 3が現行のメジャーリリースラインです。Hardhatの最新バージョンは何ですか?
2026年7月13日時点で、最新のタグ付きリリースはHardhat 3.9.1です。Hardhatではどのプログラミング言語を使いますか?
Hardhatプロジェクトでは、スマートコントラクトにSolidityを、設定、スクリプト、統合テストにTypeScriptまたはJavaScriptを使用するのが一般的です。Hardhatでコンパイルできるものは何ですか?
HardhatはSolidityのソースコードをコンパイルし、EVMバイトコード、ABI、アーティファクト、関連するビルド情報を生成します。Hardhatにはローカルブロックチェーンが含まれていますか?
Hardhatには、ローカル開発と自動テスト向けに設計されたシミュレーション用ブロックチェーンネットワークが含まれています。HardhatはSolidityテストに対応していますか?
はい。Hardhat 3では、Solidityで直接記述したテストと、TypeScriptベースのテストに対応しています。Hardhatでファズテストを実行できますか?
はい。Solidityテストでさまざまな入力値を生成し、プロパティやエッジケースを検証できます。Hardhatでコントラクトの不変条件をテストできますか?
はい。コントラクト操作の一連の流れを生成しても維持されるべきプロパティを開発者が定義できます。Hardhat Ignitionとは何ですか?
Hardhat Ignitionは、スマートコントラクトのデプロイを定義、実行、中断後に再開、記録するための公式な宣言型デプロイシステムです。Hardhatでコントラクトを公開ネットワークにデプロイできますか?
はい。Hardhatは外部JSON-RPCエンドポイントに接続し、署名済みのデプロイトランザクションを送信できます。ローカルテストに実際の暗号資産が必要ですか?
いいえ。シミュレーション用ネットワークでは、現実の価値を持たない開発用アカウントと残高が提供されます。Hardhatのネットワークフォークとは何ですか?
ネットワークフォークとは、選択した公開ネットワークのブロックからブロックチェーン状態をローカルシミュレーションにコピーし、テストすることです。Hardhatでスマートコントラクトを検証できますか?
はい。公式の検証プラグインを使って、ソースコードとビルド情報を対応する検証サービスに送信できます。コントラクトの検証で安全性が証明されますか?
いいえ。検証によってソースコードとデプロイ済みバイトコードが関連付けられますが、ロジックの安全性や経済的な健全性は証明されません。コードカバレッジが高ければコントラクトは安全ですか?
いいえ。カバレッジが高いことは、テスト中にコードが実行されたことを示すだけで、正しいプロパティが確認されたことを証明しません。Hardhatでガス使用量を見積もれますか?
はい。対応するテスト実行中に、ガス統計やスナップショットを作成できます。Hardhatは複数のブロックチェーンネットワークに接続できますか?
はい。Hardhat 3では、複数のネットワーク接続とシミュレーション用チェーン設定を管理できます。秘密鍵をHardhatの設定に保存しても安全ですか?
いいえ。秘密鍵は平文でコミットせず、保護された外部システムを通じて読み込む必要があります。Hardhatでハードウェアウォレットを使えますか?
はい。互換性のあるプラグインやワークフローを使うと、選択したデプロイや管理用トランザクションにハードウェアデバイスで署名できます。すべてのHardhatプラグインは安全ですか?
いいえ。プラグインは機密性のあるプロジェクトリソースにアクセスする可能性があるため、インストール前に確認する必要があります。Hardhatはスマートコントラクト監査の代わりになりますか?
いいえ。Hardhatは開発とテストを支援しますが、独立したセキュリティ評価の代わりにはなりません。フォークテストでブロックを固定する理由は何ですか?
ブロックを固定するとコピーしたブロックチェーン状態が安定し、今後のテストを再現可能にできます。Hardhatで誤ったネットワークへのデプロイを防げますか?
Hardhatでチェックを設定できますが、開発者はチェーンID、アカウント、エンドポイント、デプロイパラメーターを引き続き確認する必要があります。まとめ
Hardhatは、EthereumやEVM互換のスマートコントラクトソフトウェアを開発するための総合的な環境です。コンパイル、アーティファクト、シミュレーション用ネットワーク、テスト、デバッグ、デプロイ、検証、スクリプト、タスク、プラグインを1つのプロジェクト構成にまとめています。現行のメジャーリリースであるHardhat 3では、Solidityネイティブテスト、マルチチェーンシミュレーション、型付きアーティファクト、ビルドプロファイル、コードカバレッジ、柔軟なネットワーク管理などが追加されています。開発者はHardhatを使って、実際の暗号資産を費やしたり、ユーザー資産を危険にさらしたりする前に、ローカルでコントラクトをテストできます。Hardhat Ignitionは、デプロイ作業を中断後に再開し、状態を記録できる構造化されたデプロイシステムを提供します。フォークテストによって公開ブロックチェーンの状態を再現し、既存のコントラクトとのやり取りをテストできます。実行トレース、カバレッジレポート、ファズテスト、不変条件、ガス統計を使うと、デプロイ前に多くの技術的な問題を発見できます。これらのツールが安全性を保証するわけではありません。結果の品質は、ソースコード、テスト、前提条件、依存関係、鍵、デプロイプロセスにも左右されます。秘密鍵はソースリポジトリの外部に保管し、強力な署名とアクセス制御の手順で保護してください。プラグインやパッケージの依存関係は、機密性の高い開発リソースにアクセスできるため、事前に確認する必要があります。本番用コントラクトでは、バージョンを固定したコンパイラ設定、再現可能なビルド、検証済みのソースコード、独立したレビュー、デプロイ後の監視を実施してください。暗号資産開発におけるHardhatは、慎重なエンジニアリングやセキュリティレビューの代わりではなく、スマートコントラクト開発のリスクを軽減するための強力な作業環境として理解するのが適切です。関連コンテンツ
WhatsMiner M30S++
Web3ドメイン
Web3プロジェクト
ホット
現在、市場で大きな注目を集めているトレンドの暗号資産
トップ取引高
取引高が最も多い暗号資産

