年初の記事として、メンテが滞っているモジュールのメンテをするというのがあった。
記事では1モジュールだけ挙げたが、そういったモジュールを2つ持っていた。
そのうち1つをメンテし、約4年ぶりでアップデートしてJSRで公開したので記録がてら書いておく。
参考
- github - Octo8080/deno-csrf
- deno.land/x - deno_csrf
- JSR - @octo/wasm-csrf
- crates.io - csrf
- rustwasm.github.io - wasm-pack
- github - rustwasm/wasm-pack-template
更新の結果
リポジトリはこちら。
https://github.com/Octo8080/deno-csrf
更新前は、deno.land/x で公開していた。
https://deno.land/x/deno_csrf@0.0.5
更新後は、JSRで公開している。
https://jsr.io/@octo/wasm-csrf
(Score が低いのは追々対応する。)
4年ぶりの更新でやったこと
以下実施したことを纏める。
端的に書くと、丸っと変わっている。
大きな要素としては以下要素。
- Rust をletest -> 1.84.0 に固定して変更
- Deno をコンテナから使うのを辞める
- wasm-bindgen を 0.2.74 -> 0.2.100 に変更
- csrf ライブラリを 0.4.0 -> 0.4.2 に変更
- その他上げられるモジュールをまとめて更新
- wasmをjsに文字列化して埋め込むのをやめる
以下感じたことなどをまとめる。
4年も経ったら、お作法が結構変わっていた
4年前の作成時は、wasm-bindgen を入り口にしてwasmを作っていた記憶がある。
現在ではwasm-pack のテンプレートとして、wasm-pack-template があり、それが wasm-bindgen を使っている。
という状況であるようだった。
(Rustとwasmに詳しい人からは誤りとされる可能性有り。)
テンプレートにテストコードのボイラープレートも有り、これは4年前には無かった記憶。
また、以前はwasmを含んだJSを埋め込むことをするのに js_with_embedded_wasmを使っていた。
wasm ファイルをimportできるようになったことや、JSRがwasmを配信してくれることで、不要になった。
現在生成されるコードは次のようになる。
1 | import * as wasm from "./csrf_wasm_bg.wasm"; |
以前は、以下のように生成されていた。
1 | const file = new URL(import.meta.url).pathname; |
この形は配信基盤とは使い勝手が悪いので、変換して以下のようにしていた。
1 | const wasmCode = new Uint8Array([ |
この変化が大きくて、以前は有ったローカルファイルへのアクセス権を求めることもせずに、一般的なimportで処理できる。
4年も経ったら、Deno側も変わってた
以前は、テスト対象のそばにテストを書くような風潮/潮流が有ったと記憶しているが、今はそうでもない。
hoge.test.tsに分割する形態を取る。
また、READMEには使い方を記述するが、以前なら実行するのに別途検証を要した。
今なら deno test --doc
でREADME.md に書かれたコードブロックを実行してくれる。
便利すぎる。
もちろんランタイム側が wasm のimport に対応したのも大きい。
というわけで、Rustで作ったwasmを含むモジュールを更新した。
機能周り実装状況をまとめてきたが、加えて名前も今回変えている。
以前は deno-wasm
という名称で公開していたが、wasm-csrf
に変更した。
4年の中で、deno-
で公開することに、「自分がDenoの何かを代表するわけでもないしな」と居心地が悪くなったためである。
風呂敷広すぎな名前だったので反省している。
安易なことをするものではない。
実装もパッケージも、名前は大事である。
最近公開したモジュールは頭悩ませ何か名前つけてきたが、wasm-csrf
位しか考え付かず、今回ばかりは仕方がなかった。
では。