【入門】Solidityでスマートコントラクトを開発しよう!まずは基本の部分から

Solidity

プログラム言語Solidityに興味がありますか?

Solidityはイーサリアムのスマートコントラクト開発用に作られたプログラム言語で、すでに数多くの開発実績があります。

そんなSolidityができることや開発の始め方を説明しますので、ぜひ参考にしてください。この記事を読めば、Solidityで開発を始めるための基礎固めができるかもしれません。

この記事でわかること(solidity)


1. Solidityでスマートコントラクトが作れる!

まずはSolidityとは何か解説しましょう。

1-1. Solidityとは? 

Solidityは、イーサリアム上のスマートコントラクトを開発するためだけに作られたプログラム言語です。

コントラクト指向言語と呼ばれていて、イーサリアム上の取引の実行条件となるコントラクトを組み立てることで、スマートコントラクトを実現しています。

イーサリアムは世界で初めてスマートコントラクトを実現したブロックチェーンで、そこで使われている仮想通貨(暗号資産)ETHは時価総額が世界2位となっています。

Solidityを使えればそれだけ大きな市場を対象としたプログラムの開発を行うことができます。

1-2. スマートコントラクトとは?

スマートコントラクトは、ブロックチェーン上の契約を自動で実行するしくみだと説明されることが多いです。

実運用上はその解釈でも問題ないのですが、厳密には違います。

スマートコントラクトは、ブロックチェーン上の取引処理を任意の条件下で実行するしくみのことなのです。ユーザーが要求した取引は即座に実行処理に移り、承認され次第実行されます。

スマートコントラクトを使えば、取引が実行処理に移るための条件を任意に設定することができるわけです。

ブロックチェーンエンジニアが解説|スマートコントラクトの事例と仕組み

1-3. Solidityで開発する理由

Solidityで開発する最大の理由は、セキュリティ効率のためです。

既存のプログラム言語を使ってスマートコントラクトを実現するには、ブロックチェーンへのアクセス部分などのクリティカルな部分のプログラムも実装する必要があります。もしそのプログラムに脆弱性があった場合のリスクは計り知れません

Solidityはそういった重要な部分はプログラム言語の一部として事前に準備しておき、それを利用するだけにしておくことでセキュリティを担保しているのです。

また、クリティカルな部分へアクセスするプログラムを作る必要がない分、余計なテストなども不要になり開発効率が上がります。

1-4. どんなものが作れるのか?

Solidityを使って開発をするといっても、どんなものが作れるのかイメージできなければ、開発を始めることはできないでしょう。

現在、イーサリアム上で稼働しているスマートコントラクトを例にして紹介します。

トークン

トークンというのは、イーサリアムネットワーク上でやりとりされる仮想通貨のうち、ETH以外のものを指します。

ERC20ができる前は直接Solidityを使って実装する必要がありました。現在では発行ツールなどもできていますので、ほとんどSolidityを使わずにでも発行することができるようになりました。

トークンについては以下の記事で詳しく説明しています。

ブロックチェーンエンジニアが解説する|イーサリアムのトークン

トークンの中でもERC20トークンERC721トークンについては解説記事がありますので、参考にご覧ください

ERC20とは?何ができて何が便利なの?|ブロックチェーンエンジニアが解説
ERC721でデジタルコンテンツの未来が変わる|ブロックチェーンエンジニアが解説

DAPPS

DAPPS分散型アプリケーションと呼ばれるソフトウェアで、ブロックチェーン上で動作するプログラムのことです。Solidityを使って開発されているのは、すべてこのDAPPSに分類されるものになります。

現在、ゲーム分散型取引所(DEX)クラウドストレージなど様々なDAPPSがイーサリアム上で動作しています。

DAPPSゲームの具体的な例は以下の記事をご覧ください。

イーサリアムで遊べる無料ゲーム4選! MMOから最新カードゲームまで


2. Solidityでの開発の始め方

Solidityでの開発は他のプログラム言語と比べて特別難しいものではありません。

それでも初めてプログラミングをする人にとっては簡単ではありませんので、基本的なSolidity開発の始め方を説明しましょう。

2-1. プログラムの開発とは

初心者の人は、プログラムの開発はプログラムコードを作成するだけというイメージを持っているかもしれません。

しかし実際には、プログラムを作って動かすまでには次の3つの工程が必要なのです。

プログラム開発の3つの工程

  • コーディング
  • コンパイル
  • デプロイ

事前準備として、それぞれ何をすることなのか説明しましょう。

コーディング

プログラムコードを入力してプログラムを形作る工程です。プログラム言語の文法やアルゴリズムと呼ばれる組み立て手法を駆使して、望む動きを実現させます。

Solidityでもこの工程は同じで、文法に従ってプログラムコードを書くことになるでしょう。

コンパイル

コーディングしたプログラムコードをコンピュータが実行できる形に変換する工程です。

作成したプログラムコードは人間にとっては読みやすいですが、0と1しか分からないコンピュータには理解できません。そこで、プログラムコードからコンピュータが理解できるバイトコードへ変換してやる必要があるわけです。

Solidityで作られたプログラムはイーサリアムブロックチェーンに搭載されたEVM(Ethereum Virtual Machine)という仮想コンピュータ上で動作します。そのため、コーディングしたプログラムコードを、EVM上で動作するバイトコードに変換しなければいけません。

デプロイ

コンパイルした実行ファイルを実際に動かす環境へ設置する工程です。

Webアプリケーションなど、実際に動かす場所が開発したコンピュータ上ではない場合に行われます。Solidityで作ったプログラムをEVMへ設置する工程が、デプロイです。

なお、Solidityで作ったプログラムをデプロイすると公開されてしまいますので、本番環境にデプロイする前に必ずプライベートネットワークなどで動作確認しなければいけません。

2-2. Remixでお手軽に

では、Solidityの開発を実際にやってみましょう。

ここでは、もっとも手軽にSolidity開発を体験できるRemixという開発環境を利用します。

Solidity開発方法(Remix_01)

RemixはWeb上で開発することができる開発環境ですのでソフトウェアのインストールは不要です。ブラウザがあれば実行できますので、パソコンの種類を問わずに開発することができます。

Remixの実行

Remixを実行する方法は、以下のURLにアクセスするだけです。

Remix

Remixはオフラインでも使える

Remixにはインターネットに接続せずに簡単なスマートコントラクト開発を行うことができる環境も準備されています。
以下からzipファイルをダウンロードして、解凍したindex.htmlをブラウザで開いてください。
Remix-releases

環境設定

最初にSolidityの開発環境を設定しましょう。

Solidity開発方法(Remix_02)

Environmentsの部分にある2つのボタンが開発環境です。現在、Remixでは「Solidity」と「Vyper」の開発環境が準備されています。

今回はSolidityで開発しますので、[Solidity]をクリックして環境を設定しましょう。

クリックするだけで環境設定は完了し、左にSolidity開発に関するアイコンが追加されます。

Solidity開発方法(Remix_03)

これで準備が整いました。

VyperもSolidityと同じくイーサリアムのスマートコントラクトを開発するために作られたプログラム言語です。
SolidityがJavaScriptによく似た構文を持っているのに対し、VyperはPythonによく似た構文を持っています。

2-3. Solidityで作ってみよう!

RemixでのSolidity開発でも、プログラムの基本の3ステップでプログラムを開発します。

画像付きで説明しますので、ぜひチャレンジしてみてください。

コーディング

プログラムコードを作成する方法は、ファイルを作ってそこに入力するだけです。

Remix上ファイルを扱うには、ファイルエクスプローラーを利用します。左のアイコンの上から二つめの書類のようなアイコンが、ファイルエクスプローラーです。

Solidity開発方法(Remix_04)

ファイルエクスプローラーでは、ファイルの作成や削除、参照を行えます。

すでに4つのファイルがありますが、これはRemixが準備してくれているサンプルです。少し長いかもしれませんが、学習するのに役立つことでしょう。

新規で開発したいので、ファイルを追加しましょう。

ファイルが表示されているリストの上にある(+)アイコンをクリックすると、ファイル名入力のポップアップが表示されます。※右のFile項目にある「New File」をクリックしても構いません

Solidity開発方法(Remix_05)

初期値として「Untitles.sol」が入力されていますが、分かりやすく「HelloWorld.sol」に変更して[OK]をクリックしましょう。なお、拡張子は必ず.solでなければいけませんので、気を付けてください。

ファイルエクスプローラーに「HelloWorld.sol」が追加されて、右にHelloWorld.solファイルがタブ表示されます。

まだなにもしていませんので真っ白の状態です。この空の部分に、プログラムコードを書いていくことになります。

Solidity開発方法(Remix_06)

では、次のプログラムを記入しましょう。

pragma solidity >=0.4.25 <0.6.0;

contract HelloWorld {
string greeting = “Hello SmartContruct!!”;

function sayHelloWorld() public view returns(string) {
return greeting;
}
}

Solidity開発方法(Remix_06_2)

コンパイル

コンパイルは上から3つめのアイコンです。先ほど作ったファイルを編集したら、このアイコンに回転するようなマークが付いたことに気が付いた人もいるかもしれません。

このマークは、「ファイルが変更されたのでコンパイルが必要」ということを示すマークです。

コンパイラアイコンをクリックすると、ファイルエクスプローラーが表示されていた部分にコンパイルのツールボックスが表示されます。

Solidity開発方法(Remix_07)

中央当たりに表示されている[Compile HelloWorld.sol]をクリックすれば、コンパイルが始まります。

コンパイルが成功すると、コンパイラアイコンのマークがチェックマークに変わります。

Solidity開発方法(Remix_08)

もし、入力間違いなどがあると、マークが赤い丸数字になって問題箇所の数を教えてくれます。

Solidity開発方法(Remix_09)

ツールボックスに赤い枠で問題箇所と簡単な内容を教えてくれますので、修正して再度コンパイルしましょう。

デプロイ

デプロイは上から4つめのイーサリアムのロゴによく似たアイコンです。

このアイコンを選択すると、デプロイと実行確認ができるツールボックスが表示されます。

Solidity開発方法(Remix_10)

真ん中当たりの黄色い[Deploy]をクリックすると、テスト用のブロックチェーンにデプロイされます。

Solidity開発方法(Remix_11)

無事にデプロイされたら、Deployed Contructsにデプロイしたプログラムのコントラクト名が表示されます。ここでは「HelloWorld」です。

実行

デプロイまで完了したら、後は実行してみるだけです。

先ほどデプロイしたコントラクト名の左にある「>」マークをクリックすると、青いファンクションボタンが表示されます。

今回作ったHelloWorldコントラクトには、「sayHelloWorld」というファンクションを定義していますので、ファンクションボタンは[sayHelloWorld]になっています。

ファンクションボタンをクリックすれば、そのファンクションを実行できます。

Solidity開発方法(Remix_12)

ファンクションボタンのすぐ下に「0: string: Hello SmartContruct!!」と表示されれば、正常です。

お疲れ様でした!

本格的な開発には

Remixでは手軽に開発ができますが、大規模なものや本格的なビジネス用途のスマートコントラクトの開発を行うには不十分です。

Solidity開発を本格的に行うためには、フレームワークと呼ばれる開発補助環境や仮想イーサリアムネットワーク環境などを準備する必要があるでしょう。

ここでは、そんな本格的な開発環境の一例を紹介します。具体的には、Remix以外に以下のツール類を準備します。

nodejs
truffle
Ganache

Nodejs

Solidity開発ツール(Nodejs)
出典:nodejs.org

JavaScriptの実行環境です。他のツールを導入するために必要なものですので、最初にインストールしましょう。

Truffle

Solidity開発ツール(Truffle)
出典:trufflesuite.com

スマートコントラクトの開発に必要な機能をほとんど搭載しているSolidityの総合開発管理フレームワークです。truffleを導入することで、Solidityのコンパイルからデプロイ、そして生成したバイトコードの管理やテストまで行うことができます。

truffleはnode.jpのパッケージと呼ばれるものの1つですので、node.jpのnpmというコマンドを使ってインストールします。

Ganache

Solidity開発ツール(Ganache)
出典:truffleframework.com -Ganache

イーサリアムのプライベートネットワークを構築するツールです。

truffleを使ってテストできるとはいっても、実際にブロックチェーン上に設置して動かしたら思わぬ不具合が出ることも少なくありません。そのため、公開されたネットワークへデプロイする前に、プライベートネットワークでのテストは必須と言えるのです。

Ganacheを使えばそのためのプライベートネットワークを簡単に作ることができます。


3. Solidityをもっと勉強するには?

Solidity開発を行うためには、プログラム言語としてのSolidityだけではなく、開発環境や開発手法、イーサリアムについても学ぶ必要があります。それらを効率的に学習する方法を紹介しましょう。

Solidityを学習する方法は、一般的に以下の4つの方法があるでしょう。

Solidityを学習する方法

  • 書籍
  • パソコンスクールなどの学校
  • ネット上のチュートリアル
  • 実際の開発現場

これらのどの方法にも一長一短はありますが、すべてにおいて個人のモチベーションがとても重要になります。また、開発スピードがとても速い仮想通貨の業界においては、情報の新鮮さもとても大きなポイントです。

いままで便利で洗練されていると思っていた開発手法も、半年も経てば古くさい昔ながらのやり方になりますし、Solidity自身も大きく変わっていることもあるでしょう。

クリプトゾンビ

Solidityの勉強(クリプトゾンビ)
出典:CryptoZombies

ゲームを通して、DAPPS開発についての基礎的な考え方からSolidityの文法まで幅広く学習できるサイトです。ベースがゲームですのでモチベーションを保ちながら楽しく学んでいくことができるでしょう。

詳しく解説した記事がありますので、気になった方はぜひお読みください。

初学者はクリプトゾンビから始めよう!ブロックチェーンアプリ開発

公式ドキュメントを参照しよう

Solidityの勉強(公式ドキュメント)
出典:solidity-jp

学習するときには、必ず公式ドキュメントを参照するようにしましょう。

何かを学習するときにインターネットを使って調べ物をするのは常識です。しかし、インターネットの情報は常に最新である保証はありません

特にSolidityのような開発言語は進化が激しく、バージョンが違うだけでプログラムが動かなくなることは日常茶飯事です。古い情報だと気付かずにサイトや書籍のプログラムを利用し、動かない理由がまったく分からず挫折してしまった人は少なくないでしょう。

その点公式ドキュメントは常に最新の正しい情報になるように細心の注意が払われています。公式ドキュメントは一見難しそうな書き方が多く敬遠する人も少なくありませんが、きちんと読み込めば分かりやすくなっています。

ベテランになっても活用できますので、公式ドキュメントでの学習は最終的には近道になるものなのです。

マスタリング・イーサリアムを読もう

2019年11月にイーサリアムの教科書「マスタリング・イーサリアム(Mastering Ethereum:Building Smart Contracts and DApps)」の邦訳版が発売されました。

原本はイーサリアムの共同設立者の一人ギャビン・ウッド(Gavin Wood)氏と、同シリーズであるマスタリング・ビットコインの著者アンドレアス・M・アントノプロス(Andreas M. Antonopoulos)氏の共著です。

こちらの著書では14章の構成でイーサリアム、ブロックチェーンの基本など関連した知識を解説しています。非常に細かい内容まで解説していますので、初心者の段階だと全て読むには時間がかかるかもしれません。

しかしながらイーサリアム、Solidityを利用して開発を行いたいエンジニアや、イーサリアムを利用したプロジェクトに携わるビジネスサイドの方にとって読んで損がない内容です。


まとめ

スマートコントラクト開発専用のプログラム言語Solidityによって、イーサリアムは大きく飛躍しました。現在ではVyperなど他のプログラム言語も出現しています。

しかしイーサリアム誕生当初からの長い実績とこれまでの知見の積み重ねがあるSolidityには、まだ十分なアドバンテージがあることでしょう。

  • Solidityはイーサリアムのスマートコントラクト開発専用のプログラム言語
  • SolidityはJavaScriptに似ている
  • Solidityの開発にはRemixが便利
  • 学習するなら公式ドキュメントを参照すること

Solidityは公式非公式合わせて数多くの情報が公開されており、学習しやすい環境になっています。

イーサリアムのスマートコントラクトに興味がある人は、1度挑戦してみて損はないでしょう。

■世界のニュース

Google ニュース 「世界」
Google ニュース 「日本」
Google ニュース 「ビジネス」 
Google ニュース 「科学&テクノロジー」
Google Cloud スタートアップ

■価格情報

TradingView「ビットコイン/JPY」
coinbase「ビットコイン/USD」
CME「ビットコイン 先物」

■監督官庁

金融庁

■研究機関

ビットコイン
 bitcoin.org
イーサリアム
 ethereum.org
 Go Ethereum
 web3.js
 Truffle
 solidity
 ethereum/EIPs
 Vitalik Buterin’s website
XRP
 ripple.com
その他
 Litecoin.org
 Bitcoincash.org
 nem.io
 Stellar.org
 monacoin.org
 blockchain.com

■苦情相談等

金融サービス利用者相談室
国民生活センター

■自主規制機関

日本仮想通貨交換業協会

■関連省庁等公式Twitter

日本政策金融公庫【公式】Twitter
厚生労働省【公式】Twitter
日本年金機構【公式】Twitter
内閣府政府広報オンライン【公式】Twitter
国民生活センター【公式】Twitter
金融庁【公式】Twitter
法務省【公式】Twitter
消費者庁【公式】Twitter
首相官邸【公式】Twitter
内閣官房【公式】Twitter
国税庁【公式】Twitter
警察庁【公式】Twitter

本サイトは情報提供を目的としたものであり、特定の商品、サービスについての売買の勧誘や売買の推奨を目的としたものではありません。
また、掲載内容は信頼できると思われる各種データをもとに作成されていますが、その正確性、完全性を保証するものではありません。
投資を行う際は、お客様ご自身の判断でなさるようお願いいたします。