Solidity入門① ~開発環境編~
こんにちは。
今回から全10回ほどに渡り、Ethereumでのスマートコントラクト開発用言語であるSolidityに関する記事の連載を始めます。
連載一回目のこの記事では、まだコードは書かずにその前段階である開発環境の構築をしようと思います。
開発に利用する2つのもの
Solidityコントラクトのローカル環境での開発では、Truffleというフレームワーク、Ganacheというローカル環境でプライベートブロックチェーンを動作させるソフトの2つを導入することが多いです。
そのため、次の項からこれらの導入方法を解説します。
ここでは、npmというパッケージマネージャーがインストールされていることを前提としています。npmの導入方法(Ubuntu,CentOSの場合)は
のサイトを参照していただけるとわかりやすいかと思います。
Windowsの場合は、
にアクセス後、左側の”Recommended For Most Users”の方をクリックし、ダウンロードできたファイルを実行し、画面の指示に従ってください。
無事ダウロードが完了すると、npmが利用できるようになります。
Truffleの導入
なんだか美味しそうな名前のツールです。
それはともかく、Truffleとは、コントラクトを開発するためのフレームワークで、コントラクトのビルド・デプロイ・テストなどを簡単に行うことができます。
ローカル環境でコントラクトを開発するには無くてはならない存在です。
このTruffleは、ターミナルやコマンドプロンプト等に、
$ npm install -g truffle
と打ち、実行するだけでかんたんに導入することができます。
また、導入後Truffleを利用してコントラクト開発を行う際は、予めcdコマンドでフレームワークを作成したいフォルダーに移動した後に、
$ truffle init
を実行すると、そのフォルダーに、
— Contracts
Migrations.sol
— migrations
1_initial_migration.js
Test
truffle-config.js
のようなフォルダー構造で、開発に必要なフォルダー・ファイルが生成されます。コントラクトを開発する際は、Contractsフォルダーの中に新しいファイルを作り、そのファイルにコードを記述していく形になります。
また、1_initial_migrations.jsには、デプロイの仕方・デプロイ時にコントラクトに渡す引数など、デプロイ時に必要な情報をJavascriptで記述します。
Testフォルダーの中には、ContractをテストするためのファイルをSolidityやJSで作成します。
$ truffle test
のコマンドを実行することで、このTestフォルダーの中のコードを実行し、テスト結果を得ることができます。
Truffle-config.jsには、デプロイするネットワークの情報を記述します。
テストネットであればそれの情報、プライベートチェーンであればそれのホスト名などです。
最も頻繁に利用するフォルダーはContractsですので、まずは、contractsの中にSolidityのファイルを作り、そこにコードを記述すれば良いと言うことだけを覚えておいてください。
Ganacheの導入方法
またもや甘くて美味しそうなツールです笑
実は、先程のTruffleもGanacheも、同じ開発チームの手による物で、この2つとフロントエンド開発用のライブラリであるdrizzleというツールを、まとめてTruffle Suiteと呼んでいるのです。
開発用ツールにスイーツの名前が2つもあるので、コントラクトを書いている途中にお腹が減ってきてしまいそうです。
Ganacheは、ローカルにEthereumのプライベートブロックチェーン環境を作成するためのツールです。起動時に100ethを所持しているアカウントが10個作られるため、gethのようにわざわざコントラクトを作成・テストする際にマイニングをする必要がありません。
テストネットとは違い、自分のトランザクションのみしか発行されないため、コントラクトのデプロイや関数の実行が素早く行えます。
導入方法はシンプルです。
https://www.trufflesuite.com/ganache
にアクセスすると、トップページのDownloadというボタンの下に利用しているOSが出ていますので、それに間違いがなければDownloadボタンをクリックしてください。Downloadされたファイルを実行し、画面の指示に従うことでインストールすることができます。
Truffleで作ったコントラクトをGanacheにデプロイするためには、
truffle-config.jsを、
module.exports = {
networks: {
development: {
host: "localhost",
port: 7545,
network_id: "*"
}
}
};
のように編集する必要があります。
Remixについて
ここまで、ローカル環境でのコントラクト開発に必要なツールとその導入方法を解説しました。
しかし、実は、もっと容易にオンラインでコントラクトをデプロイ、そして関数を実行できるウェブツールがあるのです!
それがこちら、Remixです。
Remixは、ウェブベースのEthereumのIDE(統合開発環境)で、エディター機能・コンパイル機能・デプロイ機能が付属しており、これだけでコントラクトの開発からデプロイまでをすべて行うことができます。
じゃあTruffleとか使わなくていいじゃん!と思ったそこのあなた!
確かに、単純なコントラクトはわざわざTruffleでプロジェクトを作らなくとも、Remix上で書き、テストまで済ませたほうが簡単ですが、複雑なプロジェクトになるとそうは行きません。
コントラクトだけではなくフロントエンドやバックエンドとの接続が必要なものや、依存関係が複雑な物のような、実際のプロダクトに近いものの開発には向いていません。それらの開発には、前述のTruffleのフレームワークを利用するべきです。
まとめ
今回は、コントラクト開発の事前知識として、開発に必要なツールの概要とその導入方法、利用する意義を紹介しました。
次回は、実際に簡単なコントラクトを書き、それの解説を通してSolidityの書き方を紹介しようと思います。次回もお楽しみに!