---
title: "スマート・コントラクトのコンポーザビリティ"
description: "スマート・コントラクトをレゴブロックのように組み合わせ、既存のコンポーネントを再利用して複雑な分散型アプリケーション (dapp) を構築する方法を学びます。"
lang: ja
incomplete: true
---

## 簡単な紹介 {#a-brief-introduction}

スマート・コントラクトはイーサリアム上で公開されており、オープンなAPIと考えることができます。分散型アプリケーション (dapp) の開発者になるために、独自のスマート・コントラクトを記述する必要はありません。スマート・コントラクトと対話する方法を知っていれば十分です。たとえば、分散型取引所である[ユニスワップ](https://uniswap.exchange/swap)の既存のスマート・コントラクトを使用して、アプリ内のすべてのトークン・スワップのロジックを処理できます。ゼロから始める必要はありません。ユニスワップの[v2](https://github.com/Uniswap/uniswap-v2-core/tree/master/contracts)および[v3](https://github.com/Uniswap/uniswap-v3-core/tree/main/contracts)コントラクトのいくつかを確認してみてください。

## コンポーザビリティとは? {#what-is-composability}

コンポーザビリティとは、個別のコンポーネントを組み合わせて新しいシステムや出力を生み出すことです。ソフトウェア開発において、コンポーザビリティとは、開発者が既存のソフトウェア・コンポーネントを再利用して新しいアプリケーションを構築できることを意味します。コンポーザビリティを理解する良い方法は、コンポーザブルな要素をレゴブロックとして考えることです。各レゴブロックは他のブロックと組み合わせることができ、異なるレゴブロックを組み合わせることで複雑な構造物を構築できます。

イーサリアムでは、すべてのスマート・コントラクトが一種のレゴブロックです。他のプロジェクトのスマート・コントラクトを、自分のプロジェクトの構成要素として使用できます。つまり、車輪の再発明やゼロからの構築に時間を費やす必要はありません。

## コンポーザビリティはどのように機能するのか? {#how-does-composability-work}

イーサリアムのスマート・コントラクトは公開APIのようなものであるため、誰でもコントラクトと対話したり、機能を追加するためにdappに統合したりできます。スマート・コントラクトのコンポーザビリティは、一般的にモジュール性、自律性、発見可能性の3つの原則に基づいて機能します。

**1. モジュール性**: これは、個々のコンポーネントが特定のタスクを実行する能力です。イーサリアムでは、すべてのスマート・コントラクトに特定のユースケースがあります (ユニスワップの例で示した通りです)。

**2. 自律性**: コンポーザブルなコンポーネントは独立して動作できなければなりません。イーサリアムの各スマート・コントラクトは自己実行型であり、システムの他の部分に依存することなく機能できます。

**3. 発見可能性**: 外部コントラクトやソフトウェア・ライブラリが公開されていなければ、開発者はそれらを呼び出したり、アプリケーションに統合したりすることはできません。設計上、スマート・コントラクトはオープンソースです。誰でもスマート・コントラクトを呼び出したり、コードベースをフォークしたりできます。

## コンポーザビリティの利点 {#benefits-of-composability}

### 開発サイクルの短縮 {#shorter-development-cycle}

コンポーザビリティにより、開発者が[dapp](/apps/#what-are-dapps)を作成する際に行うべき作業が軽減されます。[Naval Ravikant氏が述べているように](https://twitter.com/naval/status/1444366754650656770)、「オープンソースとは、すべての問題が一度だけ解決されればよいことを意味します」。

ある問題を解決するスマート・コントラクトが存在する場合、他の開発者はそれを再利用できるため、同じ問題を解決する必要はありません。このようにして、開発者は既存のソフトウェア・ライブラリを利用し、追加機能を追加して新しいdappを作成できます。

### イノベーションの促進 {#greater-innovation}

開発者はオープンソースのコードを自由に再利用、変更、複製、または統合して目的の結果を生み出すことができるため、コンポーザビリティはイノベーションと実験を促進します。その結果、開発チームは基本的な機能に費やす時間を減らし、新機能の実験により多くの時間を割り当てることができます。

### ユーザー体験の向上 {#better-user-experience}

イーサリアム・エコシステムのコンポーネント間のインターオペラビリティは、ユーザー体験を向上させます。アプリケーションが通信できない断片化されたエコシステムよりも、dappが外部のスマート・コントラクトを統合している場合の方が、ユーザーはより優れた機能にアクセスできます。

インターオペラビリティの利点を説明するために、アービトラージ (裁定取引) の例を使用します。

あるトークンが`exchange B`よりも`exchange A`で高く取引されている場合、その価格差を利用して利益を得ることができます。ただし、それが可能なのは、トランザクションの資金 (つまり、`exchange B`でトークンを購入し、`exchange A`で売却するための資金) を賄うのに十分な資本がある場合のみです。

取引をカバーするのに十分な資金がないシナリオでは、フラッシュ・ローンが理想的かもしれません。[フラッシュ・ローン](/defi/#flash-loans)は非常に技術的ですが、基本的な考え方は、(担保なしで) 資産を借り入れ、_1つ_のトランザクション内で同じものを返済できるというものです。

最初の例に戻ると、アービトラージ・トレーダーは多額のフラッシュ・ローンを組み、`exchange B`でトークンを購入し、`exchange A`で売却し、元本と利息を返済して、利益を手元に残すという一連の作業を、同じトランザクション内で実行できます。この複雑なロジックには複数のコントラクトへの呼び出しを組み合わせる必要があり、スマート・コントラクトにインターオペラビリティが欠けていれば不可能です。

## イーサリアムにおけるコンポーザビリティの例 {#composability-in-ethereum}

### トークン・スワップ {#token-swaps}

トランザクションの支払いにETHを必要とするdappを作成する場合、トークン・スワップのロジックを統合することで、ユーザーが他のERC-20トークンで支払えるようにすることができます。コードは、コントラクトが呼び出された関数を実行する前に、ユーザーのトークンを自動的にETHに変換します。

### ガバナンス {#governance}

[DAO](/dao/)のためのオーダーメイドのガバナンス・システムを構築するには、費用と時間がかかる場合があります。代わりに、[Aragon Client](https://client.aragon.org/)などのオープンソースのガバナンス・ツールキットを使用してDAOをブートストラップし、ガバナンス・フレームワークを迅速に作成することができます。

### アイデンティティ管理 {#identity-management}

カスタムの認証システムを構築したり、中央集権型のプロバイダーに依存したりする代わりに、分散型アイデンティティ (DID) ツールを統合してユーザーの認証を管理できます。その一例が[SpruceID](https://www.spruceid.com/)です。これは、ユーザーがイーサリアムのウォレットを使用してアイデンティティを認証できる「Sign in with Ethereum (イーサリアムでサインイン)」機能を提供するオープンソースのツールキットです。

## 関連チュートリアル {#related-tutorials}

- [create-eth-appを使用してdappのフロントエンド開発をキックスタートする](/developers/tutorials/kickstart-your-dapp-frontend-development-with-create-eth-app/) _– create-eth-appを使用して、人気のあるスマート・コントラクトをデフォルトで備えたアプリを作成する方法の概要。_

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

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

- [コンポーザビリティはイノベーションである](https://a16zcrypto.com/posts/article/how-composability-unlocks-crypto-and-everything-else/)
- [Web3においてコンポーザビリティが重要である理由](https://hackernoon.com/why-composability-matters-for-web3)
- [コンポーザビリティとは何か?](https://blog.aragon.org/what-is-composability/#:~:text=Aragon,connect%20to%20every%20other%20piece.)