メインコンテンツへスキップ

分散型アプリケーションとは、いったい何か?

冒志鸿
ArcBlockBlockchainDAppsDecentralization

著者: 冒志鴻

編集: 陳俊

2019年に入っても暗号資産市場は低迷を続け、「パブリックチェーン」の危機が相次ぐ一方、「分散型アプリケーション」(Decentralized Applications, DApps)が弱気相場の冬における希望として注目されるようになりました。分散型アプリケーションを名乗るギャンブルゲームが、一日で数千万もの取引高を記録したというニュースも絶えません。では、DAppsとはいったい何なのでしょうか?

残念ながら、DAppsは「ブロックチェーン」に続いて、定義が曖昧で理解しにくい言葉になっているのかもしれません。Googleで「DApps」を検索すると、最初のページに出てくる多く読まれた記事でさえ、DAppsとは何かについてさまざまな誤解を並べています。DAppsを名乗る賭博やねずみ講のようなアプリケーションに失望した人も少なくありません。業界が未来のアプリケーションとしてもてはやすものは、本当にこうしたものなのでしょうか?

その名のとおり、「分散型アプリケーション」の最大の特徴は「分散化」であるはずです。しかし、「分散化」自体が何を意味するのかも分かりにくいものです。その概念さえ曖昧なままでは、分散化にどのような利点があるのか、なぜ分散化が必要なのか、そして「分散型アプリケーション」をどう開発するのかを議論することは非常に困難です。

私たちはずっと「分散化」された世界に生きている

実のところ、私たちはずっと「分散化」された世界に生きています。一人ひとりが独立した個人であり、SF映画『マトリックス』(Matrix)のように、脳が「母体」へ接続されて一元的に支配されているわけではありません。それでも私たちは、うまく意思を伝え、分業し、協力できます。

分散化された世界で個人が協力できる鍵は、互いに「通信」し、「合意」を形成できることです。人は聴覚、視覚、触覚などを通じて「通信」できます。言語や文字は一種の「通信プロトコル」であり、通信によって得た認識の一部が「合意」になります。人類が共有する「時間」は、誰の意思にも左右されず、すべての個人に同期しながら進み続け、一度過ぎれば変えられない尺度です。ブロックチェーンは、これまでのコンピューターシステムの構造の中で、人間社会に最も近い設計です。この考え方で見ると、両者には驚くほど似た点があります。最大の違いは、現実世界には参照可能な共通の「台帳」がなく、「証拠として調べられるもの」は時間の流れの中で人が記録した断片にすぎないことです。

現実世界が分散的に機能している姿を見れば、「分散化」が実現可能だと確信でき、それが多くの問題を確かに解決できることも理解しやすくなります。システムがどのように設計されていても、最終的にユーザーへ届くとき、あらゆる情報は結局、人間の「分散化」された脳へ戻ります。

人間社会、言語、文化、都市、国家がどのように生まれ、変化してきたかを観察することは、思考や意思決定の助けになります。ArcBlockの製品設計でも、私たちは常にこのように問題を分析し、設計に生かしています。たとえば経済モデルを設計するときには、都市経済学を研究して着想や参考を得ています。

「中央集権」と「分散化」は相対的なもの

「中央集権」と「分散化」は相対的な概念であり、観察する角度が違えば結論も変わり得ます。ビットコインを例にすると、「ビットコインは分散化されている」「ビットコインは分散型の暗号資産アプリケーションである」という見方は、業界で広く共有されています。

ネットワークトポロジーを見ると、ビットコインには多数のノードが分散して存在します。PoWの「マイニング」機構により、攻撃にはネットワーク全体の50%を超える計算能力が必要です。少数のノードが攻撃されたり、クラッシュしたり、停止させられたりしても、ネットワーク全体の安全性と正常な稼働には影響しません。この意味で、ビットコインのネットワークは分散化されています。

一方、ソフトウェアの開発と配布という観点では、Bitcoin Coreチームが公開した新しいバージョンのコードだけが一般に認められ、受け入れられています。同チームは最近、コード公開プロセスの安全性と信頼性を守るための一連の対策を公表しました。オープンソースなので誰でも貢献でき、フォークして変更することもできますが、ソフトウェアの配布とアップグレードという点では比較的中央集権的です。

アプリケーションとして見ると、ビットコインは「ピアツーピアの電子現金」として設計されています。ウォレットアドレスはユーザー自身が生成でき、誰かによる発行や承認は不要です。秘密鍵がなければ、どの個人や組織もユーザーのビットコインを奪えません。送金に第三者の介入は不要で、他者や組織が取引を禁止したり改ざんしたりすることもできません。取引記録はブロックチェーン上に永久保存され、誰も改ざん、削除、隠蔽できません。つまりビットコイン自体は、真の分散型アプリケーションです。

興味深いのは、ネットワークとアプリケーションの両面で高度に分散化されていると人々が認めたからこそ、世界中が同じビットコインというネットワークサービスを受け入れ、世界に一つしかない存在になったことです。この角度から見ると、ビットコインは高度に中央集権化されてもいます。ある観点で高度に分散化されたシステムが、まさに他の観点での分散化ゆえに、別の観点では中央集権化することがあるのです。したがって「中央集権」と「分散化」の区分や定義は絶対的ではなく、相対的で、絶えず変化します。異なる次元から見ると、両者は複雑に絡み合っています。この視点で人間社会の言語や文字を見ると、全体として非常に「分散化」されている一方、別の角度では非常に「中央集権的」であることが分かります。

「分散型アプリケーション」の過去と現在

コンピューターソフトウェアの発展は、「中央集権化―分散化―再中央集権化―再分散化」という変遷の過程です。弁証法が示す「肯定―否定―否定の否定」のように、らせんを描き、曲折しながら上昇してきました。

最初期のコンピューターソフトウェアは、間違いなく「スタンドアロン」でした。文字端末とタイムシェアリングシステムの登場により、高い処理能力を持つ一台のコンピューターへ多数の文字端末を接続し、複数の人が同時に操作できるようになりました。当時のアプリケーションは非常に「中央集権的」でした。文字端末は「ダム端末」と呼ばれ、ホストコンピューターから切り離されると何もできず、ソフトウェアはすべて中央のコンピューター上で動いていました。

パーソナルコンピューター(PC)の時代には、初めて真の意味での「分散型アプリケーション」が登場しました。驚く必要はありません。かつて身近だったさまざまなPC向け「スタンドアロン版」ソフトウェアは、ある意味ですべて分散型アプリケーションでした。この時代に最も重要なプロトコルは「ファイル」です。最古のコンピューター「プロトコル」であるファイルは、今なおコンピューター文化に深く根付いています。最初に「ファイル」を発明した人の思考は検証できませんが、現実世界を参照し、類推して設計したはずだと感じられます。「ファイル」と「ファイルシステム」は、かなりの部分で現実世界の模倣です。「ファイル」というプロトコルによって、無数のPCに分散したアプリケーションは共通の「言語」を持ちました。「ファイル」を通じて新しいアプリケーションをインストールでき、アプリケーションが生み出した結果も「ファイル」を通じて他のアプリケーションへ伝えられます。

Internetは、米国国防総省の研究プロジェクトARPANETから生まれました。その目的は、核攻撃のような壊滅的事態にさえ耐えられるほど堅牢で、耐障害性の高い仕組みを実現することでした。そのためInternetは、分散化の思想を設計理念に組み込み、TCP/IPを含む初期の多くのインターネットプロトコルもその思想を基に設計されました。初期のインターネットアプリケーションにも強い分散性がありました。インターネット自体の分散設計だけでなく、当時のPCソフトウェアの多くがもともと「スタンドアロン」であり、ネットワーク化の最も現実的な第一歩が、ディスクや磁気テープより効率よく「ファイル」を交換することだったからです。

初期のネットワークアプリケーションのかなりの割合は「ネットワーク上のファイル交換」を基礎としており、現在も広く使われるHTTPも例外ではありません。ファイル交換だけでは需要を満たせなくなると、「クライアント・サーバーアーキテクチャ(C/Sアーキテクチャ)」というネットワークアプリケーションの形が普及しました。これはインターネット以前に企業向けアプリケーションを中心に登場し、今も時代遅れではありません。C/Sは「分散」からやや「中央集権」へ向かう進化ですが、各C/Sシステムのクライアントとサーバーは、基本的にそれぞれ異なる「言語」(プロトコル)を話していました。ブラウザーの登場後、人々はブラウザーが、より一般的で標準化された「言語」(HTML)を理解する汎用クライアントだと気付きました。これによりアプリケーションを一層中央集権化し、開発、配備、保守を容易にできたため、さらに中央集権志向の「ブラウザー/サーバーアーキテクチャ(B/Sアーキテクチャ)」が普及しました。この傾向の重要な背景には、ネットワーク帯域とコンピューターの処理能力が伸び続ける一方、価格が下がり続けたことがあります。

インターネットアプリケーションが中央集権化してきた道

「プロトコル」は分散型アプリケーションの鍵です。PC時代に多数のソフトウェアを分散化できた最も重要なプロトコルは「ファイル」であり、これは現在も、そして将来も長く使われ続けます。インターネット時代の最重要プロトコルはTCP/IPプロトコル群と、その上に構築された多くのアプリケーションプロトコルです。こうしたオープンなプロトコルによって、世界中の開発者が今日のインターネットを共に築きました。

余談ですが、「分散型アプリケーション」は必ず「オープンソース」でなければならないと考える人は少なくありません。私はこれは誤解だと思います。正しくは、分散型アプリケーションの「プロトコル」がオープンでなければならないのであって、その実装やプロトコル外の事柄がオープンソースかどうかは重要ではありません。オープンソースが適する場合もあれば、そうしない方が適切な場合もあります。TCP/IPが発展した時代には「オープンソース運動」はまだ生まれていませんでしたが、各方面がプロトコルと標準の設計を重視していました(初期のソフトウェア設計は資源が限られていたため、現在より厳密で十分に準備されていることがよくありました)。RFC(Request for Comments)という形でプロトコルを策定することは、民主的かつ分散的にソフトウェアを設計する優れた伝統でした。RFCで定義された多くの規格とプロトコルは、現在も日々の生活に影響しています。

では、何がインターネットアプリケーションを次第に中央集権化させたのでしょうか?

  • 閉鎖されたユーザー体系

「インターネット的思考」による成長モデルの下、各社は大量の「ユーザー」を獲得し、さまざまな個人情報を収集し、そのデータを広告や販促に利用して利益を得ようとしました。その結果、各社は排他的にユーザーを奪い合い、自社のシステムやプラットフォームへできる限り長く囲い込もうとします。

  • 「車輪」の再発明による競争障壁

大量に「車輪」を再発明し、互換性のない車輪でいわゆる「競争障壁」を築くことは、InternetとWebの本来の精神に大きく反しています。しかし今では、インターネット企業の最も一般的な競争手段になりました。その結果、私たちのスマートフォンには10種類のメッセージアプリ、10種類の銀行アプリ、10種類の映画アプリなどが並びます。提供者が違うだけで、役割はほとんど同じです。

  • ユーザーとデータの囲い込み

本来ユーザー自身に属するデータを無償または極めて安価に占有し、移行を認めず、あるいは移行を不便にする障害を設けてユーザーを「囲い込み」ます。無料サービスでユーザーを集め、そのデータを売り、時間、注意、帯域などをできるだけ多く占有して利益を得ることが、インターネットで一般的な商売の型になってしまいました。

  • 「プロトコル」の囲い込み

プロトコルを守らない、公開しない、あるいは一部だけを提供して「オープン」であるかのように装います。「オープン」という見せかけでユーザーを獲得し、「閉鎖的」な実装で移行の難しさとコストを増やし、自社へ囲い込みます。

2005年に台頭した「Web 2.0」運動は、デスクトップインターネット時代が「分散化」へ最も近づいた出来事でした。Blogは分散型の出版・メディアであり、RSSというシンプルでオープンなプロトコルを採用していました。個人をノードとするソーシャルネットワークが盛んになり、FOAFプロトコル、Microformat、OpenID、OAuthなどの開発標準もこの時代に生まれました。

残念ながら、当時から後の業界大手となったGoogleとFacebookは、この分散化運動を戦略的に消し去り、かえってインターネットの中央集権化を極限まで推し進めました。中国の大手企業も、独占的で閉鎖されたプラットフォームを次々と築くことを歓迎しました。かつてMicrosoftがブラウザー戦争で独占的地位を利用してNetscapeを打ち破ったことが、誰の目にも明らかな公然の策だったとすれば、後にGoogleとFacebookが主導した締め付けは、完璧な陽光の下に隠された策略でした。開発標準も分散化も彼らの手で失われたのに、人々は彼らを革新的で、オープンで、貢献していると考え続けました。

もちろん、GoogleとFacebookも多くのオープンソース製品を提供し、その中にはブロックチェーン時代に彼らへ対抗する武器となったものもあります。たとえばBitcoinが使うLevelDBはGoogleの成果であり、EthereumとArcBlockが採用するRocksDBはFacebookの成果です。

ブロックチェーンがもたらす「分散化」への変遷

インターネットが一歩ずつ中央集権化したのは、技術進歩だけでなく、ビジネスの発展やユーザー習慣の変化などがもたらした結果でもあります。ブロックチェーン技術も、コンピューターとインターネット技術が十分に成熟して初めて進化できました。帯域の急速な拡大とコンピューター性能の飛躍的向上がなければ、ブロックチェーンは登場せず、実現する基盤も能力もありませんでした。

世の趨勢は「分裂が長く続けば統一され、統一が長く続けば分裂する」といわれます。ブロックチェーンがもたらす変化により、アプリケーションは再び分散化へ向かい始めています。技術の発展以外にも、相次ぐ個人データ漏えいによる甚大な損失、Facebookなど大企業のプライバシー問題への無関心、欧州のGDPRの施行などを通じ、より多くの人が「分散化」の価値を再認識しています。

ブロックチェーンとDAppsが本当に成功するには、中央集権化したインターネットの四つの問題を根本から解決しなければなりません。

  • 統一され、自律的で、分散化されたID
  • データが完全にユーザーへ帰属し、ユーザーが主導権を持つこと
  • 車輪を作り直し続けず、大いに再利用すること
  • 完全かつ包括的なオープンプロトコルと、可能な限りの前方互換性(無意味なフォークを生まないこと)

「分散型アプリケーション」はブロックチェーンやトークンと必然的に結び付くのか?

ここまでの議論に同意するなら、DAppsとブロックチェーンやトークンには、実は必然的な関係がないことにも同意するでしょう。しかしDAppsという名称を広く知らしめたのは、ほかならぬブロックチェーンとトークンです。

皮肉なことに、現在DAppsを名乗るアプリケーションの多くには、分散化の性質がまったくありません。その大半は、ブロックチェーンを利用した中央集権型アプリケーションであり、主にスマートコントラクトの一部の特性を利用しているだけです。

たとえばCryptoKittyのようなゲームはEthereumのERC721の特性を利用していますが、フロントエンドも設計も従来のWebゲームと大きく変わりません。最大の特徴は、Ethereumのスマートコントラクトで暗号猫の唯一性と独自性を保証することです。賭博、ギャンブル、ねずみ講型のゲームも、スマートコントラクトによって「公開かつ透明で、裏から操作する者はいない」とユーザーに思わせ、参加させています。しかし設計上の問題や未成熟なブロックチェーン技術などのため、多くはむしろ攻撃を受けやすく、暗号資産をだまし取られたり盗まれたりしやすいのです。従来のゲームより不合理で、不公正で、さらには安全性も劣ります。将来、非常に成功し、遊び応えがあり、ブロックチェーンを十分に活用した分散型ゲームが必ず現れると信じています。しかし、公平性、安全性、利用体験のすべてがひどく劣る現在のゲームではありません。

なぜ「分散型アプリケーション」はまだブレイクしていないのか?

あらゆる新しいものが「ブレイク」する前には、長く暗い夜があります。多くの人は爆発的に成長する段階だけを見て、その爆発に必要な位置エネルギーがゆっくり蓄積される過程を見落としがちです。

iPhoneが登場するまでに、スマートフォンという概念はすでに10年以上存在していました。2018年に世界を席巻したビットコインの理念は2008年に生まれましたが、その前にも少なくとも10年以上、さまざまな設計上の試みが成功せずに終わっていました。

ピーター・ティールは著書『ゼロ・トゥ・ワン』で、新製品が急成長するには既存の方法より10倍以上優れていなければならないと述べています。現在のDAppsが依存するブロックチェーン環境は、まだ非常に原始的です。EOSは確かにEthereumより「速い」ものの、「良い」案なのか、むしろ「悪い」案なのかについて結論は出ていません。Ethereumを模倣したほかのパブリックチェーンも、実際に機能するかどうかを時間と結果で証明する必要があります。

今日のブロックチェーン技術がまだ幼児期にあり、成熟した技術、とりわけ成功する分散型アプリケーションを支えられるアプリケーションプラットフォームが生まれていないのは事実です。しかしArcBlockをはじめとする技術チームは、この苦境を一刻も早く過去のものにするため、昼夜を問わず努力しています。

「分散型アプリケーション」はルールを破ることで非対称な競争優位を得なければならない

一般の人々は、「分散化」されているという理由でアプリケーションを好きになるのではありません。自分の問題を解決してくれるから使うのです。

したがって、「分散化」のためだけにアプリケーションを「分散化」してはなりません。「分散型アプリケーション」の鍵は、解決すべき問題を見つけ、その問題を「分散化」された方法で解くことにより、ほかの方法よりN倍優れた結果や、圧倒的ともいえる非対称な競争優位を得ること、あるいは既存のルールを破ることです。この問いに答えられたなら、おめでとうございます。その「分散型アプリケーション」が成功しない方が難しいでしょう。

たとえば、ピアツーピアの暗号資産であるビットコインは数多くのルールを破り、現実の問題も解決しました。そのためPaypalなど従来のデジタル通貨や決済手段と比べ、非対称な競争優位があります。ビットコインは遅く、使いにくいにもかかわらず、過去10年間で急速に成長しました。

現在のコンピューターアプリケーションやインターネットアプリケーションも、完璧にはほど遠いものです。「あらゆるルールを破る」という視点で考えれば、分散化によってより完全に解決できる、実行可能な場面を数多く見つけられます。中には長年の夢だったものの、ブロックチェーンが生まれるまでは技術的に実現できなかった問題もあります。そのため私たちはさまざまな妥協案を設計し、中には妥協があまりにうまくいったため、それが妥協の産物であることを忘れてしまったものさえあります。しかし現在は技術的に可能になり、まさにそうした問題を解決するときです。

「分散化」されているかどうかは、一般ユーザーが気にする問題ではない

「分散化」は主にプロダクトマネージャーや開発者が関心を持つ問題であって、ユーザーが気にする問題ではありません。多くの一般ユーザーは分散化とは何か、それが分散化されているかどうかを理解せず、気にも留めません。自分の問題を解決できるか、使い方が分かるかだけを気にします。

「ユーザー体験」は重要でしょうか? もちろん重要です。しかし、それが根本ではありません。ユーザー体験が良いという理由だけでアプリケーションを好きになるわけではありません。ただし、ユーザーの切実な問題を解決するアプリケーションが優れたユーザー体験も備えていれば、初めて大ヒット製品になれます。

したがって「分散型アプリケーション」の開発者やプロダクトマネージャーは、まず問題の発見と解決に焦点を合わせ、その後でユーザー体験、特に一般ユーザーがどうすれば簡単にこの世界へ入り、新製品で自分の問題を解決できるかに取り組むべきです。

将来、すべてのアプリケーションが「分散型アプリケーション」になる

将来はDAppsというものが存在しないかもしれません。すべてのアプリがDAppsになるからです。

DAppsの中核的な基盤はブロックチェーンではありません。ただし、将来のDAppsを実現するうえでブロックチェーン技術は非常に重要です。ブロックチェーンを使ったアプリがそのままDAppsになるわけではありません。現在DAppsを名乗るものの多くは、ブロックチェーンを使っているだけで、分散化されていません。

なぜ分散型アプリケーションが必要なのでしょうか? 中央集権型アプリケーションでは届かない能力や利用場面を実現できるからです。分散型アプリケーションは分散化そのものを目的にすべきではありません。もともと中央集権化が必要で、その解決策に害がなく、性能も高いアプリケーションもあります。したがって分散型アプリケーションは、本当に分散化が必要な場面でこそ自然な選択肢になります。

なぜ現在、分散型アプリケーションがほとんどないのでしょうか? それは、私たちが実は分散化された世界に生き、使っている無数のものがもともと分散化されていると気付いていないからです。人間社会そのものが分散的な存在です。それは、私たちが呼吸する空気の存在を長い間知らなかったことと似ています。

もう一つの理由は、これまで技術が十分に成熟していなかったことです。10年前、コンピューター科学者やエンジニアは成熟した解決策を示せませんでした。だからこそ、数多くのコンピューター科学者、エンジニア、起業家がブロックチェーン技術に興奮しています。暗号資産の投機で稼げるからではなく、新たな未開の地を見つけ、困難を切り開きながら世界を再構築できるからです。このような機会が前にあったのは、インターネットの黎明期でした。

では、分散型アプリケーションの中核的な基盤とは何でしょうか? 第一に、自律的な個人のアイデンティティです。自分の身元、関係、データ、資産などを、ほかの誰でもなく自分自身が管理します。第二に、仲介者も他者の承認も必要としない、ピアツーピアのデジタル資産(暗号資産やその他のトークン)の移動です。そしてデータが移行可能であることも必要です。自分のデータを自分で管理し、許可した相手だけが利用できます。こうした重要な基盤は、コンピューター技術が今日のブロックチェーン段階まで発展して初めて実現可能になりました。ブロックチェーン以前には、事実上解決できなかった問題です。

原文リンク: 分散型アプリケーションとは、いったい何か?

このページに関わるもの

用語

  • Dapp

    重要な状態が単一の運営者のデータベースだけに存在しないアプリケーション。何をもって分散とするかはプロジェクトごとに大きく異なるため、有用な問いは「どの部分が外部の人に検証できるか」です。

  • Decentralization

    単一の性質ではなく、部分ごとに問うべき問いです。誰がこれを変更できるか、誰が差し止められるか、そして後から誰が検証できるか。多くのシステムは一部の要素だけが分散的です。

  • ブロックチェーン

    記録を暗号学的に結び付け、共通の検証・合意形成ルールに従って取引履歴を確定する分散台帳。