ソフトウェアリポジトリ

ソフトウェアリポジトリ (英: software repository)は、ソフトウェアパッケージの格納場所のことで、多くの場合、目次とメタデータが保存される。単にリポジトリと呼ばれる場合もある。ソフトウェアリポジトリは通常、ソース管理またはリポジトリマネージャによって管理される。パッケージマネージャを使用すると、リポジトリ（"パッケージ" と呼ばれる）を自動でインストール、更新できる。 多くのソフトウェア発行者などの組織は、無料またはサブスクリプション料金でインターネット上にコンテンツリポジトリ用のサーバーを持っている。リポジトリは、 Perlプログラミング言語のCPANなどの特定のプログラム専用、オペレーティングシステム全体専用のものがある。リポジトリの運営者は通常、リポジトリからソフトウェアパッケージを検索、インストール、その他の方法で操作することを目的としたパッケージ管理システムと呼ばれるツールを提供している。たとえば、多くのLinuxディストリビューションは、 たとえばDebianベースのディストリビューションで一般的に見られるAdvanced Packaging Tool （APT）、またはRedHatベースのディストリビューションで見られるyumといったパッケージ管理システムを使用している。また、Arch Linuxやequo、 Sabayon Linuxで使われるpacmanのような独立したパッケージ管理システムもある。 ソフトウェアリポジトリには便利なパッケージが含まれており、主要なリポジトリにはマルウェア防止機能が備わっている。信頼できるベンダーのデジタル署名されたリポジトリを使用するようにコンピュータが構成されており、適切なアクセス許可システムと組み合わされている場合、マルウェアの脅威が大幅に軽減される。そのため、多くのソフトウェアリポジトリには、ウイルス対策ソフトウェアなどのマルウェア対策ソフトウェアが不要である。 ほとんどの主要なLinuxディストリビューションには、メインリポジトリを反映した多くのリポジトリが世界中にある。 エンタープライズ環境では、ソフトウェアリポジトリは通常、アーティファクトを格納するため、またはセキュリティ制限のためにアクセスできない可能性のある外部リポジトリをミラーリングするために使用される。このようなリポジトリは、アクセス制御、バージョン管理、アップロードされたソフトウェアのセキュリティチェック、クラスタ機能などの追加機能を提供し、通常、企業のすべてのニーズに対応するために、1つのパッケージでさまざまな形式をサポートして、信頼できる唯一の情報源を提供する。ArtifactoryとNexusなどが人気がある。 クライアント側では、パッケージ管理システムがリポジトリからのインストールとリポジトリの更新を支援する。 サーバー側では、ソフトウェアリポジトリは通常、ソース管理またはリポジトリマネージャによって管理される。一部のリポジトリマネージャでは、他のリポジトリの場所を1つのURLに集約し、キャッシュプロキシを提供する。継続的ビルドを行う場合、多くのアーティファクトが生成され、多くの場合一元的に保存されるため、リリースされていないアーティファクトを自動的に削除することが重要である。 パッケージ管理システムは、パッケージ開発プロセスとは異なる。 パッケージ管理システムの一般的な使用法は、さまざまなソースからのコードをコヒーレントなスタンドアロンオペレーティングユニットに統合しやすくすることである。したがって、パッケージ管理システムを使用して、 Linuxディストリビューション、場合によっては特定の制限されたアプリケーションに合わせたディストリビューションを作成することができる。 対照的に、パッケージ開発プロセスは、共通のテーマを持つ関数またはルーチンのコレクションのコードとドキュメントの共同開発を管理するために使用され、それによって、通常は完全ではなく、それ自体では使用できないソフトウェア関数のパッケージを生成する。優れたパッケージ開発プロセスは、ユーザーが優れたドキュメントとコーディング手法に準拠し、ある程度の単体テストを統合するのに役立つ。 次の表に、提供されたソフトウェアのリポジトリを備えたいくつかの言語を示します。 「自動チェック」列では、実行される定期的なチェックについて説明します。 コアコードのバージョンが異なり、使用する可能性のある他の提供パッケージを使用して、複数のオペレーティングシステムでソフトウェアをテストできる人はほとんどいません。 Rの場合、 Comprehensive R Archive Network（CRAN）は定期的にテストを実行します。これがどのように価値があるかを確認するために、SallyがパッケージAを提供するとします。Sallyは現在のバージョンのソフトウェアを1つのバージョンのMicrosoft Windowsでのみ実行し、その環境でのみテストしました。 CRANは、ほぼ定期的に、オペレーティングシステムとコアR言語ソフトウェアのバージョンの12の組み合わせの下でSallyの貢献をテストします。それらの1つがエラーを生成した場合、彼女はそのエラーメッセージを受け取ります。運が良ければ、そのエラーメッセージは、彼女が持っているハードウェアとソフトウェアでエラーを複製できない場合でも、エラーを修正するのに十分かもしれません。次に、JohnがパッケージAを使用するパッケージBをリポジトリに提供するとします。パッケージBはすべてのテストに合格し、ユーザーが利用できるようになります。後で、サリーはAの改良版を提出しますが、残念ながらBは壊れます。自動チェックにより、ジョンに情報を提供して、問題を修正できるようになります。 この例では、R寄稿パッケージシステムの長所と短所の両方を明らかにしています。CRANは寄稿パッケージのこの種の自動テストをサポートしていますが、CRANに寄稿されたパッケージは、使用する他の寄稿パッケージのバージョンを指定する必要はありません。パッケージの特定のバージョンを要求するための手順は存在しますが、寄稿者はそれらの手順を使用しない場合があります。 これに加えて、提供されたパッケージの定期的なチェックを実行するCRANなどのリポジトリは、実際には、コア言語の開発バージョン用の広範なアドホックテストスイートを提供します。サリー（上記の例）が、特に言語の開発バージョンから、理解できない、または不適切だと思うエラーメッセージを受け取った場合、彼女はコア開発チームに言語の助けを求めることができます（そして多くの場合Rで行います） 。このように、リポジトリはコア言語ソフトウェアの品質向上に貢献できます。 （この表の一部は、 Stack Overflow 「プログラミング言語別の上位リポジトリのリスト」からコピーされました） C、C++、Fortranなど、他の多くのプログラミング言語には、ユニバーサルスコープの中央ソフトウェアリポジトリがありません。範囲が限定されている注目すべきリポジトリは次のとおりです。 Netlibは、主にFortranとCの数学ルーチンであり、歴史的に最初のオープンソフトウェアリポジトリの1つです。 Boost 、C ++用の高品質ライブラリの厳密にキュレーションされたコレクション。 Boostで開発された一部のコードは、後でC ++標準ライブラリの一部になりました。 パッケージ管理システムは、リポジトリとその配布の管理を支援します。リポジトリが更新された場合、パッケージ管理システムは通常、ユーザーがパッケージ管理システムを介してそのリポジトリを更新できるようにします。また、他のソフトウェアリポジトリ間の依存関係などの管理にも役立ちます。パッケージ管理システムの例は次のとおりです。 開発ライフサイクルの一部として、ソースコードは継続的インテグレーションを使用してバイナリアーティファクトに継続的に組み込まれている。これは、開発者がリポジトリからアーティファクトを取得してそこにビルドをプッシュするのと同じように、バイナリリポジトリマネージャと対話する可能性がある。 CIサーバーとの緊密な統合により、次のような重要なメタデータの保存が可能になる。 どのユーザーがビルドをトリガーしたか（手動またはリビジョン管理にコミットするかどうか） どのモジュールが構築されたか 使用されたソース（コミットID、リビジョン、ブランチ） 使用される依存関係 環境変数 インストールされているパッケージ アーティファクトとパッケージは本質的に異なる意味を持ちます。アーティファクトは、単にファイルの出力またはコレクションです（例： JAR、WAR、DLL、RPMなど）およびそれらのファイルの1つにメタデータが含まれている可能性があります（例： POMファイル）。パッケージは明確に定義された形式の単一のアーカイブファイルです（例：パッケージタイプに適したファイルを含むNuGet ）（例： DLL、PDB）。 多くのアーティファクトはビルドから生じますが、他のタイプも同様に重要です。パッケージは基本的に、ライブラリまたはアプリケーションの2つのうちの1つです。 ソースファイルと比較して、バイナリアーティファクトは桁違いに大きいことが多く、削除または上書きされることはめったになく（スナップショットやナイトリービルドなどのまれなケースを除く）、通常、ID、パッケージ名、バージョン 、ライセンスなどの多くのメタデータが付随しています。 メタデータはバイナリアーティファクトを記述し、アーティファクト自体とは別に保存および指定され、さらにいくつかの用途があります。次の表に、いくつかの一般的なメタデータタイプとその使用法を示します。 リポジトリを管理するためのソフトウェア（リポジトリマネージャ）には、次のものがある。 Apache Archiva – 「リポジトリ管理ソフトウェア[用]ビルドアーティファクトリポジトリ」 Inedo's ProGet – 「ユニバーサルパッケージマネージャー。ワールドクラスの機能。誰でもアクセスできます。」 JFrog's Artifactory Package Drone – 「OSGiのパッケージマネージャーリポジトリ」 Sonatype's Nexus – ：Ant、Ivy、Gradle、Maven、SBTなどのビルドツールで動作します。 Pulp – 「ソフトウェアパッケージのリポジトリを管理し、それを多数の消費者が利用できるようにするための無料のオープンソースプラットフォーム。サポートされているタイプ：RPM、Python、Puppet、Docker、OSTree。 " Artipie – オープンソースのバイナリアーティファクト管理ツール CloudRepo – 「完全に管理された、クラウドベースのプライベートおよびパブリックリポジトリ。」 Cloudsmith – 「パッケージ管理とソフトウェア配布の新しい標準。」 Dist  – 「クラウドでホストされている、信頼性が高く、安全で、プライベートで、高速なDockerコンテナレジストリとMavenリポジトリ。」 feedz.io – 「パッケージのホスティングと配布」 GitHubパッケージレジストリ Gitlab MyGet – 「数千のNuGet、Bower、NPMパッケージリポジトリをホストする継続的デリバリーサービス」 Packagecloud – 「すべてのアーティファクトのための統一された、開発者に優しいインターフェース。」 パッケージ管理システム RPM Package Manager Synaptic FreeBSD Ports Definitive Media Library dpkg Simtel APTonCD ^ itmWEB: Coping with Computer Viruses Archived October 14, 2007, at the Wayback Machine. ^ “The Haskell Cabal | Overview”. www.haskell.org. 2019年3月25日閲覧。 ^ “Maven – Welcome to Apache Maven”. maven.apache.org. 2019年3月25日閲覧。 ^ “Julia Package Listing”. pkg.julialang.org. 2019年3月25日閲覧。 ^ “Quicklisp beta”. www.quicklisp.org. 2019年3月25日閲覧。 ^ karann-msft. “NuGet Package Manager UI Reference” (英語). docs.microsoft.com. 2019年3月25日閲覧。 ^ “npm”. www.npmjs.com. 2019年3月25日閲覧。 ^ “Installing Perl Modules - www.cpan.org”. www.cpan.org. 2019年3月25日閲覧。 ^ Leisch, Friedrich. “Creating R Packages: A Tutorial”. https://cran.r-project.org/doc/contrib/Leisch-CreatingPackages.pdf  ^ Graves, Spencer B.; Dorai-Raj, Sundar. “Creating R Packages, Using CRAN, R-Forge, And Local R Archive Networks And Subversion (SVN) Repositories”. https://cran.r-project.org/doc/contrib/Graves+DoraiRaj-RPackageDevelopment.pdf  ^ “The Comprehensive R Archive Network”. cran.r-project.org. 2019年3月25日閲覧。 ^ “R Installation and Administration”. cran.r-project.org. 2019年3月25日閲覧。 ^ Wickham, Hadley; Bryan, Jenny. “Package structure and state”. R Packages. O'Reilly. https://r-pkgs.org/package-structure-state.html  ^ Decan, Alexandre; Mens, Tom; Claes, Maelick; Grosjean, Philippe (2015). “On the Development and Distribution of R Packages: An Empirical Analysis of the R Ecosystem”. Proceedings of the 2015 European Conference on Software Architecture Workshops - ECSAW '15: 1–6. doi:10.1145/2797433.2797476.  ^ “The Cargo Book”. Rust Programming Language. 2019年8月26日閲覧。 ^ “Rust Package Registry”. crates.io. 2019年8月26日閲覧。 ^ “List of Top Repositories by Programming Language”. Stack Overflow. 2010年4月14日閲覧。 ^ “npm About”. www.npmjs.com. 2019年11月21日閲覧。 ^ developers, The pip, pip: The PyPA recommended tool for installing Python packages., https://pip.pypa.io/ 2019年11月21日閲覧。  ^ “Apt - Debian Wiki”. wiki.debian.org. 2019年11月22日閲覧。 ^ “Homebrew” (英語). Homebrew. 2019年11月22日閲覧。 ^ “Yelp launches Yelp Fusion, Microsoft creates Vcpkg tool, and the new Touch Sense SDK for Android developers”. SD Times (September 20, 2016). 2020年12月21日閲覧。 ^ “Microsoft’s C++ library manager now available for Linux and macOS”. SD Times (April 25, 2018). 2020年12月21日閲覧。 ^ Chris, Tucker (2007-03-15). Optimal Package Install/Uninstall Manager. UC San Diego. p. 1. http://cseweb.ucsd.edu/~lerner/papers/opium.pdf 2011年9月14日閲覧。.  ^ “Linux repository classification schemes”. braintickle.blogspot.com. 2008年3月1日閲覧。 ^ “Apache Archiva: The Build Artifact Repository Manager”. The Apache Software Foundation. 2013年4月17日閲覧。 “Apache Archiva[...] is an extensible repository management software that helps taking care of your own personal or enterprise-wide build artifact repository.” ^ “ProGet”. Inedo. 2016年2月11日閲覧。 “Consistency, continuity, compliance – all in one centralized universal package manager with ProGet.” ^ “Jfrog Artifactory”. Wikieduonline. 2020年12月21日閲覧。 “JFrog Artifactory is a binary repository manager software designed to store the binary output of the build process for use in distribution and deployment” ^ “Artifactory. Manage Your Binaries.”. JFrog. 2014年10月20日閲覧。 “As the first Binary Repository Management solution, Artifactory has changed the way binaries are controlled, stored and managed throughout the software release cycle.” ^ “Package Drone”. 2015年1月23日閲覧。 “The idea is to have a workflow of Tycho Compile -> publish to repo -> Tycho Compile (using deployed artifacts). And some repository tools like cleanup, freezing, validation.” ^ “Nexus Repository Manager”. Sonatype. 2014年5月21日閲覧。 “Nexus Pro gives you more information, more control, and better collaboration across your team than ever before. And it works with build tools like Ant, Ivy, Gradle, Maven, SBT and others. Use Nexus as the foundation for your complete Component Lifecycle Management approach.” ^ “Pulp | software repository management”. pulpproject.org. 2017年7月11日閲覧。 ^ “Artipie: binary artifact management tool”. Artipie. 2020年12月30日閲覧。 “Artipie is an open source binary artifact management tool that supports different types of storages and many types of repositories.” ^ “CloudRepo”. CloudRepo. 2017年1月1日閲覧。 “CloudRepo is a cloud native artifact repository manager offering both public and private repositories. CloudRepo allows high performance software development teams to securely store and share artifacts for use in other builds and development processes.” ^ “Cloudsmith”. Cloudsmith. 2020年5月20日閲覧。 “Cloudsmith is the preferred software platform for securely storing and sharing packages and containers. We have distributed millions of packages for innovative companies around the world.” ^ “Dist”. Dist. 2020年3月4日閲覧。 “Develop and deploy with confidence. Your artifacts are a critical part of your development and deployment pipelines. Dist is designed to be highly available to match your production needs, and fast to keep your developers happy and productive.” ^ “Package Hosting and Distribution”. feedz.io. 2020年2月10日閲覧。 “Store and distribute your private NuGet and npm packages with no user limit and transparent pricing” ^ https://github.blog/2019-05-10-introducing-github-package-registry/ ^ “Packages & Registries | GitLab”. docs.gitlab.com. 2021年1月11日閲覧。 ^ “MyGet: Hosted NuGet, NPM, Bower and Vsix”. MyGet. 2013年3月13日閲覧。 “MyGet hosts thousands of NuGet, Bower and NPM repositories used by companies and individual developers worldwide. MyGet comes with built-in Build Services, and also provides friction-free integration with GitHub, BitBucket and Visual Studio Online.” ^ Canals (2018年6月25日). “Continuous package publishing, part I: introduction to package management in CI/CD”. circleci.com. 2020年12月21日閲覧。 “[packagecloud] hosts private and public package repositories for many different package types and works seamlessly with different package managers.”