【東京大学ブロックチェーンイノベーション寄付講座ブログ】
「Web3のためのWeb2技術」講座レポート – 理論から実践まで
先日、東京大学のブロックチェーンイノベーション寄付講座で行われた「Web3のためのWeb2技術」講座に参加しました。今回は、講座で学んだ内容を具体的なコード例や開発環境の構築手順とともに振り返ります。講座の目的は、ブロックチェーンとWeb2技術の融合によって、実際にWeb3アプリケーションを作成するためのノウハウを伝えることにありました 。
目次
- 1. Web3開発者になるための基本マインドと環境構築
- 2. システムデザインのアプローチ
- 3. サンプルアプリケーションの実装とスマートコントラクト連携
- 4. 技術用語解説(Glossary)
- まとめ
- 関連リンク
- 関連記事(ブロックチェーン公開講座シリーズ):
1. Web3開発者になるための基本マインドと環境構築
自己研鑽と試行錯誤の重要性
講座では、Web3開発者になるためには長い道のりがあるものの、失敗を恐れずにコードを書き続けることの重要性が強調されました。特に「Do Your Own Research(DYOR)」という精神が、どの分野でも求められる姿勢として紹介され、エラー発生時にログを読み解く力や、ネット検索での情報収集の重要性が説かれました。

開発環境のセットアップ
実際の開発環境構築では、以下のコマンドをターミナルで実行して、Gitリポジトリをクローンし、VSCodeでコードを確認しました。
cd ~
mkdir git
cd git
git clone https://github.com/blockchaininnovation/frontpractice.git
cd frontpractice/wagmi-project
npm install
また、サンプル設定ファイルのコピーと編集も行います。たとえば、src/wagmi.sample.ts
を src/wagmi.ts
にコピーして、以下のようにSepoliaエンドポイントと自分のAlchemyまたはInfuraのAPIキーに書き換えます。
export const config = createConfig({
chains: [sepolia],
connectors: [],
ssr: true,
transports: {
[sepolia.id]: http("https://eth-sepolia.g.alchemy.com/v2/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"),
},
});
さらに、.env.sample
を .env.local
にコピーし、TextDAOのコントラクトアドレス(例:0x479E7BcBdBF126D8d5B9db44c38f02BA01c6BC5)を設定します。
cp .env.sample .env.local
これにより、フロントエンドからスマートコントラクトへの接続設定が完了し、npm run dev
で開発サーバーが起動、http://localhost:3000 で動作確認が可能となります。
2. システムデザインのアプローチ
講座では、Web3アプリケーションの設計について、主に2つの構成が解説されました。
バックエンドサーバーなし
- メリット:ユーザーが直接ブロックチェーンに接続するため、完全にトラストレスな環境を実現。
- デメリット:クライアント側の技術に依存し、UI/UXの改善やセキュリティ対策に注意が必要。
実際のサンプルプログラムでは、ReactとNext.jsを用いて、ブラウザから直接EthereumのSepoliaテストネットへ接続し、MetaMaskを使って署名やTx作成を実施しています。
バックエンドサーバーあり
- メリット:UI/UXの向上や、データベース(MySQL等)との連携が容易になり、ユーザー体験の向上が期待できる。
- デメリット:中央集権的な要素が入り、システム内部にブラックボックスが生まれる可能性がある。
講座内では、システム構成図を用いて各コンポーネントの役割や、どの部分が直接ブロックチェーンと連携しているかを解説しており、参加者はそれぞれのメリット・デメリットを実感しました 。
3. サンプルアプリケーションの実装とスマートコントラクト連携
フロントエンドとEthereumライブラリの連携
講座で提供されたサンプルプログラムでは、以下の主要ライブラリが利用されています。
- React / Next.js
ユーザーインターフェースの構築と、サーバーサイドレンダリングを活用した高速なページ表示を実現。 - Wagmi.js と Viem
Ethereum接続用のライブラリとして、React Hooksを利用して簡単にブロックチェーンとのやり取りができるよう設計されています。具体的には、useReadContracts()
を使って、スマートコントラクトの関数(例:getProposalHeaders
やgetNextProposalId
)を呼び出し、リアルタイムで提案内容や状態を取得する仕組みが解説されました。

スマートコントラクトとの連携実例
講座では、以下のような具体的なスマートコントラクトの関数呼び出し例が示されました。
- 提案の起票(propose)
ユーザーが提案を起票する際、対応するTxが生成され、実際にブロックチェーン上で状態が更新されます。 - メンバー登録(memberJoin)
自身のアカウントをDAOのメンバーとして登録するプロセスでは、memberJoin()
関数を呼び出し、引数としてメンバー情報(ID、アドレス、メタデータURIなど)を渡します。以下は、実際に送信するためのコード例です。function handleSubmit(data: memberJoinSchemaType) { const args = { _candidates: { id: BigInt(data.candidates.id), addr: getAddress(data.candidates.addr), metadataURI: toHex("0", { size: 32 }), }, }; writeContract({ ...TextDAOFacade, functionName: "memberJoin", args: [[args._candidates]], }); }
- 投票機能(voteHeaders)
投票機能に関しては、ユーザーが提案IDと投票内容を入力し、voteHeaders(uint _proposalId, uint[3] calldata _headerIds)
を呼び出すことで、複数の投票が実施されます。これにより、ブロックチェーン上で投票結果がリアルタイムに更新される仕組みとなっています。
4. 技術用語解説(Glossary)
- Web3
分散型アプリケーション(DApps)を支える次世代のウェブ。ブロックチェーン技術を用いて、中央管理者なしに安全・透明なシステム運用を実現する。 - スマートコントラクト
ブロックチェーン上で自動実行される契約プログラム。条件が満たされると自動的に処理を行い、資産移動やデータの記録を担う。 - トランザクション(Tx)
ブロックチェーンにおける状態変更を伴う操作。ガス代が必要となり、実際にブロックに取り込まれることで反映される。 - トラストレス
第三者に依存せず、システム自体の透明性と検証可能性を重視する設計思想。 - Wagmi.js / Viem
Ethereumと連携するためのJavaScriptライブラリ。Wagmi.jsはReact Hooksを活用して操作を簡単にし、ViemはEthereum特有の処理を支援する。 - Next.js
Reactをベースにしたフレームワークで、サーバーサイドレンダリングや静的サイト生成をサポート。高速なユーザーインターフェース構築が可能となる。
まとめ
今回の講座は、Web3の概念だけでなく、実際のコード実装や環境構築の具体例を通して、参加者がブロックチェーン開発の基礎から応用までを体系的に学べる内容となっていました。React/Next.jsとWagmi.js/Viemを用いたサンプルアプリケーションの構築や、スマートコントラクトの関数呼び出しによる状態変更の仕組みを体験することで、現場で直面する実践的な課題に対応できる力が養われたと感じました。
この講座で得た具体的な手順やコード例は、今後の開発プロジェクトにおいて非常に有用な知識となるでしょう。皆さんもぜひ、講座の内容を実際に手を動かして試してみてください。
関連リンク
- TextDAO リポジトリ
オリジナルのTextDAO実装例。講座で紹介されたコードの詳細や、今後の開発の参考にどうぞ。
https://github.com/blockchaininnovation/TextDAO - Frontpractice サンプルアプリケーション
フロントエンドとスマートコントラクトの連携を学ぶためのサンプルプログラム。実際の開発環境や設定手順もこちらで確認できます。
https://github.com/blockchaininnovation/frontpractice - Frontpractice 解答ブランチ
演習の解答例が確認できるブランチ。実装の詳細や改善点を把握するのに役立ちます。
https://github.com/blockchaininnovation/frontpractice/tree/answer - Sepolia テストネットエクスプローラー
テストネット上の取引状況やコントラクトの状態を確認できます。TextDAOのデプロイ先としても参照可能です。
https://sepolia.etherscan.io/address/0x479E7BcBdBF126D8d5B9db44c38f02BA01cA6BC5 - Ethereum クライアント(Holesky)
Ethereumテストネットのひとつ、Holeskyに関する情報が確認できます。
https://github.com/eth-clients/holesky - Ethereum テストネット(Sepolia)
DApps開発用のテストネットとしてのSepoliaに関するリポジトリ。
https://github.com/eth-clients/sepolia - SparkleAI サイドセミナー応募フォーム
詳細な解説を行うサイドセミナーへの参加申し込みはこちらから。
https://forms.gle/vp8KpHg45sxXoKiK6 - Alchemy
Ethereum接続用のAPIキー取得や各種サービスを提供するプラットフォーム。
https://www.alchemy.com/ - Infura
Ethereumネットワークへの接続を簡単にするAPIサービス。
https://www.infura.io/
以上のリンクを参考に、実際の開発やさらなる学習に役立ててください。