2つのパッケージ管理システムを使う

本連載の読者であるLinuxユーザーには頭の痛い問題だと思うが、今後数年の間は、どのLinuxディストリビューションでも2つのパッケージ管理システムを使うことになりそうだ。Ubuntu Desktopの場合であれば、現在は次のようなすみ分けで2つのパッケージ管理システムを使う状態になっている。

パッケージ管理システム 目的
apt システムパッケージの管理、サードパーティ製パッケージの管理
Snap サードパーティ製パッケージの管理

「apt」はUbuntuのパッケージ管理システムだ。カーネルやユーザランドの基本的なコマンドからサードパーティ製のコマンドまで、Ubuntuではaptを使ってパッケージとして管理が行われている。一方、「Snap」は新しいパッケージ管理システムだ。Ubuntu Desktop 18.04 LTSではすでにデフォルトでいくつかのパッケージがSnap経由でインストールされている。

Ubuntu Desktop 18.04 LTSでは最初からSnapパッケージがインストールされている

今後のことは誰にもわからないが、現在の動きを見る限りでは、Snapのもともとの開発元であるCanonicalはそう遠くない段階で次のような管理状況を実現していきたいのではないかと思う。

パッケージ管理システム 目的
apt システムパッケージの管理
Snap サードパーティ製パッケージの管理

カーネルと基本コマンドといった最小限のシステム管理についてのみaptを使い、サードパーティ製アプリケーションの管理にはSnapを使うという位置づけだ。将来的にはシステムも含めてSnapにするということも考えられるが、今のところそれはあまり現実的ではないように見える。

Snapに登録されているパッケージは「Snap Store」で調べることができるので、どのようなパッケージが用意されているかはWebブラウザから調べることができる。人気の高いパッケージは大方がSnapパッケージになっている状況だ。

Snapパッケージを調査できるSnap Store

Snap Storeに登録されているVisual Studio Code

SnapパッケージはWebブラウザ経由でダウンロードしてインストールするのではなく、「snap」というコマンドを使ってインストールを行う仕組みになっている。このあたりはaptなどとほぼ同じ使い方だ。新しく管理コマンドの使い方を学習するコストはほとんどないと思っておいて大丈夫である。「apt」と書いていたコマンドを「snap」に変えれば、大体何とかなる。

Ubuntu Serverで利用するSnap

すでにaptで満足しているユーザーは、「なぜ今さら新しいパッケージ管理システムを使うのか」と不思議に思うかもしれない。簡潔に言えば、Snapのほうが管理が簡単になるためだ。それだけで使い始める価値があるだろう。

知れば使いたくなる! Snapの特徴

Snapの特徴を簡単にまとめると次のようになる。

Snapの特徴
Ubuntuのみならず、複数の主要Linuxディストリビューションに対応している
操作方法は現在主流のパッケージ管理システムとよく似ている
パッケージは自動的にアップデートされ、最新版が維持される
パッケージはシステムやほかのパッケージからの独立性が高く、システムやほかのパッケージに影響を与えにくい
パッケージは依存するライブラリなども含んでおり、単体でのアップデートを実施できる

apt世代のパッケージ管理システムは、基本的に全体で1つの整合性を実現するような設計になっている。そのため、システムもパッケージも常に全てをアップデートし続ける必要がある。システム全体でライブラリやコマンドなどの依存関係が構築されるため、特定のパッケージだけアップグレード/ダウングレードするといった操作を前提にした設計はされていない。

他方、Snapはそうしたことが可能なように設計されている。パッケージ単体で依存するライブラリやコマンドを含めるように設計されており、システムやほかのパッケージに影響を与えにくい。さらに、Snapでは管理デーモンが自動的にパッケージのアップグレードを実施する仕組みになっている。つまり、いったんインストールすれば、ユーザーは明示的にアップデートを実施する必要がないということだ。

パッケージそれぞれの独立性が高く、壊れにくく、アップデートの手間もかける必要がない。そうなると、aptでインストールするよりもSnapでインストールしておいたほうが楽だ、ということになる。

aptで提供されているパッケージの全てがSnapにも存在するわけではないので、現在ではaptもSnapも両方使う必要がある。しかし、時々Snapにパッケージが追加されたか調べて、追加されたものはaptから削除してSnapのほうでインストールするようにする……というのは悪くない方法だ。Snapは独立性が高いので、もしaptで同じパッケージがインストールされていても衝突することがない。その点でも扱いやすいパッケージ管理システムだ。

スキルの”使い回し”が可能

Snapの特徴の1つが、このパッケージ管理システムはUbuntuに限定されるものではなく、すでに主要なLinuxディストリビューションが対応しているユニバーサルなパッケージ管理システムだということだ。これはユーザーとパッケージの制作側にそれぞれ次のようなメリットがある。

対象 メリット
パッケージ開発側 Snapパッケージを開発すれば複数のLinuxディストリビューションに対応できる。apt、yum、dnfといった複数のパッケージを開発しなくても済む
ユーザ側 Snapの使い方を覚えれば複数のLinuxディストリビューションで同じ操作ができる。ちょっとずつ異なるパッケージ管理システムの使い方を調べたり、ちょっとずつ異なるパッケージ名に悩まされたりしなくて済む

現在のところLinuxディストリビューションのみが対応しているが、Linuxバイナリ互換機能を備えたほかのプラットフォームでも利用できるようになる可能性もある。なかなか将来の見通しが明るいパッケージ管理システムだ。

Snapと同じような発想のパッケージ管理システムは、PC-BSD (現 TrueOS)がPBIとして実装している。Snapの場合は、Canonicalが開発を進めたことで早い段階で広いユーザーを獲得した点が特に注目される。今後もSnapの利用者は増え続けるだろう。早めに使い方を覚えてしまいたいパッケージ管理システムだ。