はじめに
この記事は Ethereum Advent Calendar 2017 の参加記事です。12月22日(金)の担当です。
ぼくは大学生だった2006年頃に「Web 2.0」の熱気にモロにあてられ、以降約10年間ほど広大な Web の世界を旅することを趣味としながら、Web アプリケーション開発をメインのお仕事として生計を立てて今日まで暮らしました。そんな自分が2017年に新しく興味を持つことになった Ethereum について、Web アプリケーション開発者向けの文章を書いてみようと思います。
書くにあたってのモチベーションは、こんな感じでしょうか。
- ここまでに自分が学んだことを、この機会に整理しておきたい
- 自分のまわりにたくさんいる Web 方面の人々と Ethereum のおもしろさを共有したい
それでなくとも、これを読んでいるみなさんは今年「FinTech」という言葉をたくさん見聞きしてきたことでしょう。ぼくがこんな記事を書かなくとも、この手の情報はとめどなく流れ込んでくる最近です。その中でぼくは、テクノロジ的な面にフォーカスして書くことで Web 方面のエンジニア向けの記事とします。ちょうど今日、日本時間の12月22日には 1 BTC の価格が 50 万円ほど下がったりもしていますが、Bitcoin で大儲けしたい!とか FinTech ビジネスで財を成したい!という人にとってはつまらない内容になるでしょう。
さて、少しだけ話を戻して。なぜ大学生だった当時のぼくが Web 2.0 と呼ばれた潮流に惹かれたかというと、テクノロジによって人々のコミュニケーションのありさまや考え方を Hack できるようになると感じたからです。ブログ、SNS、Twitter などなどの登場によって、ぼくらの日々が API 化していったからですね。事実、この10年の間にぼくらの日々は Hack され続け、2017年の日本では「インスタ映え」が流行語になりました。「写真を撮る」という行為がテクノロジによって Hack されたのです。写真を通したコミュニケーションのあり方がものすごい勢いで変わってきました。
そして、似たような名前を持つ書籍「お金2.0」を読んでいる今年のぼくは、同様に「これから、人間とお金の関係が Hack されていくのだ」と感じるから興奮しているのです。10年後、人々のお金に対する認識や考え方は今とは違ったものになっているでしょう。それも、テクノロジがもたらす変化によって。
記事のつくり
なるべく「この記事を上から下まで読めば、Ethereum の概要を理解できる」状態を目指します。
すべての枠が生まり今日まで続いてきた Ethereum Advent Calendar 2017 の記事たちが有益なものばかりなので、ひとつひとつの項目の詳細は積極的にそれらの記事に委ねてリンクしていきます。
Ethereum とは?
前置きが長くなりましたが、ここからは Ethereum について述べます。現時点での公式サイトには、以下の説明文が置いてあります。
Ethereum is a decentralized platform that runs smart contracts: applications that run exactly as programmed without any possibility of downtime, censorship, fraud or third party interference.
- Ethereum はスマートコントラクトを動作させるための分散プラットフォームです。
- そこで動くアプリケーションにはダウンタイムも、検閲も、イカサマも、第3者による干渉もなく、プログラムされた通りに動作します。
スマートコントラクトとは?
Ethereum の説明の中に耳慣れない言葉が出てきました。スマートコントラクトとはなんでしょうか。雑に邦訳すると「賢い契約」「ちゃんとした契約」になります。
Smart contract - Wikipedia によれば、この概念に「スマートコントラクト (Smart Contract)」という名前がついたのは1996年のことだそうです。最近生まれた概念じゃないんですね!当時は実装例として「自動販売機」が挙げられていたそうです。なるほど、言われてみればたしかに「人間を介さずカネとモノを交換できる契約」を体現しているわけです。ぼくも気付かぬうちにスマートコントラクトのお世話になっていました。
ブロックチェーンの登場によってあらためて騒がれるようになった現代のスマートコントラクトは、デジタル版・ソフトウェア版・インターネット版といったところでしょうか。
スマートとは言うものの
ぼくはしばらく、スマートコントラクトという言葉から受ける印象を素直に受け取って「スマートな契約」というニュアンスで捉えていました。しかし数ヶ月間に渡ってスマートコントラクトのことを考えたりそれで遊んだりしているうちに、実態はもっと「堅い」というか、ハードな契約という印象を抱くようになってきました。きっかけのひとつとなったのが ALISのICOについての技術的FAQ に書かれている以下の一文です。
WEBの開発というよりは組み込み系等の方が感覚的に近い。
ぼくは組み込み系の開発に携わったことがないのでわかったようなことは言えませんが、一方で Web アプリケーションの「問題があったら、変更してデプロイすればいい」という感覚はすっかり染み付いているので、それが通用しないのだ、という意味だと理解しました。
自動販売機でのお買い物では「あ、やっぱコレじゃないのにしたい」と思っても返品はできませんよね。どうしても返品したかったら人間を呼んでくることになるでしょう。そう考えると、スマートコントラクトというのは「契約の強制執行装置」なのではないか、と思えるわけです。約束を破ったり数値をちょろまかしたりはできないけれど、同時に、融通の利かないものでもあると。
この性質はしっかりと押さえておくべきだと思います。都度都度で柔軟に扱う必要のない手続きや、事前にすべてのロジックを決めておける対象でなければ、運用中に困ってしまうかもしれませんね。
Solidity ではじめてみよう
なんとなく雰囲気を掴めた(?)ところで、文章を読まされるのも飽きてきたでしょうから実装寄りの話をしていきましょう。
Ethereum のブロックチェーン上で動作するスマートコントラクトを実装する現時点での有力な選択肢として Solidity というプログラミング言語があります。まずはこれに触れてみるのがおすすめです。なんとも便利なことに、Ethereum Advent Calendar 2017 には Solidity のチュートリアルとして使える記事がたくさんありますね〜。
- 12月2日の記事
- 12月4日の記事
- 12月6日の記事
- 12月13日の記事
ちなみに Ethereum 方面のツール群は Golang、Python、JavaScript で書かれているものが多く、これらの言語が得意な人にとっては手を出しやすいでしょう。
Solidity の雰囲気
GitHub のシンタックスハイライトが Solidity に対応しておらず、すっぴんの状態で載せてもわかりにくいので BasicToken.sol を手元のエディタに放り込んで着色したときのスクリーンショットを載せます。
ぼくがこれまで触れてきた言語の中でいうと、コード面は Java に似ている感じですね。言語仕様もそこまで大きくなく、なにかしら ALGOL 系の言語をひとつでも触ってきた人なら基本的なデータ型や文法などはスッと習得できると思います。
先に紹介したチュートリアル的な記事たちに従ってひとつでもオリジナルのトークンをつくってみると、見える景色が一気に広がるはずです。
おわりに
つい最近も Apple が App Store Review Guidelines に「アプリ内でガチャを提供するときは確率をぜったいに表示しておけよ」という項目を追記したことが話題になっていました。また、クローズドな環境においてよくないことをしたのがバレて炎上する事案をいくつも見かけた今年でした。社会の情報化がますます加速し、ありとあらゆるものが記録されてログに残るようになると、人々は必然的に「高い透明性」を求めるようになるのだと思います。
そこにスマートコントラクトがうまくハマれば、公的な立場の人が約束を守らないとか、よくわからないことにお金を使ってしまうとか、言った言っていないで揉めちゃうとか、そういうことを減らしていけるのかな〜と妄想しています。「動作するドキュメント」に倣って「動作する約束」とでも呼びましょうか。よくないことをして炎上したい人なんていないでしょうから、よくないことをせずに済む仕組みが整備されていくといいなあ。
ここまでお読みいただき、ありがとうございました。もし少しでも「おもしろそう!」と思えた人がいたのなら、いっしょにわいわいやりましょう!12月1日の記事である Ethereum 開発者向けコミュニティを作ったよ にて紹介されている「Hi-Ether」の Slack にぼくもいますので、お話相手しにきてくださいまし〜。
冒頭にも書いた通り、ここ数年ぼくは Web 界隈でワイワイやってきて、おかげで業界の知り合いも増えたのですが、Ethereum 方面のコミュニティをのぞいてみると、金融系の界隈からやってきた人たちもいるので自分にとっては顔ぶれが新鮮でおもしろいです。
たまたま流れてきたメルカリの求人を見ていたら「ソフトウェアエンジニア(Blockchain)」と書いてあって、人材市場的にもこのあたりは熱くなってきそうですね。数年後には「フルスタックエンジニア」と言われるときのスタックがもう2〜3層ほど厚くなっていそうで、ソフトウェアエンジニアってのはつくづく退屈しない職種だなぁと思います。