ソフトウェア リポジトリ(略してrepo)は、ソフトウェア パッケージの保存場所です。多くの場合、メタデータとともに目次も保存されます。ソフトウェア リポジトリは通常、ソースコントロールまたはバージョン コントロール(リポジトリ マネージャー) によって管理されます。パッケージ マネージャーを使用すると、リポジトリ (「パッケージ」と呼ばれることもあります) を自動的にインストールおよび更新できます。
概要
多くのソフトウェア発行者やその他の組織は、この目的のためにインターネット上にサーバーを無料またはサブスクリプション料金で維持しています。リポジトリは、Perlプログラミング言語のCPANなど特定のプログラム専用の場合もあれば、オペレーティングシステム全体の場合もあります。このようなリポジトリの運営者は通常、リポジトリからソフトウェアパッケージを検索、インストール、および操作するためのツールであるパッケージ管理システムを提供します。たとえば、多くのLinuxディストリビューションは、 Debianベースのディストリビューションで一般的に使用されているAdvanced Packaging Tool (APT)、またはRed Hatベースのディストリビューションで使用されているYellowdog Updater, Modified ( yum )を使用しています。また、 Arch Linuxで使用されるpacmanやSabayon Linuxで使用されるequoなど、複数の独立したパッケージ管理システムもあります。

ソフトウェアリポジトリは便利なパッケージを含むように設計されているので、主要なリポジトリはマルウェアフリーになるように設計されています。コンピュータが評判の良いベンダーのデジタル署名されたリポジトリを使用するように構成され、適切な権限システムと組み合わせられている場合、これらのシステムに対するマルウェアの脅威は大幅に軽減されます。副作用として、これらの機能を備えた多くのシステムでは、ウイルス対策ソフトウェアなどのマルウェア対策ソフトウェアは必要ありません。[1]
ほとんどの主要なLinux ディストリビューションには、メイン リポジトリをミラーリングするリポジトリが世界中に多数あります。
クライアント側では、パッケージ マネージャーがリポジトリからのインストールと更新を支援します。
パッケージ管理システムとパッケージ開発プロセス
パッケージ管理システムは、パッケージ開発プロセスとは異なります。
パッケージ管理システムの典型的な用途は、異なるソースからのコードを、一貫性のあるスタンドアロンのオペレーティング ユニットに統合できるようにすることです。したがって、パッケージ管理システムは、特定の制限されたアプリケーションに合わせて調整された Linux ディストリビューションを作成するために使用される可能性があります。
対照的に、パッケージ開発プロセスは、共通のテーマを持つ関数またはルーチンのコレクションのコードとドキュメントの共同開発を管理するために使用され、それによって、通常はそれ自体では完全で使用できないソフトウェア関数のパッケージが作成されます。優れたパッケージ開発プロセスは、ユーザーが適切なドキュメントとコーディングのプラクティスに準拠し、ある程度のユニット テストを統合するのに役立ちます。
選択されたリポジトリ
次の表には、寄贈されたソフトウェアのリポジトリを持つ言語がいくつかリストされています。「自動チェック」列には、実行される定期的なチェックが説明されています。
複数のオペレーティング システムで、コア コードの異なるバージョンや、使用する可能性のある他の提供パッケージを使用して、ソフトウェアをテストできる人はほとんどいません。Rプログラミング言語の場合、Comprehensive R Archive Network (CRAN) が定期的にテストを実行します。
これがいかに貴重であるかを理解するために、サリーとジョンという 2 人の開発者がいる状況を想像してください。サリーはパッケージ A を提供します。サリーは、ソフトウェアの現在のバージョンを 1 つのバージョンの Microsoft Windows でのみ実行し、その環境でのみテストしています。CRAN は、ほぼ定期的に、サリーの提供物をオペレーティング システムとコア R 言語ソフトウェアのバージョンの 12 の組み合わせでテストします。そのうちの 1 つでエラーが発生すると、そのエラー メッセージが表示されます。運が良ければ、そのエラー メッセージの詳細から、現在のハードウェアとソフトウェアでエラーを再現できない場合でも、エラーを修正できる十分な情報が得られる可能性があります。次に、ジョンがパッケージ A を使用するパッケージ B をリポジトリに提供するとします。パッケージ B はすべてのテストに合格し、ユーザーが使用できるようになります。その後、サリーは A の改良バージョンを提出しますが、残念ながら、パッケージ B が壊れてしまいます。自動チェックにより、ジョンに情報を提供して問題を修正できるようになります。
この例は、R の寄贈パッケージ システムの長所と短所の両方を明らかにしています。CRAN は、寄贈パッケージのこの種の自動テストをサポートしていますが、CRAN に寄贈されたパッケージは、使用する他の寄贈パッケージのバージョンを指定する必要はありません。パッケージの特定のバージョンを要求する手順は存在しますが、寄贈者はそれらの手順を使用しない可能性があります。
さらに、CRAN などのリポジトリは、寄贈されたパッケージを定期的にチェックすることで、コア言語の開発バージョン用の広範な if ad hocテスト スイートを実際に提供します。Sally (上記の例) が、特に言語の開発バージョンから、理解できない、または不適切と思われるエラー メッセージを受け取った場合、彼女はその言語のコア開発チームに支援を求めることができます (R ではよくそうします)。このようにして、リポジトリはコア言語ソフトウェアの品質向上に貢献できます。
(この表の一部は、 Stack Overflowの「プログラミング言語別トップリポジトリリスト」[20]からコピーしたものです)
C、C++、Fortranなど、他の多くのプログラミング言語には、普遍的なスコープを持つ中央ソフトウェア リポジトリがありません。スコープが限定されている注目すべきリポジトリには、次のものがあります。
- Netlib は、主に Fortran と C 用の数学ルーチンで、歴史的に最初のオープン ソフトウェア リポジトリの 1 つです。
- Boost は、C++ 用の厳選された高品質ライブラリのコレクションです。Boost で開発された一部のコードは、後に C++ 標準ライブラリの一部になりました。
パッケージマネージャー
パッケージ マネージャーは、リポジトリとその配布の管理に役立ちます。リポジトリが更新されると、パッケージ マネージャーは通常、ユーザーがパッケージ マネージャーを通じてそのリポジトリを更新できるようにします。また、他のソフトウェア リポジトリ間の依存関係などの管理にも役立ちます。パッケージ マネージャーの例には、次のものがあります。
リポジトリ管理者
企業環境では、ソフトウェア リポジトリは通常、成果物を保存したり、セキュリティ制限のためにアクセスできない可能性のある外部リポジトリをミラーリングするために使用されます。このようなリポジトリは、アクセス制御、バージョン管理、アップロードされたソフトウェアのセキュリティ チェック、クラスター機能などの追加機能を提供する場合があり、通常は 1 つのパッケージでさまざまな形式をサポートして、企業内のすべてのニーズに対応し、単一の真実を提供することを目指しています。一般的な例としては、JFrog Artifactory [29] [30]、 Sonatype Nexus Repository [31]、クラウドベースの製品である Cloudsmith [32]などがあります。
サーバー側では、ソフトウェア リポジトリは通常、ソース コントロールまたはリポジトリ マネージャーによって管理されます。リポジトリ マネージャーの中には、他のリポジトリの場所を 1 つの URL に集約し、キャッシュ プロキシを提供するものもあります。継続的なビルドを行うと、多くの成果物が生成され、集中的に保存されることが多いため、リリースされない成果物を自動的に削除することが重要です。
継続的インテグレーションとの関係
開発ライフサイクルの一環として、継続的インテグレーションを使用して、ソース コードは継続的にバイナリ成果物に組み込まれます。これにより、開発者がリポジトリから成果物を取得してそこにビルドをプッシュするのと同じように、バイナリ リポジトリ マネージャーとやり取りできます。CI サーバーとの緊密な統合により、次のような重要なメタデータを保存できます。
- どのユーザーがビルドをトリガーしたか(手動でか、リビジョン管理にコミットしてか)
- どのモジュールが構築されたか
- 使用されたソース (コミット ID、リビジョン、ブランチ)
- 使用される依存関係
- 環境変数
- インストールされたパッケージ
アーティファクトとパッケージ
アーティファクトとパッケージは本質的に異なる意味を持ちます。アーティファクトは単にファイルの出力またはコレクション(例:JAR、WAR、DLL、RPMなど)であり、それらのファイルの1つにメタデータ(例:POMファイル)が含まれている場合があります。一方、パッケージは、パッケージタイプ(例:DLL、PDB)に適したファイルを含む、明確に定義された形式(例:NuGet)の単一のアーカイブファイルです。[33]多くのアーティファクトはビルドから生成されますが、他のタイプも重要です。パッケージは基本的に、ライブラリまたはアプリケーションの2つのいずれかです。[34]
ソース ファイルと比較すると、バイナリ成果物は桁違いに大きいことが多く、削除または上書きされることはほとんどありません (スナップショットや夜間ビルドなどのまれなケースを除く)。また、通常は ID、パッケージ名、バージョン、ライセンスなどの多くのメタデータが付随します。
メタデータ
メタデータはバイナリ アーティファクトを記述し、アーティファクト自体とは別に保存および指定され、いくつかの追加の用途を持つことができます。次の表は、一般的なメタデータの種類とその用途を示しています。
参照
参考文献
- ^ itmWEB: コンピュータウイルスへの対処 2007年10月14日アーカイブ、Wayback Machine
- ^ 「Haskell Cabal | 概要」www.haskell.org。2019年4月10日時点のオリジナルよりアーカイブ。2019年3月25日閲覧。
- ^ 「Maven – Welcome to Apache Maven」maven.apache.org。2011年7月24日時点のオリジナルよりアーカイブ。2019年3月25日閲覧。
- ^ 「Julia パッケージ一覧」。pkg.julialang.org。2019年1 月 20 日時点のオリジナルよりアーカイブ。2019 年 3 月 25 日閲覧。
- ^ “Quicklisp beta”. www.quicklisp.org . 2019年3月23日時点のオリジナルよりアーカイブ。2019年3月25日閲覧。
- ^ karann-msft. 「NuGet パッケージ マネージャー UI リファレンス」。docs.microsoft.com。 2019 年 3 月 25 日時点のオリジナルからアーカイブ。2019 年 3 月 25 日に取得。
- ^ “npm”. www.npmjs.com . 2018年4月13日時点のオリジナルよりアーカイブ。2019年3月25日閲覧。
- ^ 「Perl モジュールのインストール - www.cpan.org」。www.cpan.org。2019年 3 月 14 日時点のオリジナルよりアーカイブ。2019 年 3 月 25 日閲覧。
- ^ “Poetry”. python-poetry.org . 2024年5月22日時点のオリジナルよりアーカイブ。2024年5月22日閲覧。
- ^ Leisch, Friedrich. 「R パッケージの作成: チュートリアル」(PDF)。2017 年 12 月 9 日のオリジナルからアーカイブ(PDF) 。2016 年 7 月 19 日に取得。
- ^ Graves, Spencer B.; Dorai-Raj, Sundar. 「CRAN、R-Forge、ローカル R アーカイブ ネットワークと Subversion (SVN) リポジトリを使用した R パッケージの作成」(PDF) 。2017年 7 月 5 日のオリジナルからアーカイブ(PDF) 。2016年 7 月 19 日に取得。
- ^ 「包括的なRアーカイブネットワーク」。cran.r -project.org。2019年1月23日時点のオリジナルよりアーカイブ。2019年3月25日閲覧。
- ^ 「R のインストールと管理」。cran.r-project.org。2015年 11 月 23 日時点のオリジナルよりアーカイブ。2019 年 3 月 25 日閲覧。
- ^ Wickham, Hadley; Bryan, Jenny. 「パッケージの構造と状態」。R パッケージ。O'Reilly。2020 年 11 月 9 日時点のオリジナルよりアーカイブ。2020年 11 月 20 日閲覧。
- ^ ab Decan, Alexandre; Mens, Tom; Claes, Maelick; Grosjean, Philippe (2015). 「R パッケージの開発と配布について: R エコシステムの実証的分析」。2015年ヨーロッパ ソフトウェア アーキテクチャ ワークショップ会議の議事録。pp. 1–6。doi : 10.1145 / 2797433.2797476。ISBN 9781450333931. S2CID 1680582. 2023年1月18日時点のオリジナルよりアーカイブ。2021年10月26日閲覧。
- ^ ab “RubyGems.org あなたのコミュニティ Gem ホスト”. rubygems . 2019-02-13 のオリジナルよりアーカイブ。2022-02-03に取得。
- ^ 「Bundler: Ruby アプリケーションの gem を管理する最良の方法」. bundler.io . 2022 年 1 月 29 日時点のオリジナルよりアーカイブ。2022 年 2 月 3 日閲覧。
- ^ ab "The Cargo Book". ドキュメンテーション. Rustプログラミング言語. 2019年4月28日時点のオリジナルよりアーカイブ。2019年8月26日閲覧。
- ^ 「Rust パッケージ レジストリ」。crates.io。2019年 8 月 28 日時点のオリジナルよりアーカイブ。2019 年 8 月 26 日閲覧。
- ^ 「プログラミング言語別のトップリポジトリのリスト」。Stack Overflow。2018年12月26日時点のオリジナルよりアーカイブ。2010年4月14日閲覧。
- ^ “npm About”. www.npmjs.com . 2019年11月19日時点のオリジナルよりアーカイブ。2019年11月21日閲覧。
- ^ 開発者、pip、pip: Python パッケージをインストールするための PyPA 推奨ツール。、2020 年 7 月 14 日にオリジナルからアーカイブ、2019 年 11 月 21 日に取得
- ^ “Apt - Debian Wiki”. wiki.debian.org . 2019年10月19日時点のオリジナルよりアーカイブ。2019年11月22日閲覧。
- ^ “Homebrew”. Homebrew . 2022年10月5日時点のオリジナルよりアーカイブ。2019年11月22日閲覧。
- ^ 「Yelp が Yelp Fusion をリリース、Microsoft が Vcpkg ツールと Android 開発者向けの新しい Touch Sense SDK を作成」。SD Times。2016年 9 月 20 日。2020 年 11 月 27 日時点のオリジナルよりアーカイブ。2020年11 月 19 日閲覧。
- ^ 「Microsoft の C++ ライブラリ マネージャーが Linux と macOS で利用可能に」。SD Times。2018年 4 月 25 日。2020 年 9 月 22 日時点のオリジナルよりアーカイブ。2020年11 月 19 日閲覧。
- ^ Chinthaguntla, Keerthi (2020年4月22日). 「YUMとRPMを使用したLinuxパッケージ管理」. Enable Sysadmin . 2021年4月11日時点のオリジナルよりアーカイブ。2021年4月11日閲覧。
- ^ “pacman - ArchWiki”. wiki.archlinux.org . 2017年8月18日時点のオリジナルよりアーカイブ。2021年4月11日閲覧。
- ^ “JFrog Artifactory - wikieduonline”. 2021年3月5日時点のオリジナルよりアーカイブ。2021年4月25日閲覧。
- ^ 「Artifactory - ユニバーサルアーティファクト管理」。2021年5月1日時点のオリジナルよりアーカイブ。2021年4月25日閲覧。
- ^ 「Nexus Repository | ソフトウェアコンポーネント管理」。2021年4月25日時点のオリジナルよりアーカイブ。2021年4月25日閲覧。
- ^ 「Cloudsmithアーティファクトリポジトリ」。2023年7月16日時点のオリジナルよりアーカイブ。2023年9月11日閲覧。
- ^ 「Linux リポジトリ分類スキーム」。 braintickle.blogspot.com。 2006 年 1 月 13 日。 2007 年 10 月 11 日時点のオリジナルよりアーカイブ。2008 年 3 月 1 日に取得。
