apt/brewでインストールしたパッケージをmise.tomlで管理したい

開発機のセットアップでは、mise管理下のツール以外にaptbrewで入れるシステムパッケージも必要になる。mise bootstrap packagesは、[bootstrap.packages]にシステムパッケージを宣言し、apt/brewなど複数のパッケージマネージャを横断してインストール・管理するコマンドである。

mise bootstrap packages useで追加とインストールを1コマンドで行う

manager:packageの書式でパッケージを指定する。mise useと同様に、設定への追記とインストールを同時に行う。

$ mise bootstrap packages use apt:jq -y
mise /work/mise.toml: added apt:jq
mise $ apt-get install -y -- jq
...
mise apt: installed jq
[bootstrap.packages]
"apt:jq" = "latest"

brew:jqのようにbrewのformula名も指定できる。apt/brewのような組み込みマネージャは、rootでない場合に必要に応じてsudoを使う。

mise bootstrap packages applyで設定通りにインストールする

mise.tomlを直接編集して[bootstrap.packages]にエントリを追加した場合は、applyで未インストール分だけをまとめてインストールできる。

[bootstrap.packages]
"apt:jq" = "latest"
"apt:tree" = "latest"
$ mise bootstrap packages apply -y
...
mise apt: installed tree

jqは既にインストール済みのためスキップされ、未インストールのtreeだけがインストールされる。

mise bootstrap packages statusで状態を確認する

現在の状態と設定の同期状況を確認できる。

$ mise bootstrap packages status
apt  jq    1.7.1-3ubuntu0.24.04.2  installed
apt  tree  2.1.1-2ubuntu3.24.04.2  installed

--missingを付けると、未同期のパッケージがある場合に終了コード1を返す。CIやログイン時のチェックに使える。

$ mise bootstrap packages status --missing
apt  jq    1.7.1-3ubuntu0.24.04.2  installed
apt  tree                          missing
$ echo $?
1

--jsonを付けると、マネージャごとの詳細な状態をJSONで取得できる。

$ mise bootstrap packages status --json
{
  "apt": {
    "available": true,
    "packages": [
      {
        "package": "jq",
        "requested_version": "latest",
        "desired_state": "present",
        "state": "installed",
        "installed_version": "1.7.1-3ubuntu0.24.04.2"
      }
    ]
  }
}

mise bootstrap packages upgradeで既存パッケージを最新化する

インストール済みのパッケージだけを対象に、パッケージマネージャのメタデータを更新してからアップグレードする。未インストールのパッケージは対象外で、applyを使う必要がある。

$ mise bootstrap packages upgrade --manager apt --dry-run
apt-get update
apt-get install -y --only-upgrade -- jq tree

mise bootstrap packages pruneはマネージャによって対応状況が異なる

pruneは、設定から削除されたパッケージを実際にアンインストールするコマンドだが、対応しているマネージャは限られる。aptでは非対応である。

$ mise bootstrap packages prune --manager apt --dry-run
mise ERROR package manager 'apt' does not support pruning

ヘルプによるとpruneが対応するのはHomebrewのformula・mise管理下のcask・アンインストールに対応したプラグイン経由のパッケージのみで、デフォルトの対象マネージャもbrewである。aptで入れたパッケージを削除する場合は、apt removeのような別の手段が必要になる。