JavaScriptはそのまま書くのではなく、書いた後に変換して使うケースが増えています。例えばTypeScriptであったり、Babelを使って新しいJavaScriptの仕様を使えるようにする、ReactのJSXを変換するといった具合です。 そんな変換処理は実行速度が命です。遅いと変更するのが面倒になり、更新してからWebブラウザなりで確認するのにも時間がかかってしまいます。そこで紹介したいのがBabelの18倍速いというswcです。

swcの使い方

例えば新しいJavaScriptの仕様であるクラスを使います。

class Foo {
    set foo(v) { }
}
class Bar extends Foo {
    get bar1() {}
    async bar2() {}
}

これを変換します。

$ swc index.js 

そうするとES3スタイルのJavaScriptが出力されます。これならばかなり古いWebブラウザでも動くでしょう。

function _assertThisInitialized(self) {
    if (self === void 0) {
        throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
    }
    return self;
}
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
    try {
        var info = gen[key](arg);
        var value = info.value;
    } catch (error) {
        reject(error);
        return;
    }
    if (info.done) {
        resolve(value);
    } else {
        Promise.resolve(value).then(_next, _throw);
    }
}

swcはJavaScriptからJavaScriptに変換するコンパイラですが、Rustで書かれているのが特徴です。コンパイルもされている分、高速に動作すると言えます。ウォッチなどと組み合わせることで、高速なコンパイル環境が手に入るはずです。

swcはRust製のオープンソース・ソフトウェア(ライセンスはMITとApache 2のデュアルライセンスです)です。

3月4日本文、タイトル修正

swc · Super fast alternative for babel swc-project/swc: Super-fast javascript to javascript compiler written in rust