yamori

有給休暇計算を主目的とした簡易勤怠管理システム

Zig を使ったネイティブ ACL WASM 方式だと実行ごとにリニアメモリを確保してデータのコピーを行う という無駄な CPU 命令とメモリ消費が発生してしまう。そのため考え方 を変えて ACL を WASM に輸出するようにしてみた。 利用できる言語が一つに限定されるうえコンパイルなどが発生するが、 WASM でも現実的に利用できる言語は Zig と Rust くらいでどのみち コンパイルは必要になるためここはあまり変わらない。 フロントエンドにどうやってネイティブの構造体を渡して UI に落とし 込むかが懸念だったが、 Zig のコンパイルタイム実行で構造体定義を JSON で出力できたためこれに関しては問題ない。 構造体を丸ごと受け取ってアクセス可否を返す形だとフロントエンド側 でいい感じに UI 制御やエラーメッセージ表示ができないため、これも コンパイルタイム実行で struct -> union 変換を行い単一のフィールド (パッチ) とすることで個別にアクセス可否を読み取れるようになった。 HTTP サーバの処理とか書くとキリがないのでこのパッチは、 * ユーザ定義ネイティブ構造体・関数を使った ACL * ライブラリとしてサーバを提供 * フロントエンドに渡すカスタム属性の定義データ出力 に留めている。 カスタマイズ部分が WASM の場合は AGPL でも問題なかったが、 Zig のライブラリ (静的ライブラリ) だと諸にコピーレフトの影響を受けて しまうため MPL-2.0 に変更した。どうせだから配布に関係ないものも 全部 MPL-2.0 で統一した。

Changes

54 changed files (+818/-2560)