Linuxのパッケージの依存関係や関連トラブルについて、よくわからないという方も多いのではないでしょうか。
今回は、Excelファイルを使いながら、この依存関係とトラブルについてわかりやすく解説します。
普段、Excelを使う方にとって、分かりやすい内容になっています。
Linuxは、カスタマイズ性の高さと、オープンソースで多くの人が自由に改良している性質上、WindowsやMac OSよりも依存関係の問題が発生しやすくなっています。
この記事を読めば、Linuxの依存関係の基本や、それによるトラブルを防ぐための方法が一通りザッと分かりますので、ご一読ください。
Linuxの「依存関係」とは
Linuxにおける「依存関係」とは、あるソフトウェアが正しく動作するために、ディストリビューションや他のソフトウェアのライブラリ(機能の集まり)などに頼っている(依存している)状態のことをいいます。
一番単純なパターンをエクセルファイルで例えると以下の通り。
それぞれの表は、別々のエクセルファイルです。
見やすいように1枚の画像に表示していますが、これ以降の画像も、1つの表は1つのエクセルファイルですので、それを前提に読み進めてください。
上の画像では、「商品別集計表」は「一覧表」からデータを参照して表を表示しています。
つまり、「商品別集計表」は「一覧表」のデータに依存しており、この状態を「依存関係」といいます。
「依存関係」自体は決して悪いことではなく、複数のソフトウェアなどで共通する機能をそのソフトウェアごとに作成する必要がなく、システムを効率的に使え、開発者は新しい機能に労力を集中することができ、ソフトウェアのファイルサイズも節約できるなどのメリットがあります。
しかし、「依存関係」が複雑に絡み合うと、ソフトウェアなどが正常に動かなくなるという問題が発生します。
次の章では、この「依存関係によるトラブル」について説明します。
Linuxの「依存関係によるトラブル」とは
ソフトウェアをいくつもインストールすると、複数のソフトウェアが一つのライブラリと依存関係となる場合があります。
イメージとしては以下の通り。
これは、新たに「月別集計表」も「一覧表」と「依存関係」となった状態です。
この時点では、特に問題は発生していませんが、ここで、「商品集計表」の内容変更(アップグレード)にともなって「一覧表」も最新バージョンにアップグレードすると、以下の図のように、「月別集計表」が「一覧表」からデータを正しく参照できなくなり、エラーが発生したり、データが読み込めなくなったりします。
また、他のソフトウェアをアンインストールやアップグレード、ディストリビューションのアップグレードなどでライブラリが削除されてしまった場合、同じライブラリを使用していたソフトウェアがエラーを起こすというパターンもあります。
これが、「依存関係によるトラブル」です。
Linuxの「依存関係によるトラブル」を解決する「パッケージ管理システム」
「依存関係」はソフトウェア開発の効率化や、ファイルサイズの節約などの有益な面もありますが、上記のように「依存関係によるトラブル」を発生させる可能性も持ち合わせています。
この「依存関係によるトラブル」を回避するために、Linuxでは「パッケージ管理システム」を採用しています。
「パッケージ」とは、特定のソフトウェアやアプリケーション、ライブラリなどをまとめたファイルのことです。
「パッケージ」には、一般的にパッケージにはソフトウェア本体、メタデータ、依存関係情報、設定ファイルが含まれます。
この「パッケージ」をインストール、更新、削除、依存関係の解決など、ソフトウェアの管理全般を行うための仕組みが「パッケージ管理システム」です。
「パッケージ管理システム」を直接操作する「パッケージマネージャー」
「パッケージ管理システム」は、「パッケージマネージャー」というツールやコマンドラインアプリケーションを使って直接操作します。
Linuxのパッケージには主に、
・Debian形式
・RPM形式
という2つの形式があり、形式ごとに使用するコマンドが違います。
各コマンドの特徴を理解し、使用しましょう。
なお、最低限のコマンドだけ覚えたいという方は、「apt」と「dnf」をとりあえず覚えておけば問題ないでしょう。
Debian形式 (.deb):
Debian形式は、Debian系のディストリビューション(Debian、Ubuntuなど)で使われているパッケージで、拡張子は.deb。
「debパッケージ」とも呼ばれます。
このパッケージを扱うためのコマンドには「dpke」と「apt」があり、それぞれの特徴は以下の通り。
コマンド | 特徴 |
dpkg | debパッケージを直接操作するが、依存関係の解決は自動では行わない。 |
apt | 依存関係を自動で解決し、インストールやアップデートを簡単に行える。 |
RPM形式 (.rpm):
RPM形式は、Red Hat系のLinuxディストリビューション(RHEL、Fedraなど)で使われているパッケージで、拡張子は.rpm。
「rpmパッケージ」とも呼ばれます。
このパッケージを扱うためのコマンドには「rpm」と「yum」、「dnf」があり、それぞれの特徴は以下の通り。
コマンド | 特徴 |
rpm | RPMパッケージを直接操作するが、依存関係の解決は自動では行わない。 |
yum | 依存関係を自動で解決し、インストールやアップデートが行える。 |
dnf | yumの後継で、より高速で効率的なパッケージ管理を提供。 |
Linux Mintの「ソフトウェアマネージャー」は「パッケージマネージャー」のフロントエンドGUIツール
「パッケージマネージャー」には、一般ユーザー向けフロントエンドとして、視覚的にソフトウェアを検索・インストールできて操作が簡単なGUI(グラフィカルユーザーインターフェイス)ツールも用意されています。
Linux Mintでは「ソフトウェアマネージャー」、Zorin OSでは「ソフトウェア」といわれているものが、そのフロントエンドGUIツールです。
<Linux Mintのソフトウェアマネージャー>
<Zorin OSのソフトウェア>
なお、Linux Mintの「ソフトウェアマネージャー」にはアップデートの機能はなく、別に「アップデートマネージャー」が用意されています。
また、Zorin OSの「ソフトウェア」にはアップデート機能があり、これ1つでインストール・アンインストール・アップデートが可能です。
依存関係の問題が発生しないユニバーサルパッケージ
ここまで紹介した「パッケージ管理システム」ですが、以下の理由などにより、「依存関係によるトラブル」を完全に解消することはできません。
・依存関係の複雑さ
多くのソフトウェアが別のソフトウェアに頼っているため、1つを更新すると他に影響が出る。
・バージョンの違い
あるソフトウェアは「古いバージョン」を、別のソフトウェアは「新しいバージョン」を必要としているが、新旧のバージョンを同時に使用できない場合、どちらかに影響が出る。
・公式外のソフトウェアのインストール
パッケージマネージャーを使わずに公式外のソフトウェアを手動でインストールした場合、パッケージ管理システムに認識されず管理されないため、影響が出る。
ただし、Linuxのパッケージには、依存関係の問題が発生しない「ユニバーサルパッケージ」というものがあり、現在、以下の3つが良く使われています。
・snap
・Flatpak
・AppImage
ただし、上記の3つはdebパッケージやrpmパッケージのような「ネイティブパッケージ」よりも空き容量が必要だったり、取り扱っているパッケージが少なかったり、システム的にも完全に置き換わることが難しかたりするため、「一つの選択肢」として使われています。
snap
snapは、「サンドボックス化」という「ソフトウェアを隔離された環境で実行する技術」が使われており、Linuxディストリビューションに影響を与えずにソフトウェアを実行することができるため、依存関係による問題が発生しません。
イメージとしては以下の通り。
イメージを見てもわかる通り、ソフトウェアを動かすために必要なライブラリなどのパーツがすべてサンドボックスの中にあるため、ネイティブパッケージよりも容量が大きくなります。
空き容量の少ないパソコンでは多用しないようにしましょう。
また、snapはデスクトップソフトウェアだけでなく、サーバーサイドのソフトウェアでも使えます。
Ubuntuが強く推進しており、UbuntuとZorin OSには初期状態でソフトウェアストアに組み込まれているので、簡単に利用できます。
なお、Linux Mintにsnapをインストールする方法は、以下のページで紹介していますので、参考にしてください。
Flatpak
Flatpakも「サンドボックス化」を使用して、依存関係による問題を発生しないようにしています。
パッケージの容量がネイティブパッケージよりも大きくなるのも、snapと同様です。
snapとの違いとしては、デスクトップソフトウェアに特化しており、snapよりも起動が早いという点です。
Linux Mint、Zorin OSには初期状態でソフトウェアマネージャーに組み込まれているので、簡単に利用できます。
AppImage
AppImageは、実行に必要なすべてのファイルを含む自己完結型パッケージなため、インストールも必要ありません。
ダウンロードして実行するだけで使用可能です。
基本的にはサンドボックス化されていませんが、他のシステムファイルに影響を与えないように設計されています。
SnapやFlatpakよりも容量が大きくなりがちです。
AppImageの使い方は、以下のページで紹介していますので、参考にしてください。
まとめ
Linuxは、カスタマイズ性の高さと、オープンソースで多くの人が自由に改良している性質上、WindowsやMacOSよりも依存関係の問題が発生しやすいOSです。
この問題を解決するためにLinuxでは、「パッケージ」といわれる、特定のソフトウェアやアプリケーション、ライブラリなどをまとめたファイルを「パッケージ管理システム」というシステムで管理しています。
「パッケージ管理システム」は「パッケージマネージャー」というツールやコマンドラインアプリケーションを使って直接操作しますが、一般ユーザー向けにLinux Mintでは「ソフトウェアマネージャー」、Zorin OSでは「ソフトウェア」というフロントエンドGUIツールも用意されています。
ただ、「パッケージ管理システム」でも完全には「依存関係によるトラブル」を完全には解決できないため、依存関係の問題が発生しないユニバーサルパッケージも利用されていますが、それぞれのパッケージの容量が大きくなるため、パソコンのスペックにも注意が必要です。
「apt」や「dnf」などのコマンド、一般ユーザー向けのフロントエンドGUIツール、ユニバーサルパッケージの特徴を理解して使用し、快適なLinuxライフを満喫しましょう。