Ethereum Solidityの最強の開発環境を構築 これだけ!

今回はEthereum のスマートコントラクトの開発言語であるsolidityのローカル開発環境構築の紹介をしていきたいと思います。

この記事の環境を構築していただければ、まず開発環境で困ることはないかと思います。

事前準備

Node.jsは、マストで必要なので、Node.jsが入っていない方は、下記のサイトからダウンロードして、インストールしてきてください。
https://nodejs.org/ja/

今回用意していただくのは、下記の通りです。
・truffle(Ethereum 開発のフレームワーク)
・remix(IDE)
・Ganache
・vsCode

これだけあれば、基本的に困ることはありません。

<スポンサードリンク>

truffleのインストール

truffleはEthereum のフレームワークで、truffleを使うことで、Ethereum開発を円滑に進めることができます。
具体的には、下記のような機能が提供されています。

・単体テストフレームワーク
・コマンドでのデプロイ
・ERC190規格を使用した、EthPM&NPMによるパッケージ管理。
・コンソールでのtransactionの発行、デプロイ
・外部スクリプトランナー

それではインストールしていきましょう。

まずは、ターミナル等から、npmとnodeがインストールされていることを確認します。

% npm -v
6.2.0

% node -v
v10.9.0

npm、Node.jsがインストールされていることが確認できたらtruffleをインストールしましよう。

% npm isntall -g truffle

上記コマンドが正常完了したら、truffleがinstallされていることを確認しましょう。

% truffle version
Truffle v4.1.11 (core: 4.1.11)
Solidity v0.4.24 (solc-js)

以上でtruffleの導入は完了です。

truffleの具体的な使い方は、下記の記事でも紹介しているのでよろしければ参考にしてください。
【Ethereum開発フレームワーク】truffleの導入・使い方徹底解説

remixを使う

次はremixです。remixは、soldiity開発のIDEでWeb版が提供されており、誰でも使うことができます。
Web版へのリンクはGithubに乗っています。

https://github.com/ethereum/remix

Githubのページまで行くと、下記の通り、remixのWeb版へのリンクがあります。

上記リンクをクリックし、Web版のremixを開くと下記のような画面に遷移すると思います。

remixの使い方を紹介した記事はたくさんあるので、細かいところまでは紹介しませんが、
remixでは、solidityで書いたコードに対し下記のようなことができます。
・コンパイル
・特定のEthereumネットワークへのデプロイ
・デバッグ
・ローカルの仮想環境へデプロイし、メソッド単位での動作確認

※remixだけでも単体テストができない点を除けば、十分といえば十分です。笑
※remixは、左上から2番目のボタンからローカルのファイルを修正することはできますが、
remixで行った修正は、ローカルのファイルに反映されないという問題があります。
ローカルのファイルと連動させるには、下記の記事を参考にしてください。
Solidity(Remix)とgitを連携させ、Ethereumの開発をする

<スポンサードリンク>


vsCodeをインストール

vsCodeは、下記からインストールできます。
https://code.visualstudio.com

vsCodeには、solidityのプラグインがあるので、インストールしたら、まずは、solidityというプラグインをインストールしましょう。

remixではなく、個人的に、vsCodeをおすすめする理由は、ターミナルとの親和性です。ショートカットでターイナルを開くことができるので、gitやtruffle、Ganacheやもろもろのコマンドが即座に打てるのが強みです。

Ganacheのインストール

最後にGanacheのインストールです。
Ganacheはローカル環境に、仮想のEthereum環境を作ってくます。合わせて、Transactionを発行するのに必要なEtherを所持したアカウントを10人作ってくれたりするので、開発に便利な機能を多く搭載されています。

下記の公式サイトからインストールします。
https://truffleframework.com/ganache

cli版はコマンドでインストールできます

npm install -g ganache-cli

 

使ってみよう

散々開発環境を用意していただいたので、具体的に実装のイメージを掴んでいただこうと思います。

1. プロジェクトディレクトリを作る

まず、好きなディレクトリにテスト用プロジェクトディレクトリを作成します。

% mkdir testpj
% cd testpj

2.    プロジェクトサンプルをunbox

truffleには、サンプルプログラミングが用意されており、unboxというコマンドを使うことでサンプルプログラムをダウンロードしてくることができます。

% truffle unbox metacoin
Downloading...
Unpacking...
Setting up...
Unbox successful. Sweet!

Commands:

  Compile contracts: truffle compile
  Migrate contracts: truffle migrate
  Test contracts:    truffle test
% tree
.
├── contracts
│   ├── ConvertLib.sol
│   ├── MetaCoin.sol
│   └── Migrations.sol
├── migrations
│   ├── 1_initial_migration.js
│   └── 2_deploy_contracts.js
├── test
│   ├── TestMetacoin.sol
│   └── metacoin.js
├── truffle-config.js
└── truffle.js

3 directories, 9 files

今回は、最も紹介されているであろうmetacoinのサンプルをunboxしました。
contractsデイレクトリが、solidityファイルが格納されているディレクトリで、migrationディレクトリがデプロイ用のファイルが格納されているディレクトリで、testディレクトリがtestファイルが格納されているディレクトリです。

3.    単体テストの実行

まず、unboxした段階でテストが通るかを確認します。
コンパイル後、ローカルの仮想環境にデプロイされ、さらに、testファイルに沿って単体テストが実行されます。

% truffle test
Compiling ./contracts/ConvertLib.sol...
Compiling ./contracts/MetaCoin.sol...
Compiling ./contracts/Migrations.sol...
Compiling ./test/TestMetacoin.sol...
Compiling truffle/Assert.sol...
Compiling truffle/DeployedAddresses.sol...


  TestMetacoin
    ✓ testInitialBalanceUsingDeployedContract (202ms)
    ✓ testInitialBalanceWithNewMetaCoin (227ms)

  Contract: MetaCoin
    ✓ should put 10000 MetaCoin in the first account
    ✓ should call a function that depends on a linked library (57ms)
    ✓ should send coin correctly (307ms)


  5 passing (2s)

全部通りましたね!

4.    Ganacheを使った確認

5.    remixからの動作確認

まず、localファイルと連携し、MetaCoinをcompileします。
※localとの連携方法は、下記にもある「Solidity(Remix)とgitを連携させ、Ethereumの開発をする」という記事で紹介しています。

加筆予定

参考

【solidity】業務ロジックとデータロジックを分断するコントラクト設計

【初心者向け】solidity基礎 modifierの使い方を徹底解説

【初心者向け】Solidity 外部コントラクトの呼び出し方法を徹底解説

Solidity(Remix)とgitを連携させ、Ethereumの開発をする

Ethereum プライベートネットワークでgeth起動時にnodeを自動接続する方法

スポンサードリンク



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA