メインコンテンツへスキップ

初心者向けのHello Worldスマートコントラクト

Solidity
Hardhat
Alchemy
スマートコントラクト
デプロイ
初級
elanh
2021年3月31日
20 分の読書

このガイドは、ブロックチェーンの開発が初めてでどこから始めたらよいのか分からない方や、スマートコントラクトをデプロイして対話する方法を理解したいだけの方に最適です。 このチュートリアルでは、仮想ウォレット(MetaMask (opens in a new tab))、Solidity (opens in a new tab)Hardhat (opens in a new tab)Alchemy (opens in a new tab)を使用して、Sepoliaテストネットワーク上で簡単なスマートコントラクトを作成してデプロイする方法を順を追って説明します(現時点でしっかりと理解できていなくても、心配はご無用です。後ほど説明します)。

このチュートリアルのパート2 (opens in a new tab)では、デプロイ後のスマートコントラクトとの対話方法について、パート3 (opens in a new tab)ではEtherscanで公開する方法について説明します。

ご不明な点がございましたら、Alchemy Discord (opens in a new tab)までお気軽にお問い合わせください!

ステップ1: イーサリアムネットワークに接続する

イーサリアムチェーンにリクエストを行う方法はたくさんあります。 簡略化のため、ここではAlchemyの無料アカウントを使用します。これは独自のノードを実行することなく、イーサリアムチェーンとの通信を可能にするブロックチェーンのデベロッパープラットフォームとAPIです。 このプラットフォームには、スマートコントラクトのデプロイメントにおいて内部で何が起こっているのかを把握するためにこのチュートリアルで利用する、監視と分析のためのデベロッパーツールも備わっています。 Alchemyアカウントをお持ちでない場合は、こちらから無料で登録 (opens in a new tab)できます。

ステップ2: アプリ(およびAPIキー)を作成する

Alchemyのアカウントを作成した後、アプリを作成することでAPIキーを生成することができます。 これにより、Sepoliaテストネットワークへのリクエストが可能になります。 テストネットに詳しくない場合は、こちらのページをご覧ください。

  1. Alchemyダッシュボードのナビゲーションバーで「Select an app」を選択し、「Create new app」をクリックして、「Create new app」ページに移動します。

Hello worldアプリ作成

  1. アプリに「Hello World」という名前を付け、簡単な説明を提示し、「Infra & Tooling」などのユースケースを選択します。 次に、「Ethereum」を検索してネットワークを選択します。

アプリ作成ビュー hello world

  1. 「Next」をクリックして続行し、次に「Create app」をクリックすれば完了です! ナビゲーションバーのドロップダウンメニューにアプリが表示され、APIキーをコピーできるようになります。

ステップ3: イーサリアムアカウント(アドレス)を作成する

トランザクションの送受信には、イーサリアムアカウントが必要です。 このチュートリアルでは、イーサリアムアカウントアドレスを管理するためにブラウザの仮想ウォレットであるMetamaskを使用します。 トランザクションに関する詳細はこちら。

MetaMaskはこちら (opens in a new tab)からダウンロードして、無料でイーサリアムアカウントを作成できます。 アカウントを作成するとき、またはすでにアカウントをお持ちの場合は、(実際のお金を使わないように)ネットワークのドロップダウンメニューを使用して「Sepolia」テストネットワークに切り替えてください。

Sepoliaがリストに表示されない場合は、メニューから「高度な設定」に進み、下にスクロールして「テストネットワークを表示」をオンに切り替えます。 ネットワーク選択メニューで、「カスタム」タブを選択してテストネットのリストを見つけ、「Sepolia」を選択します。

metamask sepolia の例

ステップ4: フォーセットからイーサを追加する

テストネットワークにスマートコントラクトをデプロイするには、偽のEthが必要になります。 Sepolia ETHを入手するには、Sepoliaネットワーク詳細にアクセスして、さまざまなフォーセットのリストを表示します。 1つが機能しない場合は、別のものを試してください。枯渇している場合があります。 ネットワークのトラフィックにより、偽のETHの受信に時間がかかる場合があります。 その後すぐに、MetaMaskアカウントにETHが表示されるはずです!

ステップ5: 残高を確認する

残高があることを再確認するために、Alchemyのcomposerツール (opens in a new tab)を使用してeth_getBalanceリクエストを作成しましょう。 このリクエストをすると、ウォレット内のETHの額が返されます。 MetaMaskアカウントアドレスを入力して「Send Request」をクリックすると、次のようなレスポンスが表示されます。

{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" }

**注:**この結果の単位はETHではなくweiです。 weiはETHの最小単位として使われています。 weiからETHへの変換は、1 eth = 1018 weiです。 したがって、0x2B5E3AF16B1880000を10進数に変換すると5*10¹⁸になり、これは5 ETHに相当します。

ふう! 偽のお金がすべて揃いました

ステップ6: プロジェクトを初期化する

まず、プロジェクトのフォルダを作成する必要があります。 コマンドラインに移動し、次のように入力します。

mkdir hello-world
cd hello-world

プロジェクトフォルダに入ったので、npm initを使用してプロジェクトを初期化します。 npmをまだインストールしていない場合は、これらの手順 (opens in a new tab)に従ってください(Node.jsも必要なので、それもダウンロードしてください!)。

npm init

インストールの質問にどう答えるかは重要ではありませんが、参考までに私たちの回答方法を次に示します。

package.jsonを承認すれば完了です!

ステップ7: Hardhat (opens in a new tab)をダウンロードする

Hardhatは、イーサリアムのソフトウェアをコンパイル、デプロイ、テスト、デバッグするための開発環境です。 デベロッパーがライブチェーンにデプロイする前に、スマートコントラクトや分散型アプリケーション(Dapp)をローカルに構築する際に役立ちます。

hello-worldプロジェクト内で次を実行します。

npm install --save-dev hardhat

インストール手順 (opens in a new tab)の詳細については、このページをご覧ください。

ステップ8: Hardhatプロジェクトを作成する

プロジェクトフォルダ内で以下を実行します。

npx hardhat

ウェルカムメッセージと、次に何をするのかを選択できるオプションが表示されます。 「create an empty hardhat.config.js」を選択してください。

これにより hardhat.config.js ファイルが生成されます。ここでプロジェクトのすべてのセットアップを指定します(ステップ13)。

ステップ9: プロジェクトフォルダを追加する

プロジェクトを整理するために、2つの新しいフォルダを作成します。 コマンドラインでプロジェクトのルートディレクトリに移動し、次のように入力します。

mkdir contracts
mkdir scripts
  • contracts/ には、hello worldスマートコントラクトのコードファイルを保存します
  • scripts/ には、コントラクトをデプロイして対話するためのスクリプトを保存します

ステップ10: コントラクトを作成する

一体いつになったらコードを書くのだろう、と思っているかもしれませんね。 さあ、このステップ10でコードを書き始めましょう。

お気に入りのエディタでhello-worldプロジェクトを開きます(VSCode (opens in a new tab)がおすすめです)。 スマートコントラクトはSolidityという言語で書かれており、これを使ってHelloWorld.solスマートコントラクトを作成します。‌

  1. 「contracts」フォルダに移動し、HelloWorld.solという名前の新規ファイルを作成します。
  2. 以下は、このチュートリアルで使用するイーサリアム・ファウンデーションのHello Worldスマートコントラクトのサンプルです。 以下の内容をHelloWorld.solファイルにコピー&ペーストし、コメントを読んでこのコントラクトが何をするのかを理解してください。

これは、作成時にメッセージを保存し、update関数を呼び出すことで更新できる、非常にシンプルなスマートコントラクトです。

ステップ11: MetaMaskとAlchemyをプロジェクトに接続する

MetaMaskウォレットとAlchemyアカウントを作成し、スマートコントラクトも作成しました。次はこの3つを接続しましょう。

仮想ウォレットから送信されるすべてのトランザクションには、固有の秘密鍵を使用した署名が必要です。 この許可をプログラムに与えるために、秘密鍵(とAlchemyのAPIキー)を環境ファイルに安全に格納する作業を行います。

トランザクションの送信について詳しく知るには、web3を使用したトランザクション送信に関するこのチュートリアルをご覧ください。

まず、プロジェクトディレクトリにdotenvパッケージをインストールします。

npm install dotenv --save

次に、プロジェクトのルートディレクトリに.envファイルを作成し、MetaMaskの秘密鍵とHTTP Alchemy API URLを追加します。

alchemy apiキーの取得

Alchemy API URLをコピーする

.envは次のようになります:

API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key"
PRIVATE_KEY = "your-metamask-private-key"

これらをコードに実際に接続するために、ステップ13でhardhat.config.jsファイル内のこれらの変数を参照します。

.envはコミットしないでください! .envは決して他人と共有したり、公開したりしないように注意してください。共有することで、あなたのアカウント情報が漏洩する可能性があります。 バージョンを管理する場合は、.envgitignoreファイルに追加してください。

ステップ12: Ethers.jsをインストールする

Ethers.jsは、標準のJSON-RPCメソッドをよりユーザーフレンドリーなメソッドでラップすることで、イーサリアムとの対話やリクエストを容易にするライブラリです。

Hardhatでは、追加のツールや拡張機能のためのプラグイン (opens in a new tab)を非常に簡単に統合できます。 コントラクトのデプロイにはEthersプラグイン (opens in a new tab)を活用します(Ethers.js (opens in a new tab)には非常にクリーンなコントラクトデプロイメントメソッドがあります)。

プロジェクトのホームディレクトリで以下を実行します。

npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"

次のステップで、hardhat.config.jsにethersもrequireします。

ステップ13: hardhat.config.jsを更新する

ここまでで、いくつかの依存関係とプラグインを追加しました。次に、プロジェクトがそれらすべてを認識できるように、hardhat.config.jsを更新する必要があります。

hardhat.config.jsを次のように更新します:

ステップ14: コントラクトをコンパイルする

ここまでの作業がうまくいっていることを確認するために、コントラクトをコンパイルしてみましょう。 compileタスクは、組み込みのHardhatタスクの1つです。

コマンドラインで以下を実行します。

npx hardhat compile

SPDX license identifier not provided in source fileという警告が表示されるかもしれませんが、心配する必要はありません。それ以外は問題ないはずです! うまくいかない場合は、いつでもAlchemy Discord (opens in a new tab)でメッセージを送ることができます。

ステップ15: デプロイスクリプトを作成する

コントラクトの作成と設定ファイルの作成が完了したら、いよいよコントラクトのデプロイのためのスクリプトを作成します。

scripts/フォルダに移動してdeploy.jsという名前の新しいファイルを作成し、次の内容を追加します:

Hardhatは、コントラクトのチュートリアル (opens in a new tab)で、これらのコードの各行が何をするかを非常にうまく説明しています。ここではその説明を採用しました。

const HelloWorld = await ethers.getContractFactory("HelloWorld");

ethers.jsのContractFactoryは、新しいスマートコントラクトをデプロイするために使用される抽象化です。したがって、ここでのHelloWorldは、私たちのhello worldコントラクトのインスタンスのためのファクトリです。 hardhat-ethersプラグインを使用する場合、ContractFactoryおよびContractインスタンスはデフォルトで最初の署名者に接続されます。

const hello_world = await HelloWorld.deploy();

ContractFactorydeploy()を呼び出すとデプロイメントが開始され、Contractに解決されるPromiseが返されます。 これは、スマートコントラクトの各関数に対するメソッドを持つオブジェクトです。

ステップ16: コントラクトをデプロイする

ようやく、スマートコントラクトをデプロイする準備が整いました。 コマンドラインに移動し、次を実行します:

npx hardhat run scripts/deploy.js --network sepolia

次のような画面が表示されるはずです。

コントラクトがデプロイされたアドレス: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570

Sepolia etherscan (opens in a new tab)にアクセスし、コントラクトアドレスを検索すると、正常にデプロイされたことが確認できるはずです。 トランザクションは以下のようなものになります。

etherscanコントラクト

FromアドレスはMetaMaskアカウントのアドレスと一致し、Toアドレスは「Contract Creation」と表示されますが、トランザクションをクリックするとToフィールドにコントラクトアドレスが表示されます。

etherscanトランザクション

おめでとうございます! イーサリアムチェーンにスマートコントラクトをデプロイできました 🎉

内部で何が起こっているのかを理解するために、Alchemyダッシュボード (opens in a new tab)のExplorerタブに移動してみましょう。 Alchemyアプリが複数ある場合は、必ずアプリでフィルタリングし、「Hello World」を選択してください。 hello worldエクスプローラー

ここでは、.deploy()関数を呼び出したときにHardhat/Ethersが内部で行ったいくつかのJSON-RPCコールを確認できます。 ここで注目すべき重要なコールは2つあります。1つは、コントラクトをSepoliaチェーンに実際に書き込むためのリクエストであるeth_sendRawTransaction (opens in a new tab)で、もう1つはハッシュが与えられたトランザクションに関する情報を読み取るためのリクエストであるeth_getTransactionByHash (opens in a new tab)です(これはトランザクションにおける典型的なパターンです)。 トランザクションの送信についてさらに詳しく知りたい場合は、Web3を使用したトランザクションの送信に関するチュートリアルをご覧ください。

このチュートリアルのパート1は以上です。パート2では、最初のメッセージを更新してスマートコントラクトと実際に対話 (opens in a new tab)し、パート3ではスマートコントラクトをEtherscanに公開 (opens in a new tab)して、誰もがその対話方法を知ることができるようにします。

Alchemyについてもっと知りたいですか? 私たちのウェブサイト (opens in a new tab)をご覧ください。 アップデートを見逃したくないですか? こちら (opens in a new tab)でニュースレターに登録してください! 私たちのDiscord (opens in a new tab)にもぜひご参加ください。

ページの最終更新: 2026年3月3日

このチュートリアルは役に立ちましたか?