| この記事の要点 |
|
概要
AppImage は 2004 年頃に "klik" として始まり、後に "AppImage" へ改名された配布形式である。Linux におけるソフトウェア配布の長年の難題「ディストリビューションごとに DEB と RPM を別々にメンテする」「依存ライブラリのバージョンが合わない」を、必要な依存をすべて自前で抱え込む 1 ファイルにするという方向で解決しようとするアプローチである。
同じく Linux 向けポータブル配布として Snap(Canonical)と Flatpak(freedesktop.org)があるが、AppImage はランタイム・サンドボックス・常駐デーモン・ストアを必要としない点で最も軽量である。Krita、Inkscape、OBS Studio、Blender、Audacity といった主要 OSS が AppImage 版を公式公開している。
内部構造
AppImage ファイルを file app.AppImage で確認すると、先頭が ELF 実行ファイルであることがわかる。これは「ランナー(type-2 runtime)」と呼ばれる小さな実行コードで、後続に SquashFS イメージが連結されている。
- ELF ランナー — FUSE 経由で SquashFS をマウントし、
AppRunを起動する - SquashFS イメージ — 高圧縮かつランダムアクセス可能な読み取り専用ファイルシステム。
unsquashfsで展開可能
SquashFS を展開すると、AppDirと呼ばれる構造が現れる。
MyApp.AppDir/
├── AppRun # 起動スクリプト or バイナリ
├── myapp.desktop # メニュー統合用 .desktop ファイル
├── myapp.png # アイコン
├── .DirIcon # アイコンへのシンボリックリンク
└── usr/
├── bin/myapp
├── lib/libfoo.so.1
└── share/...
SquashFS の圧縮アルゴリズムは gzip / xz / zstd から選べる。xz は圧縮率重視、zstd は起動速度重視。デスクトップアプリでは zstd が好まれる傾向。
主な用途
- OSS デスクトップアプリの配布 — Krita、Inkscape、OBS、Audacity、KeePassXC、AppImageHub の数千件
- 商用ソフトの Linux 版 — Bitwig Studio、Reaper(実験的)など、ディストリ依存を避けたい場合
- 古い OS への新バージョン投入 — 古い CentOS / Ubuntu LTS で最新 GIMP を動かす、といったユースケース
- USB スティック持ち運び — chmod 済みの AppImage を入れておけば、別の Linux マシンで即起動できる
- CI 成果物 — タグ付きビルドを GitHub Releases に上げる際の標準形式の一つ
関連形式との比較
- vs DEB / RPM — DEB/RPM はシステムに統合される正攻法のインストール、AppImage はインストール不要のポータブル配布。役割が逆。AppImage はディストリを問わない代わりに、システム全体での依存共有はできない。
- vs Snap / Flatpak — Snap/Flatpak はランタイム + サンドボックス + 自動更新の総合パッケージシステム。AppImage はサンドボックスなし(必要なら Firejail などを別途併用)、自動更新は
appimageupdateを別途使う。 - vs .app バンドル — 思想は近い(必要なものをぜんぶ抱える)。違いは、.app はディレクトリだが、AppImage は単一ファイル(SquashFS をマウントしている)。
- vs EXE — EXE は OS に大量に依存しがちだが、AppImage は逆に「依存を抱え込んで OS に頼らない」設計。ポータブル EXE と思想は近い。
コマンド・ツール
chmod +x MyApp.AppImage— 実行可能ビットの付与(必須)./MyApp.AppImage— 直接起動./MyApp.AppImage --appimage-extract— AppDir をsquashfs-root/へ展開./MyApp.AppImage --appimage-mount— 一時マウント(FUSE 不可環境のデバッグ用)./MyApp.AppImage --appimage-version— バージョン情報./MyApp.AppImage --appimage-signature— GPG 署名表示./MyApp.AppImage --appimage-updateinformation— zsync 更新情報の表示- appimagetool — AppDir から AppImage を生成
- linuxdeploy — 依存ライブラリの自動収集と AppDir 構築
- AppImageUpdate — zsync ベースのデルタ更新ツール
- appimaged — デスクトップに AppImage を自動統合するデーモン(任意)
注意点
- FUSE が必要。多くのディストリで標準だが、コンテナ内・最小構成サーバでは
fuseパッケージのインストールが必要なことがある。代替として--appimage-extract後の直接実行も可能。 - サンドボックスはデフォルトで無い。APK や Flatpak のような権限分離は提供されない。信頼できる配布元から取得すること。Firejail などで隔離するのが定石。
- desktop 統合は手動。
.desktopファイルを~/.local/share/applications/へ置かないと、アプリメニューに出ない。appimagedやAppImageLauncherを使うと自動化される。 - 署名検証は習慣化する。配布元の GPG 公開鍵を別経路で取得して、
--appimage-signatureで検証する。 - glibc バージョンは AppImage 内で同梱できないため、ビルドホストは「サポートしたい最古ディストリ」と同等以下にする必要がある。これを誤ると古い OS で起動しない。
- ファイルサイズが大きい。依存をすべて抱えるため、同等の DEB よりも数倍大きくなる。
関連リンク
- 実行ファイル・パッケージ(親カテゴリ)
- ファイル拡張子とは(概論)
- DEB(.deb) / RPM(.rpm)(システムへ統合する正攻法)
- app(.app)(macOS の「依存を抱え込むバンドル」)
- EXE(.exe)(Windows のポータブル EXE と発想が近い)
- アーカイブ・圧縮形式(SquashFS は xz/zstd を内部で利用)
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15