Introduction
皆さんよいrustライフをお送りでしょうか!
rust 1.14のリリース以降、かんたんにasm.js及びwasmのコードが吐けるようになりました。ところがまだJavascript側とのブリッジになるようなライブラリはあまり(?)ないようです。そこでこことかにもちょくちょくメモしているのですが、Emscriptenの関数を叩いてJS側との橋渡しをするrustのライブラリをちょろちょろ書いています。
この際に気になったのがtestです。こちらの記事によくサマライズされていますが、rustはいい感じのテスト方法を持っています。しかし、targetをasmjsにするとこれが途端に使えなくなってしまいます。更に贅沢を言うと、ブリッジコードのテストもしたいのでJS側のコードも予め読んでおきたいように思います。
ということで、これらを何とかするためにCargoのsubcommandを作ってみました。
注意
筆者もまだrust歴が極めて浅いのであまりrustっぽくないコードを書き散らしている可能性があります。気になる点などありましたらぜひご教授ください。
Cargoとは
言わずと知れたRustのすごいやつです。Subcommandの作り方の詳細(?)は拙ブログにまとめてみたのですが、Cargoにはかんたんにsubcommandを追加できる機能があります。
shell scriptかpythonあたりでちょちょっと書いてしまったほうが楽かもしれないけど今回はせっかくなのでrustを使って新しいsubcommand, testjs
を作ってみました。
インストール
crates.ioに登録したので(ちなみにすごく簡単でした)、cargo経由でinstallできます。
$ cargo install cargo-testjs
使い方
Emscriptenが有効になっている環境で、プロジェクトのルートディレクトリに行き
$ cargo testjs
するだけです。設定は、次の3つをCargo.tomlに書けます。
[package.metadata.testjs]
node = "nodejs"
target = "asmjs-unknown-emscripten"
prelude = "tests/test.js"
それぞれの設定ですが、
node
nodejsのコマンド。絶対パス指定か、パスが通っている必要がある。デフォルトはnode。
target
デフォルトはasmjs-unknown-emscriptenだが、wasmにしてもそもそも現時点では動かないのであんまり意味がないw
prelude
testを実行する前に読み込むべきJavascriptファイル。
例
テストの例も書いてみました。
終わりに
rustは楽しいです。もしかしたらこれくらい誰かが書いてるかな~ってものも意外となかったりするので(とはいえこのsubcommandはどうだか調べてはいないので車輪の再発明をした可能性はあるw)、ライブラリを書くのも面白いかもしれません。ではでは。