AppImage は、アプリ本体と依存ライブラリを 1 つの実行ファイルに詰め込んだ Linux 向けのポータブル形式です。インストール不要で、ダウンロードして実行権限を付ければ Ubuntu でも Fedora でも動きます。パッケージマネージャに登録されない代わりに、配布側はディストリビューションごとに .deb / .rpm を用意する手間から解放されます。Tauri のバンドラーは linuxdeploy を自動取得して AppImage を組み立てるので、設定はほぼ不要です。
前提条件
- Linux 上でビルドすること。WebKitGTK 4.1 系の開発パッケージなど、Tauri の Linux 依存関係が揃っていること(Hello World (Ubuntu))
fileコマンド(Ubuntu のfileパッケージ)。linuxdeploy が使用します- 初回ビルド時のインターネット接続。
linuxdeployと GTK プラグインが~/.cache/tauri/にダウンロードされます
プラグインや capability の権限は不要です。
1. tauri.conf.json の設定
AppImage は Linux の既定ターゲットに含まれているので、targets が "all" なら何もしなくても生成されます。明示するなら次のとおりです。
{
"bundle": {
"targets": ["appimage"],
"linux": {
"appimage": {
"bundleMediaFramework": false,
"files": {
"/usr/share/my-notes/README.md": "../README.md"
}
}
}
}
}
bundleMediaFramework:<video>/<audio>を再生するアプリではtrueにします。GStreamer 一式が同梱されるためサイズが 15〜35MB ほど増えます。Ubuntu 以外のビルド環境では同梱が不完全になることがありますfiles:bundle.resourcesを使わずに任意のファイルを AppImage 内に置く指定。キー(配置先)は/usr/で始める必要があります
通常のアセット同梱には bundle.resources を使ってください(画像やDBファイルを配布物に同梱する)。
2. ビルドする
npm run tauri build -- --bundles appimage
src-tauri/target/release/bundle/appimage/<productName>_<version>_amd64.AppImage が生成されます。ビルド中に strip が失敗する環境(一部の ARM や古い binutils)では、環境変数で無効化できます。
NO_STRIP=true npm run tauri build -- --bundles appimage
ARM64 向けの AppImage は linuxdeploy がクロスビルドに対応していないため、ARM 実機か QEMU 上でビルドする必要があります。
動作確認
生成物はそのままでは実行ビットが立っていないことがあるため、付与してから起動します。
chmod a+x my-notes_1.0.0_amd64.AppImage
./my-notes_1.0.0_amd64.AppImage
中身を確認したいときは展開できます。squashfs-root/usr/bin/ に実行ファイル、usr/lib/ に同梱ライブラリ、usr/share/applications/ に .desktop が入っています。
./my-notes_1.0.0_amd64.AppImage --appimage-extract
ls squashfs-root/usr/lib
よくあるエラーと対処法
起動時に libfuse.so.2 が見つからない
AppImage の実行には FUSE 2 が必要ですが、Ubuntu 22.04 以降や Fedora の最近のバージョンでは既定で入っていません。「dlopen(): error loading libfuse.so.2」という趣旨のメッセージで落ちる場合、配布先に次のいずれかを案内します。
# Ubuntu 22.04 / Debian 12
sudo apt install libfuse2
# Ubuntu 24.04
sudo apt install libfuse2t64
# FUSE なしで実行する(展開してから起動するので初回が遅い)
APPIMAGE_EXTRACT_AND_RUN=1 ./my-notes_1.0.0_amd64.AppImage
別のマシンで GLIBC_2.xx not found
「version `GLIBC_2.38' not found」という趣旨のエラーは、ビルド環境の glibc が実行環境より新しいことが原因です。AppImage は glibc を同梱しません。サポートしたい最も古いディストリビューション(Ubuntu 22.04 や Debian 12 が現実的な下限)でビルドするか、その環境の Docker コンテナ内でビルドしてください。
linuxdeploy のダウンロードに失敗する
プロキシ環境では初回の linuxdeploy 取得でタイムアウトします。HTTPS_PROXY を設定するか、ネットのある環境で作った ~/.cache/tauri/ をコピーしてください。
ビルドは通るが動画・音声が再生されない
bundleMediaFramework: false のままだと、実行環境に GStreamer のプラグインが揃っていない限り再生できません。true にして再ビルドし、それでも駄目なら実行環境側に gstreamer1.0-plugins-good などを入れます。
OS ごとの違いと注意点
- AppImage は Linux 専用です。同じ Linux でも Alpine のような musl ベースの環境では動きません
- サイズは素の
.debの 2〜6MB に対して 70MB 以上になります。ライブラリを同梱する形式の宿命なので、サイズを気にするなら Deb パッケージ を併用します - 実行してもアプリケーションメニューには登録されません。メニュー統合が必要なら
.debにするか、ユーザー側で AppImageLauncher などを使ってもらいます - AppImage はサンドボックスではありません。通常のバイナリと同じ権限で動きます
- Wayland 環境で WebKitGTK の描画が乱れる場合は、環境変数
WEBKIT_DISABLE_COMPOSITING_MODE=1を試す、という回避策が知られています
