solidityとは?イーサリアムで使われるプログラミング言語の特徴を解説!
「Solidityとは?」
英語が得意な方はこう答えるでしょう。「固体でしょ?」と。
しかし、ここで問題になっているのは直訳ではありません。皆さんが興味あるのは「イーサリアムのSolidity」の方でしょう。
単刀直入に言います。Solidityはプログラミング言語です。詳しくは、イーサリアムがスマートコントラクトを実装するために開発した独自のプログラミング言語です。
Solidityが開発されたのは最近であるので、その特徴や勉強方法が分からない方は多いと思います。
今回はその特徴を含め、勉強方法を提示し、さらに実際にSolidityのコードを書いてみます!Solidityを勉強したいと思った方はここからSolidity Lifeを始めましょう!
- イーサリアムが開発したプログラミング言語
- コントラクト志向言語
- Solidityを勉強するなら、CryptoZombies!
Solidityの特徴
Solidityの特徴①コントラクト指向言語
Solidityが開発されたのはスマートコントラクトをより簡易に記述するためです。
スマートコントラクトの概念自体は1994年にNick Szaboというアメリカのコンピュータ科学者が提唱していました。その後ブロックチェーンの概念が出てきて、イーサリアムはブロックチェーンにスマートコントラクトを実装しようとしました。
その際にスマートコントラクトに特化したプログラミング言語がまだ存在しなかったので、EVMとともにSolidityが開発されました。EVMの説明は後程します。
スマートコントラクトは「ある一定の条件を満たした時に自動的に契約内容が執行される契約」のことです。
ブロックチェーンはその中身の改竄が非常に難しいことで知られていますが、スマートコントラクトにもその事実は当てはまります。つまりスマートコントラクトは一度ブロックチェーン上に載せてしまうとその内容を変更するのは困難になります(一般にアップグレーダビリティ問題と呼ばれます)。Solidityはその問題にも配慮した設計になっています。
Solidityの特徴②高級言語
この「高級」の意味は一般的な意味とは異なります。プログラミング言語内にレベル付けがあるわけではなく、ここでの意味は「自然言語、つまり人間が使う言語に似ている」という意味です。プログラミング業界で高級言語はこのような意味で用いられます。
一方で、低級言語とは人間が使う言語と相対的に異なっている言語、つまり機械が理解しやすいような言語であるということです。人間が理解しやすい言語、機械が理解しやすい言語、この部分は後で再び解説します。
Solidityは高級言語、つまり人間が比較的理解しやすい言語です。コード内では様々な英単語が使われます(contract, eventなど)。
SolidityのEVMとは?
EVM、この単語を聞くのは恐らく初めてでしょう。もっと簡単にSolidityだけを知りたいという方は読み飛ばしてください。しかしながら、EVMはSolidityをしっかり理解する上で欠かせないものだと言えるでしょう。
EVMはEthereum Virtual Machine(イーサリアム・ヴァーチャル・マシーン)の略です。なぜこの機械が必要になるのでしょうか?
先ほども書いたように、Solidityは高級言語で人間が理解しやすいようにできています。しかし、機械にとってはとても不都合な言語なのです。機械は0と1が並んだバイトコード(機械語)を何よりも好みます。ただSolidityでコードを書いたとしても、それをコンピュータが実行してくれないと意味がありません。EVMはその機械語を実行するための場です。
流れは次のようになります。①Solidityでコードを書く②そのコードを機械語に翻訳する(コンパイルするともいいます)。③その機械語をEVMで実行する。ほとんどのプログラミング言語は翻訳が必要なので、この流れはいろいろな場面ででてきます!
Solidityの勉強方
Solidityがどんな言語なのか大まかには理解できたと思います。しかし、「Solidityを勉強したいと思っても何をすればいいの?」と思っている方がほとんどだと思います。ここではおすすめのサイトや本を紹介します。是非今後のSolidityの勉強に役立ててください!
Solidityの勉強方法①ウェブサイト
CryptoZombies(クリプトゾンビーズ)
Loom Networkが提供する無料で遊びながらSolidityを勉強することができるサイトです!遊びながらというのも自分たちで一つのゾンビゲームを作っていくのです。ここでSolidityの基礎を十分に身に付けることができます。ここで基礎を固めたら、その後自分でDapps(分散型アプリケーション)を作ってみるのもいいかもしれません!
Solidity Documentation
Solidityに関することでわからないことがあったらこのサイトに行きましょう!大抵の事は載っています。残念ながら元の資料は英語で、まだ日本語に翻訳されていません。勉強が進んできたら、このドキュメントを読んでみるのもいいかもしれません。
Solidityの勉強方法②書籍
ブロックチェーンアプリケーション開発の教科書
DMMのエンジニアによって書かれたブロックチェーンを体系的に勉強できる本です。Solidityに限らず、ブロックチェーンの勉強を一からしたいと思っている方にもおすすめです!この本は、前半部分ではブロックチェーンが現在どのようなことに用いられているかの具体例が豊富に記載されています。Solidityを使ったスマートコントラクトの記述は後半部分で解説されます。必要なソフトをインストールするところから解説しているので、初心者でもつまずくことなく学ぶことができます。
しかし、後半部分の一部のコードが少し古くなってしまっています。Solidityも日々進化しているのでこの点はある意味仕方ありません。適宜インターネットで調べながら読み進めるのがいいでしょう。
Mastering Ethereum
残念ながらこの本は出版されていません。出版は2019年の初めに予定されていて、原著はもちろん英語で内容はGithub上にあります。この本の著者はAndreas M. Antonopoulosという方で、この方は前著で『Mastering Bitcoin』というBitcoin界隈では知らない人はいないくらい有名な本を執筆しています。本気でSolidityを勉強したいという方にとってこの本は必携となるでしょう。
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を勉強するなら、CryptoZombies!
Solidityはとても将来性のあるプログラミング言語です。イーサリアムが今後より世界的に発展していくことを考えると、Solidityでスマートコントラクトを記述できるプログラマーは非常に必要な人材になる可能性があります。これを機にSolidityを始めてみましょう!