0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

sudo apt install と sudo snap install は何が違うのか

0
Posted at

Ubuntuで環境構築をしていると、ソフトを入れるコマンドがいくつか出てきます。

たとえば curl を入れるときは、こんなコマンドでした。

sudo apt install curl

一方で、Postmanを入れるときはこうでした。

sudo snap install postman

どちらも「何かをインストールしている」ことは分かります。

でも、片方は apt、もう片方は snap

aptsnap では何が違うのでしょうか?

普段は気にせずに apt を使っていましたが、 snap というものに出会ったのでそちらを調べてみました。

ざっくり結論

aptsnap は、どちらもUbuntuでソフトをインストールするときに使うパッケージ管理ツールになります。

ただし、扱っているものや管理のされ方が違います。

コマンド 何をしているか よく見る場面
sudo apt install curl APTの仕組みで curl を入れる CLIツール、サーバー系のソフト
sudo snap install postman snapの仕組みでPostmanを入れる GUIアプリ、単体アプリ

CLI系なら必ず apt、GUI系なら必ず snap という話ではありませんが、

  • apt: Ubuntu/Debian系でよく使うパッケージ管理
  • snap: アプリをまとまった形で配布・管理する仕組み

くらいに捉えると分かりやすかったです。

そもそもパッケージ管理ツールとは

aptsnap は、どちらもパッケージ管理ツールになります。

やりたいこと
ソフトを入れる curl を入れる
ソフトを消す 使わなくなったアプリを消す
ソフトを更新する 新しいバージョンにする
必要な部品も一緒に扱う そのソフトが動くためのライブラリも入れる

なんらかのソフトをインストールする際に、そのソフトを入れる、更新する、削除するなどの操作をおこなうツールになります。

その代表的なものが apt で、Ubuntuでは snap もよく出てきます。

aptとは

apt は、UbuntuやDebian系のLinuxでよく使われるパッケージ管理ツールです。

たとえば、次のように使います。

sudo apt update
sudo apt install curl

sudo apt update は、インストールできるソフトの一覧を更新するコマンドです。

sudo apt install curl は、その一覧をもとに curl をインストールするコマンドです。

ここで出てくる curl は、ターミナルからHTTPリクエストを送ったり、APIの動作確認をしたりするときによく使うCLIツールです。

こういうコマンドラインで使う基本的なツールは、apt で入れる例が公式のドキュメントなどに書かれています。

snapとは

snap は、Canonicalが提供しているパッケージ管理の仕組みです。

CanonicalはUbuntuを作っている会社です。

snapは、アプリ本体と必要なものをまとめて配布しやすい形式です。

PostmanのようなGUIアプリでは、snapでインストールする手順を公式ドキュメントで見かけることがあります。

sudo snap install postman

aptsnap は別々のパッケージ管理ツールになります。

aptとsnapの違い

細かく見ればもっと違いはあるとは思いますが、おおよそ下記のような整理で私は理解しました。

観点 apt snap
扱うもの debパッケージ snapパッケージ
ソフトの置き場 APTに設定されたリポジトリ 主にSnap Store
更新 一覧更新は apt update、更新は apt upgrade 自動更新される。手動なら snap refresh
よく見る例 curl, git, nginx Postman, Slack, VS Code など
初心者向けの見方 Ubuntu標準寄りの入れ方 アプリ単位でまとまった入れ方

この表で一番大事なのは、aptsnap は「同じ場所から同じ形式のものを取ってきているわけではない」という点です。

どちらもインストールコマンドではありますが、裏側の管理方法が異なっているようです。

仕組みの違いはどこか

apt で入れるdebパッケージは、アプリが必要とするライブラリをOS側の共有ライブラリに頼ることが多いです。

共有ライブラリというのは、複数のアプリが同じ部品を使い回すようなイメージです。

そのため、必要なものを全部アプリごとに抱え込まなくてよく、比較的軽く管理しやすいです。

一方で、アプリ同士が同じ部品を共有しているため、ライブラリのバージョン違いでうまく動かない、という問題が起きることもあります。

特に、外部リポジトリを追加したり、複数の入れ方が混ざったりすると、このあたりで詰まりやすくなります。

いわゆる「依存関係で詰まる」というやつです。

snap は少し考え方が違います。

snapパッケージは、アプリ本体と必要なものをまとめて配布しやすい形式です。

そのぶん容量は大きくなりやすいですが、環境による差を減らしやすくなります。

また、snapにはアプリをある程度隔離して動かす考え方があります。

かなりざっくり言うと、

  • apt: OS側の共有部品を使いながら入れる
  • snap: アプリと必要なものをまとめて、隔離された形で入れる

という違いです。

図にすると、かなり単純化していますがこういうイメージです。

どう使い分けるか

curlgitnginx のようなコマンドラインツールやサーバー用途のソフトは、apt で十分なことが多いようです。

OS標準のパッケージ管理に乗るので、軽く扱いやすく、Ubuntuの環境とも相性がよいです。

一方で、GUIアプリや、公式リポジトリにないアプリ、比較的新しいバージョンを使いたいアプリでは、snap が候補になります。

たとえば、Slack、VS Code、Chromiumのようなデスクトップアプリでは、snapでの配布を見かけることがあります。

なんにせよ、公式ドキュメントやチームの手順があるなら、それを優先するのが一番安全になりますね。特に公式ドキュメントの確認は必須です。

まとめ

aptsnap は、どちらもUbuntuでソフトをインストールするために使います。

ただし、扱っているパッケージの形式や、ソフトの配布元、更新のされ方が違います。

apt はOS側の共有部品を使いながら軽く管理しやすい。

snap はアプリと必要なものをまとめて、環境差を減らしやすい。

linuxはエンジニアであるならばほぼ必ず触るものだと思うので、少しずつ学習していきたいです。

また気になったことがあればlinux関係も記事を書いて、アウトプットしていこうと思います。

参考にした資料

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?