ソフトウェアリポジトリ
(software repository から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/12/20 07:27 UTC 版)
ソフトウェアリポジトリ (英: 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]「プログラミング言語別の上位リポジトリのリスト」からコピーされた)
範囲が限定されている注目すべきリポジトリは次のとおりである。
- Netlibは、主にFortranとCの数学ルーチンであり、歴史的に最初のオープンソフトウェアリポジトリの1つである。
- Boost 、C ++用の高品質ライブラリの厳密にキュレーションされたコレクション。 Boostで開発された一部のコードは、後でC ++標準ライブラリの一部になった。
パッケージ管理システム
パッケージ管理システムは、リポジトリとその配布の管理を支援する。リポジトリが更新された場合、パッケージ管理システムは通常、ユーザーがパッケージ管理システムを介してそのリポジトリを更新できるようにする。また、他のソフトウェアリポジトリ間の依存関係などの管理にも役立つ。パッケージ管理システムの例は次のとおりである。
| パッケージ管理システム | 説明 |
|---|---|
| npm | Node.jsのパッケージ管理システム[18] |
| pip | Python用のパッケージインストーラー[19] |
| APT | Debianパッケージを管理するため[20] |
| Homebrew | AppleがインストールしなかったパッケージをインストールできるMacOS用のパッケージインストーラー[21] |
| vcpkg | CおよびC ++のパッケージ管理システム[22][23] |
リポジトリマネージャー
継続的インテグレーションとの関係
開発ライフサイクルの一部として、ソースコードは継続的インテグレーションを使用してバイナリアーティファクトに継続的に組み込まれている。これは、開発者がリポジトリからアーティファクトを取得してそこにビルドをプッシュするのと同じように、バイナリリポジトリマネージャと対話する可能性がある。 CIサーバーとの緊密な統合により、次のような重要なメタデータの保存が可能になる。
- どのユーザーがビルドをトリガーしたか(手動またはリビジョン管理にコミットするかどうか)
- どのモジュールが構築されたか
- 使用されたソース(コミットID、リビジョン、ブランチ)
- 使用される依存関係
- 環境変数
- インストールされているパッケージ
アーティファクトとパッケージ
アーティファクトとパッケージは本質的に異なる意味を持ちます。アーティファクトは、単にファイルの出力またはコレクションです(例: JAR、WAR、DLL、RPMなど)およびそれらのファイルの1つにメタデータが含まれている可能性があります(例: POMファイル)。パッケージは明確に定義された形式の単一のアーカイブファイルです(例:パッケージタイプに適したファイルを含むNuGet )(例: DLL、PDB)。 [24]多くのアーティファクトはビルドから生じますが、他のタイプも同様に重要です。パッケージは基本的に、ライブラリまたはアプリケーションの2つのうちの1つです。 [25]
ソースファイルと比較して、バイナリアーティファクトは桁違いに大きいことが多く、削除または上書きされることはめったになく(スナップショットやナイトリービルドなどのまれなケースを除く)、通常、ID、パッケージ名、バージョン 、ライセンスなどの多くのメタデータが付随しています。
メタデータ
メタデータはバイナリアーティファクトを記述し、アーティファクト自体とは別に保存および指定され、さらにいくつかの用途があります。次の表に、いくつかの一般的なメタデータタイプとその使用法を示します。
| メタデータタイプ | 用途 |
|---|---|
| 利用可能なバージョン | 自動的にアップグレードおよびダウングレード |
| 依存関係 | 現在のアーティファクトが依存する他のアーティファクトを指定します |
| ダウンストリームの依存関係 | 現在のアーティファクトに依存する他のアーティファクトを指定します |
| ライセンス | 法令順守 |
| ビルドの日時 | トレーサビリティ |
| ドキュメンテーション | IDEのコンテキストドキュメントにオフラインでの可用性を提供する |
| 承認情報 | トレーサビリティ |
| 指標 | コードカバレッジ、ルールへの準拠、テスト結果 |
| ユーザーが作成したメタデータ | カスタムレポートとプロセス |
リポジトリ管理を提供するオンプレミス製品
リポジトリを管理するためのソフトウェア(リポジトリマネージャ)には、次のものがある。
- Apache Archiva – 「リポジトリ管理ソフトウェア[用]ビルドアーティファクトリポジトリ」 [26]
- Inedo's ProGet – 「ユニバーサルパッケージマネージャー。ワールドクラスの機能。誰でもアクセスできます。」 [27]
- JFrog's Artifactory[28] [29]
- Package Drone – 「OSGiのパッケージマネージャーリポジトリ」 [30]
- Sonatype's Nexus – :Ant、Ivy、Gradle、Maven、SBTなどのビルドツールで動作します。 [31]
- Pulp – 「ソフトウェアパッケージのリポジトリを管理し、それを多数の消費者が利用できるようにするための無料のオープンソースプラットフォーム。サポートされているタイプ:RPM、Python、Puppet、Docker、OSTree。 " [32]
- Artipie – オープンソースのバイナリアーティファクト管理ツール[33]
ソフトウェアリポジトリを提供するサービスとしてのソフトウェア製品
- CloudRepo – 「完全に管理された、クラウドベースのプライベートおよびパブリックリポジトリ。」 [34]
- Cloudsmith – 「パッケージ管理とソフトウェア配布の新しい標準。」 [35]
- Dist – 「クラウドでホストされている、信頼性が高く、安全で、プライベートで、高速なDockerコンテナレジストリとMavenリポジトリ。」 [36]
- feedz.io – 「パッケージのホスティングと配布」 [37]
- GitHubパッケージレジストリ[38]
- Gitlab [39]
- MyGet – 「数千のNuGet、Bower、NPMパッケージリポジトリをホストする継続的デリバリーサービス」 [40]
- Packagecloud – 「すべてのアーティファクトのための統一された、開発者に優しいインターフェース。」 [41]
関連項目
- パッケージ管理システム
- 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.
- ^ “Quicklisp beta”. www.quicklisp.org. 2019年3月25日閲覧。
- ^ “The Haskell Cabal | Overview”. www.haskell.org. 2019年3月25日閲覧。
- ^ “Maven – Welcome to Apache Maven”. maven.apache.org. 2019年3月25日閲覧。
- ^ “npm”. www.npmjs.com. 2019年3月25日閲覧。
- ^ “Julia Package Listing”. pkg.julialang.org. 2019年3月25日閲覧。
- ^ karann-msft. “NuGet Package Manager UI Reference” (英語). docs.microsoft.com. 2019年3月25日閲覧。
- ^ “Installing Perl Modules - www.cpan.org”. www.cpan.org. 2019年3月25日閲覧。
- ^ Leisch, Friedrich. “Creating R Packages: A Tutorial”
- ^ Graves, Spencer B.; Dorai-Raj, Sundar. “Creating R Packages, Using CRAN, R-Forge, And Local R Archive Networks And Subversion (SVN) Repositories”
- ^ “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
- ^ 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. 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 (2016年9月20日). 2020年12月21日閲覧。
- ^ “Microsoft’s C++ library manager now available for Linux and macOS”. SD Times (2018年4月25日). 2020年12月21日閲覧。
- ^ “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.”
リポジトリ
(software repository から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2026/03/05 02:06 UTC 版)
リポジトリ(英: repository[1])またはレポジトリは、バージョン管理システムにおいて、ソースコードやディレクトリ構造のメタデータを格納するデータ構造のこと。リポジトリを記録することで、プロジェクトの全履歴を保存し、安全な変更・復元とチームでの円滑な共同作業を実現する。
概要
「リポジトリ」の原義は「貯蔵庫」、「保管場所」である(wikt:repository)。バージョン管理システムではソースコード等の管理対象を溜めておく場所をリポジトリと呼ぶ。すべてのユーザーのシステムに重複したリポジトリを持つ分散型 (GitやMercurial) と、単一のサーバーでリポジトリが管理される集中型 (Subversion、CVSなど) が存在する[2]。あらゆる第三者に開かれているリポジトリをパブリックリポジトリ(英: public repository)といい、権利者のみが利用できるものをプライベートリポジトリ(英: private repository)という。
リポジトリには以下のメタデータが含まれる。
- コミットオブジェクト - コミットをするたびに、新しいコミットオブジェクトが生成される。これらが積み重なることで、プロジェクトの全歴史が構成される。
- ヘッド - 現在作業中のコミットオブジェクトがどのブランチにいるかという参照情報と、各ブランチの最新コミットはどれかという識別子が保存される。
- 変更履歴 - リポジトリ内の変更履歴がログファイルで保存される。コミットオブジェクトの変更履歴だけではなく、どのブランチを切り替えたかといった行動ログも保存の対象となる。
用途
リポジトリの主な目的は、一連のファイルと、それらのファイルに加えられた変更の履歴を保存することである[3]。 バージョン管理システムが変更の保存を処理する方法は、各々のシステムに依存しており正確には異なる。たとえば、Subversionは昔は変更履歴をデータベースインスタンスに保存していたが、ファイルシステムに直接保存するようになった[4]。 これらの方法論の違いは、さまざまなグループによるニーズの違いに応じた多様な使い方に繋がった[5]。
利用
特にパブリックリポジトリはテキストマイニング等の解析の対象として利用される。主にソースコード作成支援やバグへの対処などに用いられる。
第三者からアクセス可能なリポジトリへ対象を配置することで、リポジトリを配布のための拠点として利用できる。例えばパブリックGitレポジトリは誰でもcloneすることで入手できる。
脚注
- ^ “SVNBook”. 2012年4月20日閲覧。
- ^ “Version control concepts and best practices” (2018年3月3日). 2020年4月27日時点のオリジナルよりアーカイブ。2020年7月10日閲覧。
- ^ “Getting Started - About Version Control”. Git SCM. 2020年12月21日閲覧。
- ^ Ben Collins-Sussman; Brian W. Fitzpatrick; C. Michael Pilato (2011). “Chapter 5: Strategies for Repository Deployment”. Version Control with Subversion: For Subversion 1.7. O'Reilly
- ^ “Different approaches to source control branching”. Stack Overflow. 2014年11月15日閲覧。
関連項目
- software repositoryのページへのリンク