ブロックチェーン基礎と開発環境
ブロックチェーンとは?
ブロックチェーンは本質的に分散型データベースです。PostgreSQLのような従来のデータベースが中央サーバーで管理されるのに対し、ブロックチェーンのデータは世界中の数千台のコンピュータ(ノードと呼ばれる)によって共同で維持されます。
従来のDB vs ブロックチェーン
| 特徴 | 従来のDB | ブロックチェーン | |------|---------|----------------| | 管理者 | 単一の組織 | 全員(分散型) | | データ修正 | 削除・修正可能 | 一度書き込むと不変 | | ダウンタイム | 単一障害点 | 全ノードが同時に停止しない限り稼働 | | 透明性 | 運営者が決定 | 完全に公開・透明 | | 速度 | 非常に速い | 遅い(合意形成が必要) |
ブロックチェーンの3つの核心特性
- 分散化: 単一の人物や組織がネットワーク全体を制御できない。権限はすべての参加者に分散される。
- 不変性: ブロックチェーンに記録されたデータは決して変更・削除できない。改ざん不可能な永久記録となる。
- 透明性: これまでに行われたすべてのトランザクションを誰でもブロックエクスプローラで閲覧できる。隠された情報はない。
スマートコントラクトとは?
スマートコントラクトはブロックチェーン上にデプロイされる自動実行プログラムです。自動販売機のように考えてください:
- コインAを投入する(これがトリガーとなる)
- 自動販売機があらかじめ定義されたロジックを実行する(スマートコントラクトコード)
- 結果としてコインBを受け取る(実行出力)
一度開始されたこのプロセスには誰も干渉できません。コードは法律です。
スマートコントラクトは銀行、弁護士、公証人などの仲介者を不要にします。プログラムされた通りに正確に実行され、ダウンタイムも検閲も第三者の干渉もありません。
イーサリアムとEVM
イーサリアムはスマートコントラクトをサポートした最初のブロックチェーンプラットフォームであり、現在も最も人気があります。その核心はEVM(イーサリアム仮想マシン) — 世界中の数千台のコンピュータで同時に動作する「ワールドコンピュータ」です。
重要概念
ガス(トランザクション手数料)
イーサリアム上のすべての操作には計算リソースが必要です。ユーザーはこれらのリソースをガスとして支払います:
$$\text{ガス代} = \text{使用ガス量} \times \text{ガス価格}$$
| 操作 | 必要なガス | |------|-----------| | 単純なETH送金 | 21,000 ガス | | コントラクトのデプロイ | 数十万〜数百万 | | 複雑なコントラクト操作 | 数万〜数十万 |
ウォレット
ウォレットはブロックチェーン上のあなたのアイデンティティです。暗号鍵のペアで構成されます:
- 公開鍵 → あなたのアドレス(銀行口座番号のようなもの。共有しても安全)
- 秘密鍵 → あなたのパスワード(ATMの暗証番号のようなもの。絶対に誰とも共有しないで!)
秘密鍵を失うと、資金へのアクセスを永久に失います。ブロックチェーンには「パスワードを忘れました」ボタンはありません。
開発環境のセットアップ
ステップバイステップで完全なWeb3開発環境を構築します。
1. Node.jsのインストール
Hardhat開発フレームワークを実行するにはNode.jsが必要です。
# Node.jsがインストールされていることを確認(バージョン18以上)
node --version
npm --version
Node.jsがインストールされていない場合は、nodejs.orgからダウンロードしてください。
2. Hardhatプロジェクトの作成
Hardhatはイーサリアムスマートコントラクト用の開発フレームワークです。
mkdir vibe-dapp
cd vibe-dapp
npm init -y
npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox
# Hardhatプロジェクトを初期化
npx hardhat init
プロンプトが表示されたら、「Create an empty hardhat.config.js」 を選択してください。
3. OpenZeppelinのインストール
OpenZeppelinは監査済みのプロダクション品質のスマートコントラクトテンプレートを提供します。
npm install @openzeppelin/contracts
4. Ethers.jsとその他のツールのインストール
npm install ethers dotenv
5. Hardhatの設定
hardhat.config.jsを編集します:
require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();
module.exports = {
solidity: "0.8.20",
networks: {
// ローカル開発ネットワーク
hardhat: {
chainId: 31337,
},
// Sepoliaテストネット
sepolia: {
url: process.env.SEPOLIA_RPC_URL || "",
accounts: process.env.PRIVATE_KEY ? [process.env.PRIVATE_KEY] : [],
},
},
};
6. MetaMaskウォレットのインストール
MetaMaskはdAppとやり取りするための最も人気のあるブラウザウォレットです。
https://metamask.ioにアクセスしてブラウザ拡張機能をインストールしてください。
- 新しいウォレットを作成 — セットアップウィザードに従う
- シードフレーズをバックアップ — これはウォレットを復元できる12語のフレーズです。紙に書き留めてオフラインで安全に保管してください。
- Sepoliaテストネットワークに切り替え — 実際のお金を使わないようにテストネットワークを使用します
- 無料のテスト用ETHを取得 Sepoliaフォーセットから:
初めてのスマートコントラクト
すべてが正しく動作することを確認するために、簡単な「Hello World」コントラクトを作成しましょう。
contracts/HelloWorld.solを作成します:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract HelloWorld {
string public message;
constructor() {
message = "Hello, Web3 World!";
}
function setMessage(string memory _newMessage) public {
message = _newMessage;
}
function getMessage() public view returns (string memory) {
return message;
}
}
コントラクトのコンパイル
npx hardhat compile
ローカルテストネットへのデプロイ
scripts/deploy.jsを作成します:
const hre = require("hardhat");
async function main() {
const HelloWorld = await hre.ethers.getContractFactory("HelloWorld");
const contract = await HelloWorld.deploy();
await contract.waitForDeployment();
console.log("Contract deployed to:", await contract.getAddress());
// 初期メッセージを読み取り
let message = await contract.getMessage();
console.log("Initial message:", message);
// メッセージを更新
const tx = await contract.setMessage("Vibe Tutor Web3!");
await tx.wait();
// 更新されたメッセージを読み取り
message = await contract.getMessage();
console.log("Updated message:", message);
}
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});
npx hardhat run scripts/deploy.js
期待される出力:
Contract deployed to: 0x5FbDB2315678afecb367f032d93F642f64180aa3
Initial message: Hello, Web3 World!
Updated message: Vibe Tutor Web3!
おめでとうございます!
Web3開発環境をセットアップし、初めてのスマートコントラクトをデプロイしました。これで以下のことができるようになりました:
- ✅ 完全なHardhat開発環境
- ✅ テスト用ETHを持つイーサリアムウォレット
- ✅ ローカルテストネットワークにデプロイされたスマートコントラクト
- ✅ ブロックチェーンからのデータ読み取りと書き込み
次の章では、Solidityプログラミング言語をより深く掘り下げ、より複雑なコントラクトを構築します。
実践練習
💡 Vibe Coding練習:AIに依頼してHelloWorldコントラクトを以下のように拡張してもらいましょう:
- メッセージが更新されるたびにインクリメントされるカウンターを追加
- 過去のすべてのメッセージの履歴を保存
- メッセージを更新できる人を制限(コントラクト所有者のみ)
- 拡張されたコントラクトをデプロイしてテスト