初心者向けのHello Worldスマートコントラクト
このガイドは、ブロックチェーンの開発が初めてでどこから始めたらよいのか分からない方や、スマートコントラクトをデプロイして対話する方法を理解したいだけの方に最適です。 このチュートリアルでは、仮想ウォレット(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テストネットワークへのリクエストが可能になります。 テストネットに詳しくない場合は、こちらのページをご覧ください。
- Alchemyダッシュボードのナビゲーションバーで「Select an app」を選択し、「Create new app」をクリックして、「Create new app」ページに移動します。
- アプリに「Hello World」という名前を付け、簡単な説明を提示し、「Infra & Tooling」などのユースケースを選択します。 次に、「Ethereum」を検索してネットワークを選択します。
- 「Next」をクリックして続行し、次に「Create app」をクリックすれば完了です! ナビゲーションバーのドロップダウンメニューにアプリが表示され、APIキーをコピーできるようになります。
ステップ3: イーサリアムアカウント(アドレス)を作成する
トランザクションの送受信には、イーサリアムアカウントが必要です。 このチュートリアルでは、イーサリアムアカウントアドレスを管理するためにブラウザの仮想ウォレットであるMetamaskを使用します。 トランザクションに関する詳細はこちら。
MetaMaskはこちら (opens in a new tab)からダウンロードして、無料でイーサリアムアカウントを作成できます。 アカウントを作成するとき、またはすでにアカウントをお持ちの場合は、(実際のお金を使わないように)ネットワークのドロップダウンメニューを使用して「Sepolia」テストネットワークに切り替えてください。
Sepoliaがリストに表示されない場合は、メニューから「高度な設定」に進み、下にスクロールして「テストネットワークを表示」をオンに切り替えます。 ネットワーク選択メニューで、「カスタム」タブを選択してテストネットのリストを見つけ、「Sepolia」を選択します。
ステップ4: フォーセットからイーサを追加する
テストネットワークにスマートコントラクトをデプロイするには、偽のEthが必要になります。 Sepolia ETHを入手するには、Sepoliaネットワーク詳細にアクセスして、さまざまなフォーセットのリストを表示します。 1つが機能しない場合は、別のものを試してください。枯渇している場合があります。 ネットワークのトラフィックにより、偽のETHの受信に時間がかかる場合があります。 その後すぐに、MetaMaskアカウントにETHが表示されるはずです!
ステップ5: 残高を確認する
残高があることを再確認するために、Alchemyのcomposerツール (opens in a new tab)を使用してeth_getBalanceリクエストを作成しましょう。 このリクエストをすると、ウォレット内のETHの額が返されます。 MetaMaskアカウントアドレスを入力して「Send Request」をクリックすると、次のようなレスポンスが表示されます。
1{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" }**注:**この結果の単位はETHではなくweiです。 weiはETHの最小単位として使われています。 weiからETHへの変換は、1 eth = 1018 weiです。 したがって、0x2B5E3AF16B1880000を10進数に変換すると5*10¹⁸になり、これは5 ETHに相当します。
ふう! 偽のお金がすべて揃いました。
ステップ6: プロジェクトを初期化する
まず、プロジェクトのフォルダを作成する必要があります。 コマンドラインに移動し、次のように入力します。
1mkdir hello-world2cd hello-worldプロジェクトフォルダに入ったので、npm initを使用してプロジェクトを初期化します。 npmをまだインストールしていない場合は、これらの手順 (opens in a new tab)に従ってください(Node.jsも必要なので、それもダウンロードしてください!)。
1npm initインストールの質問にどう答えるかは重要ではありませんが、参考までに私たちの回答方法を次に示します。
1package name: (hello-world)2version: (1.0.0)3description: hello world スマートコントラクト4entry point: (index.js)5test command:6git repository:7keywords:8author:9license: (ISC)10About to write to /Users/.../.../.../hello-world/package.json:1112{13 "name": "hello-world",14 "version": "1.0.0",15 "description": "hello world スマートコントラクト",16 "main": "index.js",17 "scripts": {18 "test": "echo \\"Error: no test specified\\" && exit 1"19 },20 "author": "",21 "license": "ISC"22}すべて表示package.jsonを承認すれば完了です!
ステップ7: Hardhat (opens in a new tab)をダウンロードする
Hardhatは、イーサリアムのソフトウェアをコンパイル、デプロイ、テスト、デバッグするための開発環境です。 デベロッパーがライブチェーンにデプロイする前に、スマートコントラクトや分散型アプリケーション(Dapp)をローカルに構築する際に役立ちます。
hello-worldプロジェクト内で次を実行します。
1npm install --save-dev hardhatインストール手順 (opens in a new tab)の詳細については、このページをご覧ください。
ステップ8: Hardhatプロジェクトを作成する
プロジェクトフォルダ内で以下を実行します。
1npx hardhatウェルカムメッセージと、次に何をするのかを選択できるオプションが表示されます。 「create an empty hardhat.config.js」を選択してください。
1888 888 888 888 8882888 888 888 888 8883888 888 888 888 88848888888888 8888b. 888d888 .d88888 88888b. 8888b. 8888885888 888 "88b 888P" d88" 888 888 "88b "88b 8886888 888 .d888888 888 888 888 888 888 .d888888 8887888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.8888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888910👷 Welcome to Hardhat v2.0.11 👷?1112What do you want to do? …13Create a sample project14❯ Create an empty hardhat.config.js15Quitすべて表示これにより hardhat.config.js ファイルが生成されます。ここでプロジェクトのすべてのセットアップを指定します(ステップ13)。
ステップ9: プロジェクトフォルダを追加する
プロジェクトを整理するために、2つの新しいフォルダを作成します。 コマンドラインでプロジェクトのルートディレクトリに移動し、次のように入力します。
1mkdir contracts2mkdir scriptscontracts/には、hello worldスマートコントラクトのコードファイルを保存しますscripts/には、コントラクトをデプロイして対話するためのスクリプトを保存します
ステップ10: コントラクトを作成する
一体いつになったらコードを書くのだろう、と思っているかもしれませんね。 さあ、このステップ10でコードを書き始めましょう。
お気に入りのエディタでhello-worldプロジェクトを開きます(VSCode (opens in a new tab)がおすすめです)。 スマートコントラクトはSolidityという言語で書かれており、これを使ってHelloWorld.solスマートコントラクトを作成します。
- 「contracts」フォルダに移動し、HelloWorld.solという名前の新規ファイルを作成します。
- 以下は、このチュートリアルで使用するイーサリアム・ファウンデーションのHello Worldスマートコントラクトのサンプルです。 以下の内容をHelloWorld.solファイルにコピー&ペーストし、コメントを読んでこのコントラクトが何をするのかを理解してください。
1// セマンティックバージョニングを使用して、Solidityのバージョンを指定します。2// 詳細はこちら: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma3pragma solidity ^0.7.0;45// `HelloWorld`という名前のコントラクトを定義します。6// コントラクトは関数とデータ(その状態)の集合です。デプロイされると、コントラクトはイーサリアムのブロックチェーン上の特定のアドレスに配置されます。詳細はこちら: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html7contract HelloWorld {89 // `string`型の状態変数`message`を宣言します。10 // 状態変数は、その値がコントラクトストレージに永続的に保存される変数です。`public`キーワードは、変数をコントラクトの外部からアクセス可能にし、他のコントラクトやクライアントがその値をアクセスするために呼び出せる関数を作成します。11 string public message;1213 // 多くのクラスベースのオブジェクト指向言語と同様に、コンストラクタはコントラクト作成時にのみ実行される特別な関数です。14 // コンストラクタは、コントラクトのデータを初期化するために使用されます。詳細はこちら:https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors15 constructor(string memory initMessage) {1617 // 文字列引数`initMessage`を受け入れ、その値をコントラクトの`message`ストレージ変数に設定します。18 message = initMessage;19 }2021 // 文字列引数を受け入れ、`message`ストレージ変数を更新する公開関数です。22 function update(string memory newMessage) public {23 message = newMessage;24 }25}すべて表示これは、作成時にメッセージを保存し、update関数を呼び出すことで更新できる、非常にシンプルなスマートコントラクトです。
ステップ11: MetaMaskとAlchemyをプロジェクトに接続する
MetaMaskウォレットとAlchemyアカウントを作成し、スマートコントラクトも作成しました。次はこの3つを接続しましょう。
仮想ウォレットから送信されるすべてのトランザクションには、固有の秘密鍵を使用した署名が必要です。 この許可をプログラムに与えるために、秘密鍵(とAlchemyのAPIキー)を環境ファイルに安全に格納する作業を行います。
トランザクションの送信について詳しく知るには、web3を使用したトランザクション送信に関するこのチュートリアルをご覧ください。
まず、プロジェクトディレクトリにdotenvパッケージをインストールします。
1npm install dotenv --save次に、プロジェクトのルートディレクトリに.envファイルを作成し、MetaMaskの秘密鍵とHTTP Alchemy API URLを追加します。
- これらの手順 (opens in a new tab)に従って秘密鍵をエクスポートします
- HTTP Alchemy API URLを取得するには、以下を参照してください
Alchemy API URLをコピーする
.envは次のようになります:
1API_URL = "https://eth-sepolia.g.alchemy.com/v2/your-api-key"2PRIVATE_KEY = "your-metamask-private-key"これらをコードに実際に接続するために、ステップ13でhardhat.config.jsファイル内のこれらの変数を参照します。
.envはコミットしないでください! .envは決して他人と共有したり、公開したりしないように注意してください。共有することで、あなたのアカウント情報が漏洩する可能性があります。 バージョンを管理する場合は、.envをgitignoreファイルに追加してください。ステップ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)には非常にクリーンなコントラクトデプロイメントメソッドがあります)。
プロジェクトのホームディレクトリで以下を実行します。
1npm 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を次のように更新します:
1require('dotenv').config();23require("@nomiclabs/hardhat-ethers");4const { API_URL, PRIVATE_KEY } = process.env;56/**7* @type import('hardhat/config').HardhatUserConfig8*/9module.exports = {10 solidity: "0.7.3",11 defaultNetwork: "sepolia",12 networks: {13 hardhat: {},14 sepolia: {15 url: API_URL,16 accounts: [`0x${PRIVATE_KEY}`]17 }18 },19}すべて表示ステップ14: コントラクトをコンパイルする
ここまでの作業がうまくいっていることを確認するために、コントラクトをコンパイルしてみましょう。 compileタスクは、組み込みのHardhatタスクの1つです。
コマンドラインで以下を実行します。
1npx hardhat compileSPDX license identifier not provided in source fileという警告が表示されるかもしれませんが、心配する必要はありません。それ以外は問題ないはずです! うまくいかない場合は、いつでもAlchemy Discord (opens in a new tab)でメッセージを送ることができます。
ステップ15: デプロイスクリプトを作成する
コントラクトの作成と設定ファイルの作成が完了したら、いよいよコントラクトのデプロイのためのスクリプトを作成します。
scripts/フォルダに移動してdeploy.jsという名前の新しいファイルを作成し、次の内容を追加します:
1async function main() {2 const HelloWorld = await ethers.getContractFactory("HelloWorld");34 // デプロイを開始し、コントラクトオブジェクトに解決されるpromiseを返します5 const hello_world = await HelloWorld.deploy("Hello World!");6 console.log("Contract deployed to address:", hello_world.address);}78main()9 .then(() => process.exit(0))10 .catch(error => {11 console.error(error);12 process.exit(1);13 });すべて表示Hardhatは、コントラクトのチュートリアル (opens in a new tab)で、これらのコードの各行が何をするかを非常にうまく説明しています。ここではその説明を採用しました。
1const HelloWorld = await ethers.getContractFactory("HelloWorld");ethers.jsのContractFactoryは、新しいスマートコントラクトをデプロイするために使用される抽象化です。したがって、ここでのHelloWorldは、私たちのhello worldコントラクトのインスタンスのためのファクトリです。 hardhat-ethersプラグインを使用する場合、ContractFactoryおよびContractインスタンスはデフォルトで最初の署名者に接続されます。
1const hello_world = await HelloWorld.deploy();ContractFactoryでdeploy()を呼び出すとデプロイメントが開始され、Contractに解決されるPromiseが返されます。 これは、スマートコントラクトの各関数に対するメソッドを持つオブジェクトです。
ステップ16: コントラクトをデプロイする
ようやく、スマートコントラクトをデプロイする準備が整いました。 コマンドラインに移動し、次を実行します:
1npx hardhat run scripts/deploy.js --network sepolia次のような画面が表示されるはずです。
1コントラクトがデプロイされたアドレス: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570Sepolia etherscan (opens in a new tab)にアクセスし、コントラクトアドレスを検索すると、正常にデプロイされたことが確認できるはずです。 トランザクションは以下のようなものになります。
FromアドレスはMetaMaskアカウントのアドレスと一致し、Toアドレスは「Contract Creation」と表示されますが、トランザクションをクリックするとToフィールドにコントラクトアドレスが表示されます。
おめでとうございます! イーサリアムチェーンにスマートコントラクトをデプロイできました 🎉
内部で何が起こっているのかを理解するために、Alchemyダッシュボード (opens in a new tab)のExplorerタブに移動してみましょう。 Alchemyアプリが複数ある場合は、必ずアプリでフィルタリングし、「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)にもぜひご参加ください。
最終更新: 2025年12月5日





