なぜかストレージが満杯になっていた日
その日は普通に作業していたところ、Docker imageをビルド中に“No space left on device”という通知が届いた。df -hで確認すると、/パーティションが97%埋まっている。du -sh /*で犯人を追うと、意外な結果が出た:
$ du -sh /var/lib/flatpak
18G /var/lib/flatpak
18GB。Flatpakだけで。2年近くFedoraをメインの開発マシンとして使っていて、パッケージの更新速度には満足していたが、アプリをインストールするたびに密かに積み上がっていくruntimeのことは気にしていなかった。この記事は、ある夜に掃除しながらFlatpakの実際の動作を徹底的に調べた結果だ。
Flatpakとは何か、なぜFedoraで使われるのか
Flatpakはアプリをサンドボックス内で動かし、システムの他の部分から分離してパッケージ化する。各アプリは独自のruntime(実行に必要なライブラリ群)を持つ。だから100MBのアプリをインストールしても数百MB分のruntimeが一緒についてくるのは普通のことで、バグではない。
Fedora WorkstationはFedora 38からFlatpakとFlathubをデフォルトで統合している。主な理由は:
- Spotify、Discord、SlackなどのGUIアプリには公式RPMがなく、Flatpakがクリーンにインストールする唯一の方法だ。
- サンドボックスによってアプリを隔離し、システムへの影響リスクを軽減できる。
- DNFとは独立してアップデートできる——最新のアプリを使うためにFedoraのリリースを待つ必要がない。
サンドボックスは絶対的な安全を意味するわけではない。ストレージについても——1年放置すればわかる。
実践:FlatpakをAからZまで管理する
インストールとFlathubのセットアップ
新しくインストールしたFedora WorkstationにはFlatpakが既に含まれている。Flathubリポジトリを追加するだけでいい:
# Flathubリポジトリを追加する(公式、最多アプリ数)
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
# 現在のリモートを確認する
flatpak remotes
Flathub以外にも、Fedoraにはデフォルトでfedoraリモートがある——Fedoraチームのビルド版が含まれている。実際のところ、Flathubのほうが更新が速いのであまり使っていない。
アプリのインストール、検索、アンインストール
# アプリを検索する
flatpak search firefox
# インストール(--user:現在のユーザーのみ、ストレージ節約)
flatpak install flathub org.mozilla.firefox
flatpak install --user flathub com.spotify.Client
# アプリを実行する
flatpak run org.mozilla.firefox
# インストール済みアプリを一覧表示する
flatpak list --app
# アプリをアンインストールする
flatpak uninstall org.mozilla.firefox
# アプリをアンインストールしてユーザーデータも削除する
flatpak uninstall --delete-data org.mozilla.firefox
覚えておくべきこと:flatpak uninstallはデフォルトでユーザーデータを削除しない。データは~/.var/app/に残り続ける——完全に削除したい場合は--delete-dataを付ける。
サンドボックスとアクセス権限を理解する
インストールしたら実行する——ほとんどのユーザーはそこで止まる。しかしパーミッションこそが注目すべき部分だ。各Flatpakアプリはマニフェストで宣言された権限で動作するが、かなり広範な権限を要求するアプリもある。確認してみよう:
# アプリのパーミッションを確認する
flatpak info --show-permissions com.spotify.Client
# またはflatpak-overrideで確認・編集する
flatpak override --show com.spotify.Client
アプリはファイルシステム、ネットワーク、オーディオデバイスなどへのアクセス権限を宣言できる。filesystem=homeを持つアプリがあれば、ネイティブアプリと同様にホームディレクトリ全体を読み取れることを意味する。この場合、サンドボックスの意味はほとんどなくなる。
権限を制限するには:
# ファイルシステムアクセス権限を取り消す
flatpak override --nofilesystem=home com.someapp.App
# 特定のディレクトリへのアクセスを許可する
flatpak override --filesystem=~/Downloads com.someapp.App
# デフォルトのパーミッションにリセットする
flatpak override --reset com.someapp.App
より直感的な方法はFlatsealを使うことだ——パーミッション管理のGUIで、日常的に愛用している:
flatpak install flathub com.github.tchx84.Flatseal
ストレージの最適化——最もよく見落とされる部分
最初の問題に戻ろう:Flatpakが18GB。主な原因は未使用のruntime——アップデートやアプリのアンインストール後に残った古いruntimeだ。
# すべてのruntime(未使用を含む)を確認する
flatpak list --runtime
# 各項目のサイズを確認する
du -sh /var/lib/flatpak/runtime/*
du -sh ~/.local/share/flatpak/runtime/* # --userでインストールした場合
ストレージが異常に大きいと疑ったときに最初に実行するコマンド:
# 未使用のruntimeとアプリをすべて削除する
flatpak uninstall --unused
# 削除されるものをプレビューする(実際には削除しない)
flatpak uninstall --unused --dry-run
あの日、たった1つのコマンドで約11GBを解放できた。Flatpakは必要なときにロールバックできるよう、アップデートのたびに古いruntimeを保持する——合理的な仕組みだが、定期的に掃除しないとストレージを食い続ける。
定期的なアップデートも古いバージョンの蓄積を防ぐのに役立つ:
# すべてのアプリとruntimeを更新する
flatpak update
# 特定のアプリを更新する
flatpak update org.mozilla.firefox
# アップデート後、未使用のものを削除する
flatpak uninstall --unused
システム全体 vs ユーザーごとのインストール
Fedoraユーザーがデフォルト(システム全体)でFlatpakをインストールしているのをよく見かける。実際には使い分けを考えるべきだ:
- システム全体(
--userなし):runtimeは/var/lib/flatpakに配置され、sudoが必要で、マシン上のすべてのユーザーで共有される。 - ユーザーごと(
--user):runtimeは~/.local/share/flatpakに配置され、sudoが不要で、現在のユーザーのみに適用される。
個人マシンでユーザーが1人しかいない場合——ほとんどのアプリに--userを使えばsudoが不要で管理も簡単だ。複数ユーザーのマシンやサーバーではシステム全体のほうが合理的だ。
定期クリーンアップスクリプト
小さなスクリプトを作って毎週cronに登録している:
#!/bin/bash
# /usr/local/bin/flatpak-cleanup.sh
echo "=== Flatpakクリーンアップ: $(date) ==="
echo "実行前:"
du -sh /var/lib/flatpak 2>/dev/null
du -sh ~/.local/share/flatpak 2>/dev/null
flatpak update -y
flatpak uninstall --unused -y
echo "実行後:"
du -sh /var/lib/flatpak 2>/dev/null
du -sh ~/.local/share/flatpak 2>/dev/null
# 実行権限を付与してテスト実行する
chmod +x /usr/local/bin/flatpak-cleanup.sh
/usr/local/bin/flatpak-cleanup.sh
# crontabに追加する(毎週日曜日の午前3時に実行)
crontab -e
# 以下の行を追加する:
# 0 3 * * 0 /usr/local/bin/flatpak-cleanup.sh >> /var/log/flatpak-cleanup.log 2>&1
まとめ
Flatpakは確かに便利だ——Spotify、Discord、Slackを非公式RPMを探したり怪しいリポジトリを追加したりせずにクリーンにインストールできる。しかし、積極的に掃除しなければ、気づかないうちにストレージが数十GBまで膨らんでいく——まさに自分が経験したことだ。
覚えるべきコマンドは2つだけだ:flatpak uninstall --unusedで不要なruntimeを削除し、flatpak override(またはFlatseal)でパーミッションを管理する。週次のクリーンアップスクリプトが残りを処理してくれる。
クリーンアップしてper-userインストールに切り替えた後、マシンのFlatpakは18GBから約4GBに減った。それでも小さな数字ではないが——Flatpakがもたらすメリットには十分見合っている。

