「Solidityとは?」

英語が得意な方はこう答えるでしょう。「固体でしょ?」と。

しかし、ここで問題になっているのは直訳ではありません。皆さんが興味あるのは「イーサリアムのSolidity」の方でしょう。

単刀直入に言います。Solidityはプログラミング言語です。詳しくは、イーサリアムがスマートコントラクトを実装するために開発した独自のプログラミング言語です

Solidityが開発されたのは最近であるので、その特徴や勉強方法が分からない方は多いと思います。

今回はその特徴を含め、勉強方法を提示し、さらに実際にSolidityのコードを書いてみます!Solidityを勉強したいと思った方はここからSolidity Lifeを始めましょう!


​Solidityの特徴

​コントラクト指向言語

Solidityが開発されたのはマートコントラクトをより簡易に記述するためです。

スマートコントラクトの概念自体は1994年にNick Szaboというアメリカのコンピュータ科学者が提唱していました。その後ブロックチェーンの概念が出てきて、イーサリアムはブロックチェーンにスマートコントラクトを実装しようとしました。その際にスマートコントラクトに特化したプログラミング言語がまだ存在しなかったので、EVMとともにSolidityが開発されました。EVMの説明は後程します。

スマートコントラクトは「ある一定の条件を満たした時に自動的に契約内容が執行される契約」のことです。ブロックチェーンはその中身の改竄が非常に難しいことで知られていますが、スマートコントラクトにもその事実は当てはまります。つまりスマートコントラクトは一度ブロックチェーン上に載せてしまうとその内容を変更するのは困難になります(一般にアップグレーダビリティ問題と呼ばれます)。Solidityはその問題にも配慮した設計になっています。スマートコントラクトについて詳しく知りたい方は以下のリンクをクリックしてください!

目次スマートコントラクトとはスマートコントラクトのメリット スマートコントラクトの問題点・課題・脆弱性スマートコントラクトの将来性・活用事例スマートコントラクトの気になる疑問を解決!スマートコントラクトまとめ スマートコントラクトとは 一言で言うとスマートコントラクトとはプログラムに基いて自動的に実行される契約のことです。これだけだと具体的なイメージがわからないと思うので詳しく解説していきます。 ブロックチェーンを用いたスマートコントラクトの仕組み スマートコントラクトをブロックチェーンと組み合わせることで、当事者間の私的な取引をプログラムとしてブロックチェーン上で記載し、契約の執行条件が満たされたら自動的に契約が執行される仕組みを作ることができます。これにより取引に付随する様々な作業を自動で執行できるようになり不正取引が減ったり、世の中の仲介業者がやっていることを自動化できるなど、かなり画期的で、今後の世界を変える可能性を秘めています。 そもそも契約とは、 契約定義イベント発生価値の交換、契約執行決済 という4つでできていて、スマートコントラクトでは、2〜4を自動で行うことができます。 ですが、これでもまだイメージが掴めないと思うので身近な具体例を用いて考えてみましょう。 スマートコントラクトの身近な具体例 実はスマートコントラクトの概念は、ビットコインができるよりも昔からある概念です。1994年にNick Szaboというコンピューター科学者・法学者・暗号学者によって提唱されていて、初めに導入された例として自動販売機を上げています。自動販売機はお金を入れると商品が自動で出て来ます。これは人と人との間で売買の合意があるわけでもなく、何かの売買契約書を交わしたわけでもなく、機械によって自動で執行された契約という意味では、スマートコントラクトの事例であるといえます。上の契約とは、の話に当てはめると、 制約条件を満たす額のお金(買うものの値段)を入れてボタンを押すと、商品が出て来るという契約を定義する人が訪れてお金を入れてボタンを押す商品が出て来るお金が自動販売機のものになる と言った工程のうち2~4は自動で執行されます。 スマートコントラクトのメリット


​高級言語

​この「高級」の意味は一般的な意味とは異なります。プログラミング言語内にレベル付けがあるわけではなく、ここでの意味は「自然言語、つまり人間が使う言語に似ている」という意味です。プログラミング業界で高級言語はこのような意味で用いられます。

一方で、低級言語とは人間が使う言語と相対的に異なっている言語、つまり機械が理解しやすいような言語であるということです。人間が理解しやすい言語、機械が理解しやすい言語、この部分は後で再び解説します。

Solidityは高級言語、つまり人間が比較的理解しやすい言語です。コード内では様々な英単語が使われます(contract, eventなど)。​

EVMとは?

EVM、この単語を聞くのは恐らく初めてでしょう。もっと簡単にSolidityだけを知りたいという方は読み飛ばしてください。しかしながら、EVMはSolidityをしっかり理解する上で欠かせないものだと言えるでしょう。

EVMはEthereum Virtual Machine(イーサリアム・ヴァーチャル・マシーン)の略です。なぜこの機械が必要になるのでしょうか?

先ほども書いたように、Solidityは高級言語で人間が理解しやすいようにできています。しかし、機械にとってはとても不都合な言語なのです機械は0と1が並んだバイトコード(機械語)を何よりも好みます。ただSolidityでコードを書いたとしても、それをコンピュータが実行してくれないと意味がありません。EVMはその機械語を実行するための場です。

流れは次のようになります。①Solidityでコードを書く②そのコードを機械語に翻訳する(コンパイルするともいいます)。③その機械語をEVMで実行する。ほとんどのプログラミング言語は翻訳が必要なので、この流れはいろいろな場面ででてきます!


​Solidityの勉強方法

​Solidityがどんな言語なのか大まかには理解できたと思います。しかし、「Solidityを勉強したいと思っても何をすればいいの?」と思っている方がほとんどだと思います。ここではおすすめのサイトや本を紹介します。是非今後のSolidityの勉強に役立ててください!

ウェブサイト

​CryptoZombies(クリプトゾンビーズ)

​Loom Networkが提供する無料で遊びながらSolidityを勉強することができるサイトです!遊びながらというのも自分たちで一つのゾンビゲームを作っていくのです。ここでSolidityの基礎を十分に身に付けることができます。ここで基礎を固めたら、その後自分でDapps(分散型アプリケーション)を作ってみるのもいいかもしれません!

Solidity Documentation

​Solidityに関することでわからないことがあったらこのサイトに行きましょう!大抵の事は載っています。残念ながら元の資料は英語で、まだ日本語に翻訳されていません。勉強が進んできたら、このドキュメントを読んでみるのもいいかもしれません。

書籍

​ブロックチェーンアプリケーション開発の教科書

​DMMのエンジニアによって書かれたブロックチェーンを体系的に勉強できる本です。Solidityに限らず、ブロックチェーンの勉強を一からしたいと思っている方にもおすすめです!この本は、前半部分ではブロックチェーンが現在どのようなことに用いられているかの具体例が豊富に記載されています。Solidityを使ったスマートコントラクトの記述は後半部分で解説されます。必要なソフトをインストールするところから解説しているので、初心者でもつまずくことなく学ぶことができます。

しかし、後半部分の一部のコードが少し古くなってしまっています。Solidityも日々進化しているのでこの点はある意味仕方ありません。適宜インターネットで調べながら読み進めるのがいいでしょう。

Mastering Ethereum

残念ながらこの本は出版されていません。出版は2019年の初めに予定されていて、原著はもちろん英語で内容はGithub上にあります。この本の著者はAndreas M. Antonopoulosという方で、この方は前著で『Mastering Bitcoin』というBitcoin界隈では知らない人はいないくらい有名な本を執筆しています。本気でSolidityを勉強したいという方にとってこの本は必携となるでしょう。

​Solidityの開発環境

Solidityのコードを書くといっても、プログラミングが初めての方は疑問を山のように持っているでしょう。例えば①コードをどこで書くのか②どうやってSolidityのコードを機械語に翻訳するのか③どうやって翻訳後のコードを実行するのかなどです。

本来①、②、③のための環境が別々に用意する必要があります。プログラミングを始める際にはよく言われるのですが、開発環境を用意するのが一番つまづきやすいポイントだと言われます。今回はこの①、②、③の機能が全て入っている統合開発環境というものを紹介します!

統合開発環境 Remix

RemixはSolidityのコードを書き実行することができる統合開発環境です。ブラウザ上の統合開発環境なので、わざわざインストールする必要がありません。試しにコードを書いて実行してみましょう!

"Hello world"を出力してみよう!

​まずはRemixを検索しましょう。以下のような画面が出てきます。

これがRemixの初期画面です。ここにHello_Worldファイルを作成しましょう。すると次のような画面になります。

ファイルの末尾のsolは「このコードはsolidityで書かれてるよ」ということを示すためのものです(一般には拡張子と呼ばれます)。ここにコードを書いていきます。今回は"Hello world!!"を出力するためのコードを書いていきます。

さて、このコードを機械語に翻訳しましょう!右上に赤い文字でCompileと書かれているのが見えると思います。そこをクリックし、その後Start to compileという部分をクリックしてください。

これでコンパイル完了です!次に、Runというタブをクリックしてください。ここでEnvironmentがJavaScript VMであることを確認してください!そうしないとこのコントラクトを実行することができません。そしてDeployというボタンをクリックしてください。

これで準備完了です。下に新しいボタンが出てきたと思います。そこをクリックするとsayというボタンが出てきます。そのボタンをクリックしてください。関数が実行されます。

無事”Hello world!!"が表示されましたね!"Hello world!"の出力はプログラミングをやる上で入門中の入門です。他のプログラミング言語を勉強する時にも、どうしたら”Hello world!"を出力のか考えてみるのもいいでしょう。

​​まとめ

​​Solidityはとても将来性のあるプログラミング言語です。イーサリアムが今後より世界的に発展していくことを考えると、Solidityでスマートコントラクトを記述できるプログラマーは非常に必要な人材になる可能性があります。これを機にSolidityを始めてみましょう!

Solidityまとめ

  • イーサリアムが開発したプログラミング言語
  • コントラクト志向言語
  • Solidityを勉強するなら、CryptoZombies!