web3.0に関する話題で「スマートコントラクト」という言葉が頻出しています。イーサリアム上で動くスマートコントラクトを実装するためには、開発言語の習得が必要になります。その中でも最も有名なのがSolidityでしょう。この記事では、スマートコントラクトの開発で使う言語の紹介と、特にSolidityとはどんな言語なのか分かりやすく解説します。
・スマートコントラクトとは何か
・スマートコントラクトの開発に必要な言語は何か
・Solidityの特徴と言語仕様について
スマートコントラクトとは
スマートコントラクトの開発に使われる開発言語の紹介を行う前に、まずはスマートコントラクトとは何かということを解説します。
「スマートコントラクト」とは、ブロックチェーンシステム上の概念です。あらかじめ設定されたルールに従って、ブロックチェーン上のトランザクション(取引)、もしくはブロックチェーン外から取り込まれた情報をトリガーにして実行されるプログラムを指します。
ここでの「スマート」とは「賢い」ではなく、「自動的に実行される」という意味で用いられています。コンピューターサイエンティスト ニック・サボ(Nick Szabo)氏は1990年代にスマートコントラクトの一例として自動販売機を挙げました。購入者が欲しい商品を選択し、代金を投入するという、設定されたルールが満たされると、自動販売機がその商品を払い出すというプログラムが自動で実行されるというものです。そのため、スマートコントラクトは「透明な自動販売機」と表現される事もあります。
また、スマートコントラクトの成り立ちは、当然ながらブロックチェーンと切り離せません。その歴史を振り返ると、まずサトシ・ナカモト(Satoshi Nakamoto)氏が2008年に発表したホワイトペーパー「Bitcoin: A Peer-to-Peer Electronic Cash System」によって(ビットコインの)ブロックチェーンが発表されました。その後、 ヴィタリック・ブテリン(Vitalik Buterin)氏が2013年に発表したホワイトペーパー「Ethereum: A Next Generation Smart Contract & Decentralized Application Platform」によってイーサリアムのブロックチェーンに実装可能なスマートコントラクトが世に広く提案されました。
前述の通り、スマートコントラクトという言葉自体は1990年代から使用されており、ブロックチェーン特有のワードではありませんでした。しかし、イーサリアムのブロックチェーンに実装可能なスマートコントラクトが世に広く提案されて以来、「スマートコントラクト」といえば、ブロックチェーンにおけるものという認識となりつつあります。
スマートコントラクトの開発言語について
スマートコントラクトについて解説したところで、続いてはスマートコントラクトの開発に必要な開発言語を紹介いたします。
現在、最も活発にメンテナンスされている言語は以下の 2 つです。
・Solidity
・Vyper
また、経験豊富なデベロッパーであれば、イーサリアム仮想マシン用の中間言語である Yul や、Yul を拡張した Yul+を使うのもよいでしょう。開発中の新しい言語に興味があり、テストに協力したいとお考えの場合は、Fe というまだ登場したばかりのスマートコントラクト言語を試してみることもできます。
初心者向けに多くのチュートリアルや学習ツールが存在し、大きなデベロッパーコミュニティもあることから、ご紹介した開発言語の中で最もポピュラーな「Solidity」について次章より詳しく解説していきます。
Solidityとは
Solidityは、イーサリアムで使われるプログラム言語です。
以下、特徴と言語仕様について解説します。
特徴
Solidityは、JavaScriptの文法に似たプログラミング言語です。
そのため、JavaScriptの実装経験があれば、Solidityを利用したEthereum(イーサリアム)上で動作するプログラムを作成することが可能という特徴があります。コントラクト指向(取引処理を実行させる目的に特化した)の高水準言語で、どんなプログラムでも記述できる学びやすい言語です。
JavaScriptの概要と学習手順については、下記の記事で詳しく解説しています!
言語仕様
Solidityで使用する、主な言語仕様を簡単にご紹介します。
Contractについて
「Contract」の書き方をご紹介します。
オブジェクト指向言語のクラスと、SolidityのContractは似ていて永続的状態変数を所持しています。
記述方法は次のようになります。
contract Contract名 {
//処理を記述するブロック
}
コメントについて
「コメント」の書き方をご紹介します。
Solidityでは、Contractとfunctionの各関数の働きの説明コメントを、それぞれ「@dev」で記載します。「@title」「@author」「@notice」等を用います。
単一行のコメントには「//」を最初に付けて記載し、複数のコメントには「/* ~ */」を最初と最後に記載します。
「Hello world」の出力方法について
「Hello world」の書き方をご紹介致します。
Hello worldは、簡単なスマートコントラクトのコードを作成可能です。「get()関数」が呼び出されたら「Hello World」を返すコードを簡単に書くことができます。contractをHelloWorldと書き、functionに「Hello World!!」をreturnする文字列を定義します。
コードの記述は次のようになります。
contract HelloWorld {
function hello() constant returns (string retVal) {
return “Hello World!!”;
}
}
//実行結果は「Hello World!!」となります。
データ型について
「データ型」には2種類あります。それぞれの特徴をご紹介しましょう。
Solidityは静的型付け言語なので、変数を定義する際のデータ型を明示します。データ型には「基本型」と「参照型」があります。
「基本型」は「値そのもの」の変数が格納されます。「参照型」は「値を格納しているメモリ上のアドレス(参照)」が格納され、データの保存場所(Data location)とも言えるでしょう。
変数の宣言について
「変数の宣言」をご紹介します。
Solidityは変数を定義する際に、格納するデータ型を明示します。符号付整数の「int型の変数x」を宣言するには「int x;」や「int x = 10;」と明記します。
「constant」を付けると定数を定義でき、「型名」「修飾子」「変数名」の順番で明記されます。型名を「var」とすると変数型の推測が可能です。
まとめ
この記事では、スマートコントラクトの開発で使う言語の紹介と、特にSolidityとはどんな言語なのかについて解説しました。
記事の最後にもう一度内容を振り返ってみましょう。
・「スマートコントラクト」とは、あらかじめ設定されたルールに従って、ブロックチェーン上のトランザクション(取引)、もしくはブロックチェーン外から取り込まれた情報をトリガーにして実行されるプログラムのこと。
・スマートコントラクトの開発に必要な言語は、Solidity、Vyper、Yul 、Yul+、Feがある。
・ Solidityは、コントラクト指向(取引処理を実行させる目的に特化した)の高水準言語である。
・Solidityは、JavaScriptの文法に似ているという特徴を持っている。
SolidityやJavaScriptを短期間かつ効率的に学びたい方は
「独学だと分からないことが多すぎる」「プログラミングをより現場に近い形で学びたい」「学んだ後にどう収益に繋げればいいの?」と考えている方も多いでしょう。
そんな方には、現役エンジニア講師在籍/案件獲得サポートもあるプログラミングスクールで学ぶのがおすすめです。都度検索しながら知識を補完していくのではなく、体系立てて学ぶことで短期間かつ効率的にプログラミングを習得することが可能です。
「即戦力になれる!稼いでいけるようになれる!」プログラミングスクールを紹介した記事をこちらに記載しておきますので、是非ご覧ください。




コメント