ソフトウェアリポジトリ
From Wikipedia, the free encyclopedia
ソフトウェアリポジトリ (英: software repository)は、ソフトウェアパッケージの格納場所のことで、多くの場合、目次とメタデータが保存される。単にリポジトリと呼ばれる場合もある。ソフトウェアリポジトリは通常、ソース管理またはリポジトリマネージャによって管理される。パッケージマネージャを使用すると、リポジトリ("パッケージ" と呼ばれる)を自動でインストール、更新できる。
多くのソフトウェア発行者などの組織は、無料またはサブスクリプション料金でインターネット上にコンテンツリポジトリ用のサーバーを持っている。リポジトリは、 Perlプログラミング言語のCPANなどの特定のプログラム専用、オペレーティングシステム全体専用のものがある。リポジトリの運営者は通常、リポジトリからソフトウェアパッケージを検索、インストール、その他の方法で操作することを目的としたパッケージ管理システムと呼ばれるツールを提供している。たとえば、多くのLinuxディストリビューションは、 たとえばDebianベースのディストリビューションで一般的に見られるAdvanced Packaging Tool (APT)、またはRedHatベースのディストリビューションで見られるyumといったパッケージ管理システムを使用している。また、Arch Linuxやequo、 Sabayon Linuxで使われるpacmanのような独立したパッケージ管理システムもある。
ソフトウェアリポジトリには便利なパッケージが含まれており、主要なリポジトリにはマルウェア防止機能が備わっている。信頼できるベンダーのデジタル署名されたリポジトリを使用するようにコンピュータが構成されており、適切なアクセス許可システムと組み合わされている場合、マルウェアの脅威が大幅に軽減される。そのため、多くのソフトウェアリポジトリには、ウイルス対策ソフトウェアなどのマルウェア対策ソフトウェアが不要である[1]。
ほとんどの主要なLinuxディストリビューションには、メインリポジトリを反映した多くのリポジトリが世界中にある。
エンタープライズ環境では、ソフトウェアリポジトリは通常、アーティファクトを格納するため、またはセキュリティ制限のためにアクセスできない可能性のある外部リポジトリをミラーリングするために使用される。このようなリポジトリは、アクセス制御、バージョン管理、アップロードされたソフトウェアのセキュリティチェック、クラスタ機能などの追加機能を提供し、通常、企業のすべてのニーズに対応するために、1つのパッケージでさまざまな形式をサポートして、信頼できる唯一の情報源を提供する。ArtifactoryとNexusなどが人気がある。
クライアント側では、パッケージ管理システムがリポジトリからのインストールとリポジトリの更新を支援する。
サーバー側では、ソフトウェアリポジトリは通常、ソース管理またはリポジトリマネージャによって管理される。一部のリポジトリマネージャでは、他のリポジトリの場所を1つのURLに集約し、キャッシュプロキシを提供する。継続的ビルドを行う場合、多くのアーティファクトが生成され、多くの場合一元的に保存されるため、リリースされていないアーティファクトを自動的に削除することが重要である。
パッケージ管理システムとパッケージ開発プロセス
パッケージ管理システムは、パッケージ開発プロセスとは異なる。
パッケージ管理システムの一般的な使用法は、さまざまなソースからのコードをコヒーレントなスタンドアロンオペレーティングユニットに統合しやすくすることである。したがって、パッケージ管理システムを使用して、 Linuxディストリビューション、場合によっては特定の制限されたアプリケーションに合わせたディストリビューションを作成することができる。
対照的に、パッケージ開発プロセスは、共通のテーマを持つ関数またはルーチンのコレクションのコードとドキュメントの共同開発を管理するために使用され、それによって、通常は完全ではなく、それ自体では使用できないソフトウェア関数のパッケージを生成する。優れたパッケージ開発プロセスは、ユーザーが優れたドキュメントとコーディング手法に準拠し、ある程度の単体テストを統合するのに役立つ。
リポジトリの例
次の表に、提供されたソフトウェアのリポジトリを備えたいくつかの言語を示す。「自動チェック」列では、実行される定期的なチェックについて説明する。
コアコードのバージョンが異なり、使用する可能性のある他の提供パッケージを組み合わせて、複数のオペレーティングシステム(OS)でソフトウェアをテストできる人はほとんどいない。Rの場合、Comprehensive R Archive Network(CRAN)が定期的にテストを実行する。これがどのように価値があるかを確認するために、サリー(Sally)がパッケージAを提供すると仮定する。サリーは現在のバージョンのソフトウェアを1つのバージョンのMicrosoft Windowsでのみ実行し、その環境下でのみテストを行った。CRANは、ほぼ定期的に、OSとコアR言語ソフトウェアのバージョンの12通りの組み合わせにおいて、サリーの貢献(パッケージ)をテストする。それらのいずれかがエラーを生成した場合、彼女はそのエラーメッセージを受け取る。運が良ければ、手元のハードウェアやソフトウェアでエラーを再現できない場合でも、そのメッセージはエラーを修正するのに十分な情報となり得る。
次に、ジョン(John)が、パッケージAを使用するパッケージBをリポジトリに提供すると想定する。パッケージBはすべてのテストに合格し、ユーザーが利用可能な状態になる。その後、サリーがパッケージAの改良版を提出した際、残念ながらパッケージBが動作しなくなることがある。このとき、自動チェックによってジョンに情報が提供されるため、彼は問題を修正することが可能になる。
この例は、Rの寄稿パッケージシステムにおける長所と短所の両方を明らかにしている。CRANは寄稿パッケージに対するこの種の自動テストをサポートしているが、CRANに寄稿されたパッケージが、依存する他のパッケージのバージョンを厳密に指定することは必須ではない。特定のバージョンを要求する手順は存在するものの、寄稿者がそれらを利用しない場合があるためだ。
これに加え、提供パッケージの定期チェックを行うCRANのようなリポジトリは、実質的に、コア言語の開発バージョンに対する広範なアドホック・テストスイートを提供している。サリーが、特に行語の開発バージョンに起因する理解不能あるいは不適切と思われるエラーメッセージを受け取った場合、彼女はコア開発チームに助けを求めることができる(そして、Rでは実際に多く行われている)。このように、リポジトリはコア言語ソフトウェアの品質向上に貢献し得るのである。
| 言語/目的 | パッケージ開発プロセス | リポジトリ | インストール方法 | 共同開発プラットフォーム | 自動チェック |
|---|---|---|---|---|---|
| C/C++ | vcpkg | ||||
| Conan | |||||
| Common Lisp | Quicklisp [2] | ||||
| Fortran | Fortran Package Manager | ||||
| Haskell | アプリケーションとライブラリを構築するための共通アーキテクチャ[3] | Hackage | |||
| Java | Maven [4] | Maven, Apache Ivy, Gradle, sbt | |||
| JavaScriptやNode.js | npm [5] | ||||
| Julia[6] | |||||
| .NET | NuGet | NuGet [7] | |||
| OCaml | OPAM | ||||
| Perl | CPAN | PPM [8] | |||
| PHP | PEAR、Composer | PECL 、 Packagist | |||
| Python | Setuptools | PyPI | pip, EasyInstall, PyPM, uv | ||
| Conda | |||||
| R | RCMDチェックプロセス[9] [10] | CRAN[11] | install.packages [12] リモコン[13] |
GitHub [14] | 多くの場合、12のプラットフォーム、または異なるオペレーティングシステム(Linux、Windows、macOS、およびSolarisの異なるバージョン)上の異なるバージョンのR(devel、prerel、patched、release)の組み合わせ。 |
| Ruby | RubyGems | Rubyアプリケーションアーカイブ | RubyForge | ||
| Rust | Cargo[15] | Crates[16] | Cargo | ||
| TeX 、 LaTeX | CTAN |
(この表の一部は、 Stack Overflow [17]「プログラミング言語別の上位リポジトリのリスト」からコピーされた)
範囲が限定されている注目すべきリポジトリは次のとおりである。
パッケージ管理システム
パッケージ管理システムは、リポジトリとその配布の管理を支援する。リポジトリが更新された場合、パッケージ管理システムは通常、ユーザーがパッケージ管理システムを介してそのリポジトリを更新できるようにする。また、他のソフトウェアリポジトリ間の依存関係などの管理にも役立つ。パッケージ管理システムの例は次のとおりである。
| パッケージ管理システム | 説明 |
|---|---|
| npm | Node.jsのパッケージ管理システム[18] |
| pip | Python用のパッケージインストーラー[19] |
| APT | Debianパッケージを管理するため[20] |
| Homebrew | AppleがインストールしなかったパッケージをインストールできるMacOS用のパッケージインストーラー[21] |
| vcpkg | CおよびC ++のパッケージ管理システム[22][23] |