---
title: "イーサリアムスタックの紹介"
description: "イーサリアムスタックのさまざまなレイヤーと、それらがどのように組み合わさるかについての解説。"
lang: ja
---

他のソフトウェアスタックと同様に、完全な「イーサリアムスタック」は、目標に応じてプロジェクトごとに異なります。

しかし、ソフトウェアアプリケーションがイーサリアムブロックチェーンとどのように相互作用するかについてのメンタルモデルを提供する、イーサリアムのコアコンポーネントが存在します。スタックのレイヤーを理解することで、イーサリアムをソフトウェアプロジェクトに統合するさまざまな方法を理解するのに役立ちます。

## レベル 1: イーサリアム仮想マシン {#ethereum-virtual-machine}

[イーサリアム仮想マシン (EVM)](/developers/docs/evm/) は、イーサリアム上のスマートコントラクトのランタイム環境です。イーサリアムブロックチェーン上のすべてのスマートコントラクトと状態の変更は、[トランザクション](/developers/docs/transactions/)によって実行されます。EVM は、イーサリアムネットワーク上のすべてのトランザクション処理を処理します。

他の仮想マシンと同様に、EVM は実行されるコードと実行するマシン (イーサリアムノード) の間に抽象化レイヤーを作成します。現在、EVM は世界中に分散された何千ものノード上で実行されています。

内部では、EVM は特定のタスクを実行するために一連のオペコード命令を使用します。これらの (140種類の固有の) オペコードにより、EVM は[チューリング完全](https://en.wikipedia.org/wiki/Turing_completeness)になります。つまり、十分なリソースが与えられれば、EVM はほぼすべての計算を行うことができます。

分散型アプリケーション (dapp) の開発者としては、EVM が存在すること、そしてダウンタイムなしにイーサリアム上のすべてのアプリケーションを確実に稼働させていること以外、EVM について詳しく知る必要はありません。

## レベル 2: スマートコントラクト {#smart-contracts}

[スマートコントラクト](/developers/docs/smart-contracts/)は、イーサリアムブロックチェーン上で実行される実行可能なプログラムです。

スマートコントラクトは、EVM バイトコード (オペコードと呼ばれる低レベルの機械語命令) にコンパイルされる特定の[プログラミング言語](/developers/docs/smart-contracts/languages/)を使用して記述されます。

スマートコントラクトはオープンソースライブラリとして機能するだけでなく、本質的には常に稼働しており、停止させることができないオープンな API サービスでもあります。スマートコントラクトは、ユーザーやアプリケーション ([分散型アプリケーション (dapp)](/developers/docs/dapps/)) が許可を必要とせずにやり取りできるパブリック関数を提供します。あらゆるアプリケーションが、デプロイされたスマートコントラクトと統合して、[データフィード](/developers/docs/oracles/)の追加やトークンスワップのサポートなどの機能を構成できます。さらに、アプリケーションのニーズを満たすカスタム機能を追加するために、誰でもイーサリアムに新しいスマートコントラクトをデプロイできます。

dapp 開発者としてスマートコントラクトを記述する必要があるのは、イーサリアムブロックチェーン上にカスタム機能を追加したい場合のみです。たとえば、ステーブルコインでの支払いをサポートしたり、トークンの分散型取引を可能にしたりしたい場合など、既存のスマートコントラクトと統合するだけで、プロジェクトのニーズのほとんど、あるいはすべてを達成できることに気づくかもしれません。

## レベル 3: イーサリアムノード {#ethereum-nodes}

アプリケーションがイーサリアムブロックチェーンと相互作用するためには、[イーサリアムノード](/developers/docs/nodes-and-clients/)に接続する必要があります。ノードに接続することで、ブロックチェーンのデータを読み取ったり、ネットワークにトランザクションを送信したりできるようになります。

イーサリアムノードは、ソフトウェア (イーサリアムクライアント) を実行しているコンピューターです。クライアントは、各ブロック内のすべてのトランザクションを検証し、ネットワークを安全に保ち、データを正確に保つイーサリアムの実装です。**イーサリアムノードこそがイーサリアムブロックチェーンです**。これらは集合的にイーサリアムブロックチェーンの状態を保存し、ブロックチェーンの状態を変更するトランザクションについてコンセンサスに達します。

アプリケーションを ([JSON-RPC API](/developers/docs/apis/json-rpc/) を介して) イーサリアムノードに接続することで、アプリケーションはブロックチェーンからデータ (ユーザーのアカウント残高など) を読み取るだけでなく、新しいトランザクション (ユーザーアカウント間での ETH の送金やスマートコントラクトの関数の実行など) をネットワークにブロードキャストできるようになります。

## レベル 4: イーサリアムクライアント API {#ethereum-client-apis}

(イーサリアムのオープンソースコミュニティによって構築および保守されている) 多くの便利なライブラリにより、アプリケーションはイーサリアムブロックチェーンに接続し、通信することができます。

ユーザー向けのアプリケーションがウェブアプリの場合、フロントエンドで直接 [JavaScript API](/developers/docs/apis/javascript/) を `npm install` することを選択できます。あるいは、[Python](/developers/docs/programming-languages/python/) または [Java](/developers/docs/programming-languages/java/) API を使用して、この機能をサーバー側で実装することを選択するかもしれません。

これらの API はスタックの必須要素ではありませんが、イーサリアムノードと直接やり取りする際の複雑さの多くを抽象化してくれます。また、ユーティリティ関数 (ETH から Gwei への変換など) も提供するため、開発者としてはイーサリアムクライアントの複雑さに対処する時間を減らし、アプリケーション固有の機能により多くの時間を集中させることができます。

## レベル 5: エンドユーザーアプリケーション {#end-user-applications}

スタックの最上位レベルには、ユーザー向けのアプリケーションがあります。これらは、今日あなたが日常的に使用し、構築している標準的なアプリケーションであり、主にウェブアプリやモバイルアプリです。

これらのユーザーインターフェースを開発する方法は、基本的には変わりません。多くの場合、ユーザーは自分が使用しているアプリケーションがブロックチェーンを使用して構築されていることを知る必要はありません。

## スタックを選択する準備はできましたか？ {#ready-to-choose-your-stack}

イーサリアムアプリケーションの[ローカル開発環境をセットアップする](/developers/local-environment/)ためのガイドをご覧ください。

## 参考文献 {#further-reading}

- [ウェブ・3.0 アプリケーションのアーキテクチャ](https://www.preethikasireddy.com/post/the-architecture-of-a-web-3-0-application) - _Preethi Kasireddy_

_役に立ったコミュニティリソースをご存知ですか？このページを編集して追加してください！_