Solidityとは?基本文法や実装方法まで実例を用いて詳しく解説

ブロックチェーン上で動くスマートコントラクトを実装する方法の1つとして、Solidityが挙げられます。Solidityを使った開発を進めるには、基本的な文法や使い方を学ぶことが大切です。

この記事ではSolidityの基本文法やスマートコントラクトの実装方法、Solidityを習得するメリットなどについて解説します。

Solidityとは?

Solidityとは、Ethereum(イーサリアム)の共同設立者であるプログラマーのギャビン・ウッドによって開発されたプログラミング言語です。ここでは、Solidityの特徴や用途について解説します。

初心者でも扱いやすいプログラミング言語

Solidityは、スマートコントラクトを作成するための機能を備えたオブジェクト指向のプログラミング言語です。C言語やC++、JAVAなどと同じ高級言語(人間が理解しやすい形式で記述された言語)に分類されます。

スマートコントラクトとは、ブロックチェーンの基盤上で動作する自動プログラムのことです。スマートコントラクトを実装すると、仮想通貨の取引など、条件に応じた行動を自動化できます。

プログラミングの文法がシンプルであることが、Solidityの特徴です。スマートコントラクトの実装経験がない初心者でも、比較的簡単に扱えます。

Solidityの基本的な記法は次の通りです。

最初の行にある「pragma」は、Solidityのバージョンを指定するためのコードです。例えば「pragma solidity ^0.7.0;」と書かれていれば、Solidityのバージョン0.7.0から0.7.9までのSolidityでコンパイルできます。0.8.0以降のバージョンでは正常にコンパイルできません。

スマートコントラクトは、「contract Contract名{}」で定義できます。必要な定数や関数を「{}」内に記述することで、スマートコントラクトの実装が可能です。

ブロックチェーンの実装に利用される

Solidityは様々なテクノロジーを実装できるプログラミング言語であるものの、主にEthereumにおけるブロックチェーンの開発に利用されています。

Ethereumで動作するスマートコントラクトの実装が、Solidityの主な用途です。そのため、Solidityにはブロックチェーンを開発しやすくするための機能が備わっています。

\文字より動画で学びたいあなたへ/

Udemyで講座を探す >

Solidityの基本文法

Solidityの文法は、他の多くのプログラミング言語と似ています。そのため、すでにJavaScriptなどを習得しているエンジニアであれば、簡単に理解することが可能です。スマートコントラクトを実装したい方は、次に紹介するSolidityの基本的な文法を抑えておきましょう。

Contract宣言で処理の実装

Solidityでスマートコントラクトを実装するには、「Contract句」と呼ばれる記法で宣言する必要があります。プログラミングにおける宣言とは、プログラム内で使用する関数や変数などの名前・内容を記述することです。

次の例では、「Hello World」という文字列を表示する機能を持った「SampleContract」という名前のスマートコントラクトを宣言しています。

「function」は関数を宣言するためのコードで、ここでは「get()」という関数を定義しています。「constant returns(string retVal)」の部分は、「get()」が固定の文字列を戻り値として返す関数であることを指定しています。

「return “Hello World”」は、「Hello World」という文字列を返すコードです。これらの指定により、「SampleContract」というスマートコントラクトの「get()」という関数が呼び出された時に、「Hello World」と表示される処理が実装できます。

1つのファイル内にいくつかのContract句を記述し、複数のスマートコントラクトを宣言することも可能です。

区別の使い分けは「大文字小文字」・文末の表記は「;」

Solidityのプログラミングコードでは、処理に関係する文字は半角の記号・英数字で記述する必要があります。

コメントとして記述したコードはSolidity上での処理にはつながらないものの、コードの意味などをメモして後から確認できるため便利です。「//」から行末まで、または「/*」と「*/」で囲まれた部分はコメントとして扱われます。

Solidityのコードでは、小文字と大文字が区別される点に注意が必要です。Contractや関数の名前など、小文字と大文字が違う場合は別のものとして解釈されます。例えば、「get();」という関数と「Get();」という関数は別のものです。

Solidityでは、コードの区切りとして「;(セミコロン)」を使用します。「;」が抜けているとプログラムが正しく動かない場合があるため注意しましょう。

変数や関数の宣言で呼び出せる

Solidityでは、一般的なプログラミング言語と同様に、値を格納するための変数や一定の処理を行う関数を宣言できます。

例えば、変数を宣言するコードは次の通りです。

1行目では整数を格納するためのint型の変数「num」を宣言しています。2行目は文字列を格納するstring型の変数「text」を宣言し、初期値として「HelloWorld」という文字列を設定しています。

関数を宣言するコードの例は次の通りです。

「value」というint型の引数を持つ「SetNumber」という名前の関数を宣言しています。この関数を呼び出すと、「num」という変数を指定した数値に変更することが可能です。例えば、「SetNumber(100);」という形でこの関数を呼び出すと、プログラム内のnumという変数の値が100にセットされます。

Solidityを使ってスマートコントラクトを実装してみよう

Solidityの基本的な文法が理解できたら、実際にスマートコントラクトを実装してみましょう。ここでは、ブラウザ上でSolidityのコードを実行できる開発環境「Remix」を使って、スマートコントラクトを実装する流れを解説します。

まずは、RemixのWebサイト(https://remix.ethereum.org/)にアクセスしましょう。

Solidityファイルを作成

Solidityでスマートコントラクトを実装するには、「Solidityファイル」と呼ばれるファイルを作成する必要があります。Solidityファイルは、Contractを定義するためのファイルです。

ここでは、Solidityファイルを新規作成する代わりに、Remixにサンプルとして用意されているSolidityファイルを使って解説を進めます。Remixの画面左の「contracts」フォルダをクリックしてみましょう。

「contracts」のフォルダ内にある「1_Storage.sol」や「2_Owner.sol」、「3_Ballot.sol」などがSolidityファイルのサンプルです。

Solidityファイルをクリックすると、画面上にファイルの中身が表示されます。

Solidityファイルのコードは、そのままの状態だとコンピュータが読み取ることができません。コンパイルと呼ばれる操作を行い、EVM(Ethereum Virtual Machine)バイトコードと呼ばれる形式に変換する必要があります。

Remixでは、ソースコードの左上にある三角形のボタンをクリックすることで、コンパイルが可能です。

コンパイルが成功すると、画面左側に緑色のチェックマークが表示されます。

EVM上でContractを配備

コンパイルが完了したスマートコントラクトを使用するには、「デプロイ」と呼ばれる操作でブロックチェーン上に配備する必要があります。

Remixの画面左側にある「Deploy&run transaction」のアイコンをクリックし、デプロイするコントラクトを選択した状態で「Deploy」ボタンをクリックしましょう。

デプロイが成功すると、画面右下のコンソールに緑色のチェックマークが表示されます。コンソールに表示されたメッセージの右側のマークをクリックすると、デプロイしたスマートコントラクトの詳細情報を見ることが可能です。

ここまでの操作が完了すると、Remixのテスト環境上にスマートコントラクトが配置されます。

他クライアントから契約関数を呼び出す

デプロイしたスマートコントラクトは、Web3などの他のクライアントから呼び出すことが可能です。

例えば、「Web3.js」や「Truffle」などのEthereumクライアントライブラリを使うことで、JavaScriptなどのコードからスマートコントラクトの契約関数を呼び出せます。

ただし、実際のアプリとしてスマートコントラクトを稼働させるには、適切なネットワークが必要です。また、自分自身でEthereumノードを立ち上げる必要があります。

Solidityを習得することのメリットと将来性

ブロックチェーンは、仮想通貨の取引以外にも幅広い分野で活用され始めています。メタバース上でのアート作品の売買や、農業におけるトレーサビリティの実現など、ブロックチェーンの活用事例は様々です。

ブロックチェーンの普及にともなって、Solidityの需要も高まっています。Solidityの使い方を習得すれば、ブロックチェーンを取り扱う企業への就職・転職活動で有利になります。ブロックチェーンを扱う企業は今後も増えることが予想されるため、Solidityは学ぶ価値のあるプログラミング言語といえます。

SolidityはEthereumのブロックチェーン上で動作するスマートコントラクトを実装できるプログラミング言語です。ブロックチェーンが普及する中で、Solidityのスキルを持ったプログラマーの需要も高まっています。エンジニアとしてスキルアップしたい方は、Solidityの使い方を学んでみてはいかがでしょうか。