1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

$\huge{元氣ですかーーーーッ!!!}$

Tauri の Vanilla プロジェクトを作成して、さあ動かそうと思ったら、いきなり Rust 側の依存関係でビルドが失敗しました。

この記事は、Tauri そのものの詳しい解説ではありません。

「いま Tauri の新規プロジェクトを作ったら、brotli 周辺で落ちた」
「とりあえず npm run tauri dev まで進みたい」

という人向けの、短命かもしれないトラブルシューティング記事です。

なお、本記事は 2026-06-14 時点の私の環境での記録です。

環境

私の環境です。

macOS
Apple Silicon
Tauri v2
Vanilla
TypeScript
npm

Tauri の Vanilla プロジェクトを作成しました。

sh <(curl https://create.tauri.app/sh)

選択内容は次の通りです。

Project name: tauri-app
Identifier: com.tauri-app.app
Frontend language: TypeScript / JavaScript
Package manager: npm
UI template: Vanilla
UI flavor: TypeScript

作成後、案内に従って実行しました。

cd tauri-app
npm install
npm run tauri dev

発生したエラー

npm run tauri dev を実行すると、Vite は起動しました。

VITE v6.4.2  ready in 632 ms

➜  Local:   http://localhost:1420/

しかし、その後 Rust 側のビルドで失敗しました。

エラーの中心は brotli でした。

error[E0277]: the trait bound `StandardAlloc: alloc::Allocator<ZopfliNode>` is not satisfied

ログには、次のようなメッセージが出ていました。

note: there are multiple different versions of crate `alloc_no_stdlib` in the dependency graph

つまり、alloc-no-stdlib が複数バージョン入っていて、trait が別物扱いになっているようです。

依存関係を確認する

まず、brotli を誰が引いているのか確認しました。

cd src-tauri
cargo tree -i brotli

結果は次のようなものでした。

brotli v8.0.3
├── tauri-codegen v2.6.2
│   └── tauri-macros v2.6.2
│       └── tauri v2.11.2
├── tauri-utils v2.9.2
│   ├── tauri-build v2.6.2
│   ├── tauri-codegen v2.6.2
│   ├── tauri-macros v2.6.2
│   └── tauri-plugin v2.6.2
└── tauri-utils v2.9.2
    ├── tauri v2.11.2
    ├── tauri-runtime v2.11.2
    └── tauri-runtime-wry v2.11.2

brotli は Tauri 側の依存として入っていました。

次に、alloc-no-stdlib を確認しようとしました。

cargo tree -i alloc-no-stdlib

すると、曖昧だと言われました。

error: specification `alloc-no-stdlib` is ambiguous
help: re-run this command with one of the following specifications
  alloc-no-stdlib@2.0.4
  alloc-no-stdlib@3.0.0

つまり、やはり alloc-no-stdlib が 2つ入っています。

Cargo.lock を見る

Cargo.lock を見ると、次のようになっていました。

[[package]]
name = "alloc-no-stdlib"
version = "2.0.4"

[[package]]
name = "alloc-no-stdlib"
version = "3.0.0"

[[package]]
name = "alloc-stdlib"
version = "0.2.3"
dependencies = [
 "alloc-no-stdlib 3.0.0",
]

[[package]]
name = "brotli"
version = "8.0.3"
dependencies = [
 "alloc-no-stdlib 2.0.4",
 "alloc-stdlib",
 "brotli-decompressor",
]

[[package]]
name = "brotli-decompressor"
version = "5.0.2"
dependencies = [
 "alloc-no-stdlib 3.0.0",
 "alloc-stdlib",
]

これを見ると、構図はこうです。

brotli 8.0.3
  ├── alloc-no-stdlib 2.0.4
  ├── alloc-stdlib 0.2.3
  │     └── alloc-no-stdlib 3.0.0
  └── brotli-decompressor 5.0.2
        └── alloc-no-stdlib 3.0.0

Rust では、同じ名前の trait でも、crate のバージョンが違えば別物です。

そのため、

alloc_no_stdlib 2.0.4 の Allocator
alloc_no_stdlib 3.0.0 の Allocator

が混ざってしまい、StandardAlloc が期待する trait を満たせない、というエラーになっていたようです。

回避策

私の環境では、src-tauri/Cargo.toml[dependencies] に次の2つを追加すると回避できました。

brotli-decompressor = "=5.0.1"
alloc-stdlib = "=0.2.2"

例です。

[dependencies]
tauri = { version = "2", features = [] }
tauri-plugin-opener = "2"

# workaround for brotli / alloc-no-stdlib mismatch
brotli-decompressor = "=5.0.1"
alloc-stdlib = "=0.2.2"

その後、Cargo.locktarget を削除して、再ビルドします。

cd src-tauri
rm -f Cargo.lock
rm -rf target
cargo build

Cargo.lock を見ると、alloc-no-stdlib2.0.4 だけになりました。

[[package]]
name = "alloc-no-stdlib"
version = "2.0.4"

この状態で、再度実行します。

cd ..
npm run tauri dev

これでビルドが進むようになりました。

何が起きていたのか

今回の問題は、Tauri アプリのコードが間違っていたわけではありません。

新規作成した Vanilla プロジェクトで、Rust 側の依存解決により、brotli 周辺の crate バージョンが噛み合わなくなっていたようです。

ざっくり言うと、次のような状態でした。

brotli 本体
  → alloc-no-stdlib 2.0.4 を使う

brotli-decompressor / alloc-stdlib
  → alloc-no-stdlib 3.0.0 を使う

結果
  → Allocator trait が別物扱いになり、ビルドエラー

Cargo.lock を読むと、何が混ざっているのかが見えてきます。

注意点

この回避策は、恒久対応というより一時的な回避策です。
今回の依存解決の問題が Tauri 側や依存 crate 側で修正されれば、この固定は不要になります。

また、今後は逆にこの固定が邪魔になる可能性もあります。
そのため、しばらく経ってから試す場合は、まず固定なしで動くか確認するのがよいと思います。

まとめ

Tauri の Vanilla プロジェクトを新規作成した直後に、brotli 周辺で Rust のビルドエラーに遭遇しました。

私の環境では、次の2つを src-tauri/Cargo.toml に追加することで回避できました。

brotli-decompressor = "=5.0.1"
alloc-stdlib = "=0.2.2"

Tauri は Web 技術でデスクトップアプリを作れる便利なフレームワークです。

しかし、内部では Rust / Cargo が動いています。
そのため、詰まったときには Cargo.lockcargo tree を読む必要が出てきます。

青年老いやすく学成りがたし。
ビルドエラーもまた学びの入口です。

迷わず行けよ、行けばわかるさ。

いままさに私と同じ問題に遭遇した人の助けになれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?