メインコンテンツへスキップ

SolidityとTruffleを使って、継続的統合を設定する

SolidityスマートコントラクトテストTruffleGanache
中級
Markus Waas
soliditydeveloper.com(opens in a new tab)
2020年6月5日
7 分の読書 minute read

Truffle を使用した継続的統合(CI)は、基本的なテストセットを実装してあれば、非常に有益な開発環境を提供します。 非常に長期的なテストを実行できるため、プルリクエスト(opens in a new tab)をマージする事前にすべてのテストに合格したことを確認でき、追加ツールを使って様々な統計を追跡することができます。

今回は、Truffle Metacoin Box(opens in a new tab)を使用して継続的統合を設定します。 以下の内容は、Travis CI または Circle CI を使って実行できます。

Travis CI の設定

Travis CI(opens in a new tab)は、簡単に追加できます。 プロジェクトのルートフォルダに、.travis.yml設定ファイルを追加するだけです。

1language: node_js
2node_js:
3 - 10
4
5cache: npm
6
7before_script:
8 - echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
9
10script:
11 - npm test
すべて表示

ここでは、Truffle で単体テストを実行する場合のみテストスクリプトが実行されるシンプルな状態にしておきましょう。 しかし、Travis CI マシンが利用できるブロックチェーンが存在しないという問題があります。 しかしこれは、テスト前にnpm install ganache-cliを実行するだけで解決できます。 具体的には、ganache-cli > /dev/nullの npx コマンドを含む Bash スクリプトをnpx truffle testの呼び出しの前に追加します。 こちら(opens in a new tab)で Bash スクリプトの完全な例をご覧ください。

Circle CI の設定

CircleCi(opens in a new tab)では、より長い設定ファイルが必要になります。 Travis では、自動でnpm ci(opens in a new tab)コマンドが追加されます。 これにより、npmのインストールよりも高速かつセキュアに依存関係をインストールできます。 ここでも、Travis の場合と同じスクリプトを使って、テストの前に ganache-cli を実行します。

1version: 2
2
3aliases:
4 - &defaults
5 docker:
6 - image: circleci/node:10
7
8 - &cache_key_node_modules
9 key: v1-node_modules-{{ checksum "package-lock.json" }}
10
11jobs:
12 dependencies:
13 <<: *defaults
14 steps:
15 - checkout
16 - restore_cache:
17 <<: *cache_key_node_modules
18 - run:
19 name: Install npm dependencies
20 command: |
21 if [ ! -d node_modules ]; then
22 npm ci
23 fi
24 - persist_to_workspace:
25 root: .
26 paths:
27 - node_modules
28 - build
29 - save_cache:
30 paths:
31 - node_modules
32 <<: *cache_key_node_modules
33
34 test:
35 <<: *defaults
36 steps:
37 - checkout
38 - attach_workspace:
39 at: .
40 - run:
41 name: Unit tests
42 command: npm test
43
44workflows:
45 version: 2
46 everything:
47 jobs:
48 - dependencies
49 - test:
50 requires:
51 - dependencies
すべて表示

eth-gas-reporter プラグインを追加する

eth-gas-reporter プラグインは、スマートコントラクトの関数で発生するガス代を追跡する上でとても役立ちます。 このプラグインを CI に追加しておけば、プルリクエストを追加する際に差分を表示するためにも有益です。

ステップ 1:eth-gas-reporter プラグインと codechecks をインストールする

$ npm install --save-dev eth-gas-reporter
$ npm install --save-dev @codechecks/client

ステップ 2:truffle-config.js の mocha 設定で、eth-gas-reporter プラグインを追加する

設定のオプションを確認してください。(opens in a new tab)

1module.exports = {
2 networks: { ... },
3 mocha: {
4 reporter: 'eth-gas-reporter',
5 reporterOptions: {
6 excludeContracts: ['Migrations']
7 }
8 }
9};
すべて表示
コピー

ステップ 3:プロジェクトのルートディレクトリに、codechecks.yml を追加する

1checks:
2 - name: eth-gas-reporter/codechecks

ステップ 4:テストコマンドの後に、codechecks を実行する

- npm test
- npx codechecks

ステップ 5:Codechecks のアカウントを作成する

以上です。 これで、プルリクエストでガス代の変化に対して素晴らしいレポートが表示されます。

ガスレポートの例

solidity-coverage プラグインを追加する

solidity-coverage プラグインを使用すると、コードパスのうちテスト対象に含まれる割合がどの程度か確認できます。 CI 上で設定しておくと、非常に便利になります。

ステップ 1:メタコインプロジェクトを作成し、カバレッジツールをインストールします。

$ npm install --save-dev truffle
$ npm install --save-dev coveralls
$ npm install --save-dev solidity-coverage

ステップ 2:truffle-config.js のプラグイン配列に、solidity-coverage を追加します。

1module.exports = {
2 networks: {...},
3 plugins: ["solidity-coverage"]
4}
コピー

ステップ 3:.travis.yml または Circle CI config.yml に、カバレッジコマンドを追加します。

- npx truffle run coverage
- cat coverage/lcov.info | npx coveralls

Soidity カバレッジは、それ自体で ganache-cli を開始しますので、ganache-cli をインストールする必要はありません。 ただし、カバレッジの ganache-cli は動作が異なり、通常の単体テスト実行の代替とはならないため、通常のテストコマンドは置き換えないでください。

ステップ 4:Coveralls にレポジトリを追加します。

  • Coveralls(opens in a new tab)のアカウントを作成します。
  • 作成したアカウントを GitHub リポジトリに追加します。
  • プルリクエストの作成に進んでください。

Coverallの例

追加のヒント

これで完了です。 開発環境において非常に有益な戦略であることが理解できたと思います。 完全な実例は、Truffle-CI-Example(opens in a new tab)で確認してください。 Circle-CI と Travis の両方共必要な訳ではないので、使わない方は確実に削除してください!

最終編集者: @HiroyukiNaito(opens in a new tab), 2023年8月15日

このチュートリアルは役に立ちましたか?