スマートコントラクトの開発で使う言語!Solidityとは【初心者向け】
初心者向けにSolidityとはどんな言語なのか詳しく解説しています。Ethereum(イーサリアム)上で動くスマートコントラクト開発の言語です。これからブロックチェーン技術を使って実装したい人はぜひ知っておきたい技術でしょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
この記事では、Solidityについて解説します。
Ethereum上で動くスマートコントラクトを実装したい方はぜひ知っておきたい技術でしょう。JavaScriptに似た構文を書いてプログラムが動くので、実際に書いて覚えていきましょう。
目次
今回は、Solidityという言語について勉強してみよう。
田島メンター!あまり聞いたことがない言語ですが、どういったものなんですか~?
これはスマートコントラクトを実装するための言語なんだ。具体的な特徴について説明しよう。
はい!お願いします!
Solidityとは
Solidityはコンパイル後、Ethereum(イーサリアム)上で実行可能なプログラム言語です。
Ethereum(イーサリアム)上で実行する場合、Ethereum(イーサリアム)ネットワーク上でコントラクトコードという状態でブロックチェーン上に記録されたコードが実行されることで処理することができます。
仮想通貨の口座開設
Ethereum上で実装されたアプリケーションの利用をするためには、イーサリアム(ETH)で売買するサービスもあるため、仮想通貨の口座開設をしておきましょう。口座開設後、ビットコインやイーサリアムの売買が可能です。
コントラクトコードとは、Ethereum Virtual Machine Code(イーサリアムバーチャルマシンコード)とも呼ばれます。
Ethereum Virtual Machine Codeとは、Ethereum(イーサリアム)仮想マシンで実行するためのコードという意味です。Ethereum Virtual Machine CodeはEVM Codeと略されることもあります。
Ethereum Virtual Machine Code自体は低級の機械言語と呼ばれます。
低級というのは、プログラムとしての水準が低いという意味ではなく、プログラムソースコードをみた時に、人間が理解しづらいものを低水準の言語と言います。
機械言語というのは、コンピューターがプログラムソースコードを読み取った際、そのまま実行することが出来る状態の言語を言います。
機械言語と呼ばれる、コンピューターがすぐに読み取り実行できる状態のコードをバイトコードと呼びます。
Ethereum Virtual Machine Codeが低級の機械言語であることに対して、Solidityは高級言語と呼ばれます。
高級言語とは、低級言語に対する言葉で、人間がプログラムソースコードをみた際、そのまま処理自体を理解することが出来る言語です。
高級言語は高水準言語とも呼ばれ、BASIC、FORTRAN、COBOL、C言語、C++、Java、Pascal、Lisp、Prolog、Smalltalk等の種類があります。高級言語を実行する場合、コンパイルという処理が必要になります。
Solidityをコンパイルする場合は、solcと呼ばれるSolidityコンパイラを介することで、コンピューターで実行可能なEthereum Virtual Machine Codeに変換することができます。
solcはSolidity標準で利用できるコンパイラですが、別にRemix(browser-solidity)というコンパイラも存在します。
Remix(browser-solidity)は、開発環境としても利用できるコンパイラのため、コマンドラインに慣れないエンジニアにとっては、solcよりも使用しやすいのが特徴です。
Solidityの特徴
Solidityは、JavaScriptの文法に似たプログラミング言語です。
その為、JavaScriptの実装経験があれば、Solidityを利用したEthereum(イーサリアム)上で動作するプログラムを作成することが可能という特徴があります。
JavaScript自体は、初心者でも習得しやすい言語と言えます。
JavaScriptの実行自体にはWebサーバー等不要で、Google Chrome等のブラウザとメモ帳等のテキストエディタさえあれば、実装も実行も可能です。
そういう意味でもJavaScriptに似ているSolidityを利用できるということは、プログラミング経験が浅いエンジニアにとっても、学習しやすいといえます。
Solidityという言語についての大まかな概要だね。
JavaScriptを学習していると比較的扱いやすい言語ということですね。
そうだね。C++やPythonを習得していても理解しやすいと思うよ。実際にどのように構成していくかも見てみようか。
Solidityの言語仕様
Solidityの言語仕組みを理解するために、簡単なコードを書いてみましょう。
基本のSolidityの文法
contractで宣言するソースコード
contract Contract名 { //処理を記述するブロック }
解説
Solidityでは、contractと宣言することで、使用するContract名を宣言することができます。
この宣言の{ }で囲まれたブロックにSolidityで実際に処理するコード記載します。
なお、ここで言うブロックとは、ブロックチェーンのブロックではなく、ソースコード内での領域を意味するブロックです。
Hello World!!を表示するSolidityのコード
ソースコード
contract HelloWorld { function hello() constant returns (string retVal) { return "Hello World!!"; } }
表示結果
Hello World!!
このプログラムはhello( )という関数が呼び出された場合、表示結果のようにHello World!!を表示するプログラムです。
関数とは、便利な機能をひとまとめにしたプログラムの集まりです。
今回は、Hello World!!を表示するという部分を便利な機能と考え、関数化しています。
Solidityと文法が似ているJavaScriptの記事も合わせて参考にしてみてください。
解説
1行目の、contract HelloWorld {では、Solidityのcontract名としてHelloWorldを宣言しています。
2行目の、function hello( ) constant returns (string retVal) { で指定された値を返すことを意味しています。
function hello( ) でhello関数を定義しています。
constant は定数を意味します。
returnsは(string retVal) {を呼ぶことで、3行目の値を返します。
値を返すというのは、関数で戻り値と呼ばれ、関数を呼び出した結果、処理が実行された答えのようなものです。
3行目の、return “Hello World!!”;では、Hello World!!を返す処理をしています。
4行目の、}では2行目の処理を終了しています。
5行目の、}では1行目の処理を終了しています。
Solidityの機能
Solidityを使用することでEthereum(イーサリアム)上で何をするかと言うことですが、代表的な利用方法としてスマートコントラクトを実装することができます。
スマートコントラクトとは、ブロックチェーン上で契約関係のプログラムを動作させることができるという特徴があります。
スマートコントラクト以前のブロックチェーンでは、仮想通貨の送受金に関する情報のみをデータとして記録していました。
それだけでも、非常に有用ですが、この送受金の情報以外に、送受金に伴う契約内容を連動させることで、不動産契約や売買契約への活用が可能となります。
そして、スマートコントラクトをいち早く採用したブロックチェーンがEthereum(イーサリアム)です。
Solidityには、truffleやopen-zeppelinというスマートコントラクト開発フレームワークも用意されている点でも、スマートコントラクトを通じたブロックチェーンの学習言語としても環境が整っているといえます。
他のコントラクト開発言語
Vyper
VyperはPythonに似た文法で利用することが出来る言語でSolidityと同じくEthereum上でスマートコントラクトを実装することができます。
Vyperは、セキュリティを高め、エンジニアにとっても書きやすく読みやすいという特徴を持っています。
ただし、2018年初頭の段階では開発途中という印象ではあります。
今回は、Solidityについて解説しました。
スマートコントラクトの実装をやってみたい方は、Solidityを使うのが今は一般的でしょう。これから多くの個人や企業が使う技術になる可能性が高いので、理解しておくと今後役立つでしょう。
Solidityの実際の記述例と、具体的な機能について説明したよ。
スマートコントラクトは契約を自動化するものでしたね。ちなみに開発環境はどういうものがあるんでしょうか?
すぐに触ってみたいならRemixというブラウザ上で使えるものもあるんだ。興味があったら調べてみよう。
そうですね、また見てみます。ありがとうございました!
この記事を監修してくれた方
中本賢吾(なかもとけんご) 開発実績:PHPフレームワークを利用した会員制SNS・ネットショップ構築、AWSや専用サーバー下でLinuxを使用したセキュアな環境構築、人工知能を利用したシステム開発、店舗検索スマホアプリ開発など。 その他にも地域の職業プログラマー育成活動を行い、2018年には小学生がUnityで開発したオリジナルAndroidアプリをGooglePlayでリリース。ゲームで遊ぶより作ろうぜ!を合言葉に、小学生でも起業できる技術力を育成可能で有ることを証明し続けている。 |