はい、承知いたしました。Web3.jsとEthers.jsについてお話ししましょう。
Web3.jsまたはEthers.jsとは何か?
Web3.jsとEthers.jsは、「橋」あるいは「通訳者」のようなものだと考えてください。
- 橋の片側:あなたが利用しているウェブサイトやアプリ(分散型取引所やNFTマーケットプレイスなど)。
- 橋の反対側:イーサリアムブロックチェーンネットワーク。
この「通訳者」の役割は、あなた(ウェブサイトを通じて)の意図を、イーサリアムブロックチェーンが理解できる言語に翻訳し、そしてブロックチェーンから返された結果を、今度はウェブサイトが理解できる形であなたに表示することです。
これら二つは本質的にJavaScriptライブラリであり、つまり、プログラマーがWeb3アプリケーションを開発するために使うツールキットです。
なぜこれらが必要なのか?
想像してみてください。イーサリアムブロックチェーンは「宇宙語」を話すスーパーコンピューターのようなものです。独自の通信ルール(専門的にはJSON-RPC
プロトコルと呼ばれます)を持ち、非常に低レベルで複雑です。
一方で、私たちが普段インターネットを利用する際に使うブラウザは、JavaScriptやHTMLといった「地球語」しか理解できません。
ウェブサイトをイーサリアムと直接通信させようとしても、それは全くの無駄骨です。そこでWeb3.jsやEthers.jsが登場し、「ご心配なく、私が通訳します!」と言うわけです。
これらは、複雑な「宇宙語」の命令を、シンプルで分かりやすいJavaScript関数にカプセル化(ラップ)しています。プログラマーはこれらの簡単な関数を呼び出すだけで、イーサリアムネットワークとやり取りできるようになり、開発のハードルを大幅に下げています。
具体的に何ができるのか?(その役割)
この「橋」があれば、私たちは多くのクールなことができます。基本的に、イーサリアムブロックチェーンとのやり取りに関わるすべての操作は、これらを通じて実行できます。
-
イーサリアムネットワークへの接続
- これは、イーサネットケーブルをコンピューターに差し込むような最初のステップです。公開されているイーサリアムノードに接続することも、自分のウォレット(MetaMaskなど)に接続することもできます。
-
ブロックチェーン上の情報の照会(読み取り専用操作)
- 残高の確認:特定のウォレットアドレスにどれだけのイーサ(ETH)やその他のトークンがあるかを確認します。
- トランザクションの確認:あるトランザクションの詳細情報(誰が誰にいくら送金したかなど)を取得します。
- ブロック情報の確認:現在の最新のブロック番号や、あるブロックに含まれるトランザクションの情報を取得します。
-
トランザクションの開始(書き込み操作)
- 送金:あなたのアカウントから他の人にETHを送金します。
- スマートコントラクトとの対話:これが最も核となる機能です。例えば、NFTマーケットプレイスで「購入」ボタンをクリックすると、裏側ではWeb3.js/Ethers.jsを通じてNFTコントラクトの
buy
関数が呼び出されています。
-
スマートコントラクトとの詳細な対話
- これは、ブロックチェーン上にデプロイされたミニプログラムをリモートコントロールするようなものだと考えてください。このミニプログラムの状態を読み取ったり(例えばゲーム内のあなたのキャラクターのレベル)、その機能を呼び出して状態を変更したりできます(例えば「アップグレード」操作を実行する)。
-
ウォレット機能
- 新しいイーサリアムウォレットアドレスを作成します。
- メッセージに署名し、その操作が確かにあなた自身によって開始されたものであることを証明します(これは多くのDAppへのログイン時に使用されます)。
Web3.jsとEthers.js:違いは何ですか?
これは、「ケンタッキーとマクドナルド、どちらが良い?」と尋ねるのと同じくらい、非常に典型的な質問です。どちらも注文(イーサリアムとの対話)を助けてくれますが、スタイルや使い勝手に違いがあります。
-
Web3.js:ベテラン選手、まるで兄貴分。
- 最も早く登場し、かつてイーサリアム公式が推奨していたライブラリです。
- 多くの古いプロジェクトやチュートリアルがこれに基づいて書かれており、エコシステムは非常に巨大です。
- 欠点としては、ライブラリのサイズが大きく、いくつかの設計は現代から見るとやや古く、複雑に感じられる点です。
-
Ethers.js:新星、よりモダンで軽量。
- 有名なイーサリアム開発者によってゼロから設計され、より小さく、よりシンプルで、現代のJavaScript開発習慣に合致することを目標としています。
- ドキュメントは非常に明確で、API設計はより直感的です(例えば、
Provider
- 読み取り専用接続 とSigner
- 署名/書き込み可能なオブジェクト を明確に区別しており、開発者の思考をより明確にします)。 - サイズが小さく、現代のフロントエンド開発ツールとの相性も良好です。
- 現在、新しいプロジェクトではEthers.jsの利用率がますます高まっており、コミュニティも非常に活発です。
簡単な比喩によるまとめ
もしイーサリアムのエコシステム全体をスーパー銀行システムに例えるなら:
- イーサリアムブロックチェーン:銀行の総金庫であり、すべての人々の帳簿を記録し、絶対的に安全です。
- スマートコントラクト:金庫の中の個別の貸金庫であり、各貸金庫には独自の預け入れ・引き出しルールがあります。
- あなたのウォレット(MetaMask):あなたのキャッシュカード+パスワードであり、あなたの身元と承認を表します。
- Web3.jsまたはEthers.js:あなたの目の前にあるATMまたは銀行の窓口担当者です。
あなたは金庫に直接行って帳簿を操作するのではなく、ATM/窓口担当者(Web3.js/Ethers.js)を通じて残高を照会したり、送金したり、貸金庫(スマートコントラクト)を操作したりします。
どちらを学ぶべきか?
もしあなたが初心者であれば、個人的にはEthers.jsから始めることをお勧めします。
理由は簡単です。その設計はよりモダンで、ドキュメントは初心者にとってより親しみやすく、サイズも小さいです。これを学ぶことで、ブロックチェーンとどのようにやり取りするかについて非常に明確な理解が得られるでしょう。
もちろん、Web3.jsは「兄貴分」として、依然として多くのプロジェクトで利用されており、多くの企業の古いプロジェクトで使われ続けています。ですから、Ethers.jsに慣れた後で、時間があればWeb3.jsの使い方も学んでみるのは非常に有益です。そうすれば「両刀使い」になれるでしょう。