morito

個人的に勉強したことのメモを投稿していく技術ブログ。最近はWebアプリ開発と量子コンピュータの勉強をしてます。

TruffleでES6構文を使えるようにする

はじめに

Truffleでスマートコントラクト開発をする際
テストやバックエンドサーバーの実装にはNodoJSをよく使うのですが
デフォルトだと最新のECMAcriptに対応していないのでBabelを導入します。

毎回やり方を忘れてしまうので、導入手順をメモとしてまとめておきます。

環境

truffleはインストール済みで、truffleプロジェクトディレクトリ内で作業する前提です。

  • macOS Catalina 10.15.2
  • node : v11.14.0
  • npm : 6.7.0
  • Truffle : v5.1.2

手順

必要なbabel関連モジュールのインストール

$ npm i babel-preset-env babel-register babel-polyfill

.babelrcを作成

$ touch .babelrc

truffleプロジェクトディレクトリ直下に.babelrcファイルを作成します。

.babelrc

{
  "presets": ["env"]
}

truffle-config.jsでbabel-register, babel-polyfillをrequire

truffleプロジェクトのの設定ファイルであるtruffle-config.jsの先頭行にrequireを挿入します。

truffle-config.js

require('babel-register')
require('babel-polyfill')

これでimport/exportなどの構文をTruffleのテストスクリプトなどで使えるようになります。

babel モジュールの説明

babelモジュールたちが何をしているのか知らなかったのでググりました。

babelとは

JavaScriptECMAScriptと呼ばれる標準によって定められた仕様にしたがって実装されています。
現在はes6(es2015以降のもの)と呼ばれる6番目のバージョンが主流となっているのですが、
各ブラウザでは実装されていない仕様が多くあります。
また、Nodejsで実行する際にもバージョンによって実行できる仕様が異なります。

babelはそのような新しい世代のJavascriptの標準仕様を古い実行環境でも使えるようにしてくれるトランスコンパイラです。

babel-preset-env

環境に合わせたトランスパイル(ある言語で書かれたコードを元に別の言語のコードを生成する)を行うプリセット 実行環境に応じてtranspileが必要な構文のpresetモジュールを自動でロードしてくれる。

babel-polyfill

babel-polyfill Polyfillはある機能をサポートしていないブラウザ上でその機能を実装するための小さいライブラリ群。構文だけでなくPromiseなどの新しい機能を実装可能にする。

babel-register

node.jsのrequire文をフックして、ファイルを読み込む直前にbabelでトランスパイルする

最後に

2年前くらいからこの方法でやってるけど
最近だともっといいやりかたあるかも

参考

【5分でなんとなく理解!】Babel入門 babel-preset-envで環境に合わせてJavaScriptをトランスパイルする