はじめに
第1章 ブロックチェーンのアプリケーション
第2章 Nuxtアプリでブロックチェーンに接続してみよう
第3章 はじめてのブロックチェーンアプリケーション
第4章 はじめてのデプロイ
第5章 プライベートチェーンとつなぐ
第6章 Firebase Authenticationを使ってMetaMaskを不要に
第7章 PWAでアプリの課題も解決
付録A 付録 各種ツールやソフトウェアのインストール方法
あとがき
2008年にサトシ・ナカモト論文が発表され、2009年の1月3日に世界で一番最初のブロックチェーンである、ビットコインがローンチされました。それ以降、ブロックチェーンは不特定多数の間で共有され、誰か特定の人を信用することをしていないにも関わらず、誰もが信頼のおける台帳として、10年以上止まることなくずっと稼働しています。そのビットコインは、「あるアドレス」から「あるアドレス」へのコインの移動を誰からも信頼のおける形で実施できる、ということに最大の利点をおいて開発された仕組みです。そのため、柔軟にアプリケーションと連携することが想定されておらず、新しい体験を生み出すには少々障壁がありました。
そこで、Ethereum(イーサリアム)が、グローバルでオープンな分散型アプリケーションのプラットフォームとして作られました。Ethereumは、2013年にVitalik Buterinにより示され、2014年にPoCが始まり、2015年からベータとして稼働しています。Ethereum上で書かれたコードは、世界中のどこからでもアクセス可能であり、プログラムした通りに正確に動作し、デジタルな価値をコントロールすることを可能にしました。このEthereumができたことにより、DApps(Decentralized Applications)と呼ばれるアプリケーションの開発が容易になり、様々なアプリケーションが開発されるようになりました。
Ethereumを使ったアプリケーションには、Web3.0という概念を取り入れたものが多く存在します。Web3.0では、データをどこか特定個人や企業のもとに置くのではなく、分散化されたブロックチェーンやストレージを使います。そして、信頼のベースをブロックチェーンが担い、誰か特定の個人や企業を信じることなく、安全にデータを預け、アプリケーションを使う体験ができるといったものです。Ethereumのスマートコントラクトは、このWeb3.0のアプリケーションを構築するために最適化されています。その魅力に惹かれ、多くの開発者がEthereum上でアプリケーションを開発するようになりました。
そして、アプリケーション開発を効率化するために、標準化も進んできました。ERC20は、トークンを発行するコントラクトとして標準化されました。これにより、新しい仮想通貨が簡単に作れるようになり、2016年から始まるICOブームが起きました。それから、仮想通貨の実体のない値上がりバブルに乗り、多くの通貨のプラットフォームとして、Ethereum上にアプリケーションが構築されました。アプリケーションの数を増やすこと、開発者の数を増やすことには貢献しましたが、過度な値上がり期待による過度な熱狂と、それに乗じた詐欺なども横行。結局実体のないバブルは2018年にはじけて、過度な期待は過ぎ去りました。
こういった状況でも、ブロックチェーンのアプリケーション開発を続ける者は、絶えることがありませんでした。本当にブロックチェーンがその価値を発揮する使い方や、未来のアプリケーションの形を実現する方法を探求し、開発の灯は消えませんでした。そして、金融以外にもトレーサビリティやゲームの分野でブロックチェーンがその効果を発揮することがわかってきました。そのため、活発に開発が進み、実際にプロダクトとして稼働するものが増え続ける状態に入ってきています。
この状況で、一般コンシューマ向けのアプリケーションもすこしずつ広がりを見せ、Webアプリケーションの形態で実装されるものが増えてきました。EthereumのWebアプリケーション開発は、ほぼJavascriptで行われています。また、Ethereumでは、リファレンスとなるようなものではReactが使われることが多く、Reactに対しては情報が出回り、便利なライブラリーも登場するようになりました。
一方日本では、Vue.js、そしてNuxt.jsを使ったアプリケーション開発に注目が集まり始めました。その一方、Nuxt.jsを使ったEthereumのアプリケーションの開発の情報は、あまり多くは出回っていません。筆者はそんな中、cheerfor(https://cheerfor.net)という、Nuxt.js上でEthereumを取り扱うアプリケーションを開発しました。このアプリケーションは、誰が誰を応援したという事実をブロックチェーンに書き込み、応援された人にはポイントがたまっていき、応援された人はたまったポイントを使って支援を受けられる、というものです。本書では、これまでNuxt.jsを使ったEthereumのアプリケーションを開発した経験をもとにして、より多くのアプリケーションが日本から産まれることを期待し、その一助となればと考え執筆いたしました。よって、これを読んで、Nuxt.jsを使って作られたブロックチェーンのアプリケーションがひとつでも多く産まれれば、この上ない喜びとなります。ですので、なにか皆さんのアイデアをぜひNuxt.js + Ethereumでプロダクトの形にして、世の中にどんどんリリースしてください。
本書では、Nuxt.jsとEthereumでのアプリケーション開発について深く触れていますが、Nuxt.jsそのものや、Ethereumにおけるスマートコントラクト開発においてまでは触れられませんでした。Nuxt.jsにおいては、優秀な書籍やサイトがたくさん出回っているので、そちらを参考にするといいでしょう。Ethereumに関しては、Mastering Ethereum (https://github.com/ethereumbook/ethereumbook) やCryptoZombies (https://cryptozombies.io/jp/) で学ぶことができます。こういったものを併用し、いいブロックチェーンアプリケーションを開発していきましょう。
ブロックチェーンは、一言で説明すると台帳です。この台帳は不特定多数の間で共有され、しかも誰もが読み書きできます。その上に、書き込まれた内容が書き込まれた当時のまま、書き換えや改ざんされることなくそのまま残っているため、内容を信頼できるという、夢のような特徴を持ちます。そして、この台帳を活用したのが、ブロックチェーンのアプリケーションです。
ブロックチェーンを使ったアプリケーションは、世の中にはまだ多く出回っていません。実装がそんなに簡単ではないこと、ユーザーに強いる負担が大きく、ユーザーが求める体験と負担のバランスが悪いなどといったことが要因と考えられます。たとえば、仮想通貨を必須としたアプリケーションを作るとなると、ユーザーに仮想通貨取引所にアカウントを開設し、KYC(本人確認作業)を行うといった手順を踏ませた上で、それでも使いたいと思わせる体験を提供しなくてはなりません。これは犯罪で得たお金の洗浄を防ぐなど、一定の守らなくてはならないルールがあるので、どうしても必要なユーザーへの負担です。取引所の努力で手間は減っているものの、どうにもなくすことができないユーザー負担が、ブロックチェーンのアプリケーション開発の妨げとなっているのです。誰も犯罪に活用しなければこの負担はいらないのですが、犯罪者が活用したくなるメリットがあるのもこのブロックチェーンの特徴です。
しかし、ブロックチェーンは、仮想通貨だけのための台帳技術ではありません。台帳には仮想通貨のやり取り以外にも、いろいろな情報を書き込むことができます。言い換えると、書き込む情報次第で色々なアプリケーションを作ることができるのです。すなわち、この台帳を使って書き込んだ情報は、改ざんされることなく一生残り、その情報が共有されていることで価値を産むアプリケーションができれば、仮想通貨以外の用途で、ブロックチェーンを使ったイケてるアプリケーションができます。
さて、ブロックチェーンのアプリケーションの最小構成は、ブロックチェーンを動かすサーバーと、フロントエンドのデータを置いておくホスティングサーバーのふたつだけあれば、構築できます。本書では、ホスティングにFirebase Hosting、ブロックチェーンは開発用にすぐに用意できる Ganache、またはすでに共用されているパブリックチェーンのテストネット、そしてAWSのEC2上に構築したプライベートチェーン(自分たち専用のパブリックチェーン)を使って、それぞれのイケてるアプリケーションを動かすための基礎を紹介していきます。