ソフトウェアリポジトリ

コンテンツへジャンプ
フリー百科事典『ウィキペディア』より

ソフトウェアリポジトリ(略してレポ)は、ソフトウェアパッケージの保存場所です。多くの場合、メタデータに加えて目次も保存されます。ソフトウェアリポジトリは通常、ソース管理またはバージョン管理、あるいはリポジトリマネージャによって管理されます。パッケージマネージャを使用すると、リポジトリ(「パッケージ」と呼ばれることもあります)を自動的にインストールおよび更新できます。

概要

[編集]

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

署名されたリポジトリキーの例(openSUSE上のZYppを使用)

ソフトウェアリポジトリは有用なパッケージを収録するように設計されているため、主要なリポジトリはマルウェアフリーとなるように設計されています。信頼できるベンダーのデジタル署名付きリポジトリを使用するようにコンピュータを設定し、適切な権限システムと連携させることで、これらのシステムに対するマルウェアの脅威は大幅に軽減されます。副次的な効果として、こうした機能を備えた多くのシステムでは、ウイルス対策ソフトウェアなどのマルウェア対策ソフトウェアは必要ありません[ 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のようなリポジトリは、寄贈パッケージを定期的にチェックすることで、コア言語の開発版向けに広範なアドホックテストスイートを提供しています。例えば、上記の例のSallyが、特に開発版の言語から、理解できない、あるいは不適切と思われるエラーメッセージを受け取った場合、彼女は(Rではよくそうしています)、その言語のコア開発チームに支援を求めることができます。このように、リポジトリはコア言語ソフトウェアの品質向上に貢献することができます。

言語、目的パッケージ開発プロセスリポジトリインストール方法共同開発プラットフォーム自動チェック
C / C++vcpkg
コナン
コモンリスプクイックリスプ[ 2 ]
Dダブdlang.orgdub add <パッケージ>
ダーツフラッターpub.devflutter pub get <パッケージ>
フォートランFortran パッケージ マネージャー (fpm)
行く行くpkg.go.devgo get <パッケージ>GitHub [ 3 ]
ハスケルアプリケーションとライブラリを構築するための共通アーキテクチャ[ 4 ]ハッキングcabal(ソフトウェア)
JavaKotlinScalaGroovyClojureなど。メイヴン[ 5 ]Maven、Apache IvyGradlesbt
JavaScriptTypeScriptNode.jsノードnpmレジストリ[ 6 ]npm install <パッケージ>
yarn add <パッケージ>
バウアーbower install <パッケージ>
ジュリア[ 7 ]
。ネットヌゲットNuGet [ 8 ]dotnet add package <パッケージ>
オカムルオパム
パールCPANPPM [ 9 ]アクティブステート
PHPPEAR作曲家PECLパッケージ担当者composer require <パッケージ>

pear install <パッケージ>

パワーシェルPowerShell ギャラリーPSリソース取得
パイソンセットアップツール、詩[ 10 ]パイパイpipEasyInstall、PyPM、Poetry、uv
コンダ
RR CMDチェックプロセス[ 11 ] [ 12 ]クラン[ 13 ]インストールパッケージ[ 14 ]
リモート[ 15 ]
GitHub [ 3 ]多くの場合、12 のプラットフォーム、または異なるオペレーティング システム (Linux、Windows、macOS、および Solaris の異なるバージョン) 上の異なるバージョンの R (devel、prerel、patched、release) の組み合わせです。
ルビールビージェムズルビージェムズ[ 16 ]RubyGems、[ 16 ] Bundler [ 17 ]
さび貨物[ 18 ]クレートス.io [ 19 ]貨物[ 18 ]
迅速Swift パッケージマネージャー
TeXLaTeXCTAN

(この表の一部はStack Overflowの「プログラミング言語別トップリポジトリリスト」[ 20 ]からコピーしたものです)

範囲が限定されている注目すべきリポジトリには次のものがあります。

  • Netlib は主に Fortran と C の数学ルーチンで、歴史的に最初のオープン ソフトウェア リポジトリの 1 つです。
  • Boost は、C++ 用の厳選された高品質ライブラリのコレクションです。Boost で開発された一部のコードは、後に C++ 標準ライブラリの一部になりました。

パッケージマネージャー

[編集]

パッケージマネージャーは、リポジトリの管理と配布に役立ちます。リポジトリが更新された場合、パッケージマネージャーは通常、ユーザーがパッケージマネージャーを通じてそのリポジトリを更新できるようにします。また、他のソフトウェアリポジトリ間の依存関係の管理にも役立ちます。パッケージマネージャーの例としては、以下のようなものがあります。

人気のパッケージマネージャー
パッケージマネージャー説明
npmNode.js用のパッケージマネージャー[ 21 ]
ピップPython用パッケージインストーラー[ 22 ]
適切Debianパッケージの管理用[ 23 ]
自家製Appleが提供していないパッケージをインストールできるMacOS用のパッケージインストーラー[ 24 ]
vcpkgCおよびC++用のパッケージマネージャー[ 25 ] [ 26 ]
おいしいDNFFedoraおよびRed Hat Enterprise Linux用のパッケージマネージャー[ 27 ]
パックマンArch Linux用パッケージマネージャー[ 28 ]

リポジトリ管理者

[編集]

企業環境において、ソフトウェアリポジトリは通常、成果物の保存や、セキュリティ上の制限によりアクセスできない可能性のある外部リポジトリのミラーリングに使用されます。このようなリポジトリは、アクセス制御、バージョン管理、アップロードされたソフトウェアのセキュリティチェック、クラスタ機能などの追加機能を提供する場合があり、通常、企業内のあらゆるニーズに対応し、単一の真実の拠点を提供するために、1つのパッケージでさまざまな形式をサポートします。一例として、Sonatype Nexusリポジトリが挙げられます。[ 29 ]

サーバー側では、ソフトウェアリポジトリは通常、ソース管理またはリポジトリマネージャによって管理されます。一部のリポジトリマネージャは、複数のリポジトリの場所を1つのURLに集約し、キャッシュプロキシを提供することができます。継続的なビルドでは多くの成果物が生成され、多くの場合一元的に保存されるため、リリースされない成果物を自動的に削除することが重要です。

継続的インテグレーションとの関係

[編集]

開発ライフサイクルの一環として、継続的インテグレーション(CI)によってソースコードがバイナリアーティファクトに継続的にビルドされます。これは、開発者がリポジトリからアーティファクトを取得してビルドをプッシュするのと同様に、バイナリリポジトリマネージャと連携して行われます。CIサーバーとの緊密な統合により、次のような重要なメタデータを保存できます。

  • どのユーザーがビルドをトリガーしたか(手動で実行したか、リビジョン管理にコミットしたか)
  • どのモジュールが構築されたか
  • 使用されたソース(コミットID、リビジョン、ブランチ)
  • 使用される依存関係
  • 環境変数
  • インストールされたパッケージ

アーティファクトとパッケージ

[編集]

アーティファクトとパッケージは本質的に異なる意味を持ちます。アーティファクトとは、単にファイルの出力または集合(例:JAR、WAR、DLL、RPMなど)であり、これらのファイルの1つにはメタデータ(例:POMファイル)が含まれる場合があります。一方、パッケージは、明確に定義された形式(例:NuGet)で作成された単一のアーカイブファイルであり、パッケージの種類(例:DLL、PDB)に応じたファイルが含まれています。[ 30 ]多くのアーティファクトはビルドによって生成されますが、他の種類のアーティファクトも重要です。パッケージは本質的にライブラリまたはアプリケーションのどちらかです。[ 31 ]

ソース ファイルと比較すると、バイナリ アーティファクトは桁違いに大きいことが多く、削除または上書きされることはほとんどありません (スナップショットや夜間ビルドなどのまれなケースを除く)。また、通常は ID、パッケージ名、バージョン、ライセンスなどの多くのメタデータが付随します。

メタデータ

[編集]

メタデータはバイナリアーティファクトを記述するものであり、アーティファクト自体とは別に保存および指定され、いくつかの追加の用途を持つことができます。次の表は、一般的なメタデータの種類とその用途を示しています。

メタデータタイプ用途
利用可能なバージョン自動アップグレードとダウングレード
依存関係現在のアーティファクトが依存する他のアーティファクトを指定します
下流の依存関係現在のアーティファクトに依存する他のアーティファクトを指定します
ライセンス法令遵守
ビルド日時トレーサビリティ
ドキュメントIDE でコンテキスト ドキュメントをオフラインで利用できるようにする
承認情報トレーサビリティ
メトリクスコードカバレッジ、ルール遵守、テスト結果
ユーザーが作成したメタデータカスタムレポートとプロセス

参照

[編集]

参考文献

[編集]
  1. ^ itmWEB: コンピュータウイルスへの対処法 アーカイブ2007年10月14日、 Wayback Machine
  2. ^ “Quicklisp beta” . www.quicklisp.org . 2019年3月23日時点のオリジナルよりアーカイブ。 2019年3月25日閲覧
  3. ^ a b Decan, Alexandre; Mens, Tom; Claes, Maelick; Grosjean, Philippe (2015). 「Rパッケージの開発と配布について:Rエコシステムの実証的分析」 . 2015 European Conference on Software Architecture Workshops 議事録. pp.  1– 6. doi : 10.1145/2797433.2797476 . ISBN 9781450333931. S2CID  1680582 . 2023年1月18日時点のオリジナルよりアーカイブ2021年10月26日閲覧。
  4. ^ “The Haskell Cabal | Overview” . www.haskell.org . 2019年4月10日時点のオリジナルよりアーカイブ。 2019年3月25日閲覧
  5. ^ 「Maven – Welcome to Apache Maven」 . maven.apache.org . 2011年7月24日時点のオリジナルよりアーカイブ2019年3月25日閲覧。
  6. ^ "npm" . www.npmjs.com . 2018年4月13日時点のオリジナルよりアーカイブ2019年3月25日閲覧。
  7. ^ “Julia パッケージリスト” . pkg.julialang.org . 2019年1月20日時点のオリジナルよりアーカイブ2019年3月25日閲覧。
  8. ^ karann-msft. 「NuGet パッケージ マネージャー UI リファレンス」 . docs.microsoft.com . 2019年3月25日時点のオリジナルよりアーカイブ。 2019年3月25日閲覧
  9. ^ 「Perlモジュールのインストール - www.cpan.org」。www.cpan.org。 2019年3月14時点のオリジナルよりアーカイブ2019年3月25日閲覧。
  10. ^ “Poetry” . python-poetry.org . 2024年5月22日時点のオリジナルよりアーカイブ。 2024年5月22日閲覧
  11. ^ Leisch, Friedrich. 「Rパッケージの作成:チュートリアル」(PDF) . 2017年12月9日時点のオリジナルよりアーカイブ(PDF) . 2016年7月19日閲覧
  12. ^ Graves, Spencer B.; Dorai-Raj, Sundar. 「CRAN、R-Forge、ローカルRアーカイブネットワーク、Subversion(SVN)リポジトリを使用したRパッケージの作成」(PDF)2017年7月5日時点のオリジナルからアーカイブ(PDF) 。 2016年7月19日閲覧
  13. ^ 「包括的なRアーカイブネットワーク」 . cran.r-project.org . 2019年1月23日時点のオリジナルよりアーカイブ2019年3月25日閲覧。
  14. ^ 「Rのインストールと管理」 . cran.r-project.org . 2015年11月23日時点のオリジナルよりアーカイブ2019年3月25日閲覧。
  15. ^ Wickham, Hadley; Bryan, Jenny. 「パッケージの構造と状態」 . R Packages . O'Reilly. 2020年11月9日時点のオリジナルよりアーカイブ。 2020年11月20日閲覧
  16. ^ a b 「RubyGems.org コミュニティのGemホスト」 . ruby​​gems . 2019年2月13日時点のオリジナルよりアーカイブ2022年2月3日閲覧。
  17. ^ 「Bundler: Rubyアプリケーションのgemを管理する最良の方法」 . bundler.io . 2022年1月29日時点のオリジナルよりアーカイブ。 2022年2月3日閲覧
  18. ^ a b 「The Cargo Book」 . ドキュメンテーション. Rustプログラミング言語. 2019年4月28日時点のオリジナルよりアーカイブ。 2019年8月26日閲覧
  19. ^ “Rust Package Registry” . crates.io . 2019年8月28日時点のオリジナルよりアーカイブ。 2019年8月26日閲覧
  20. ^ 「プログラミング言語別トップリポジトリ一覧」 . Stack Overflow . 2018年12月26日時点のオリジナルよりアーカイブ。 2010年4月14日閲覧
  21. ^ "npm About" . www.npmjs.com . 2019年11月19日時点のオリジナルよりアーカイブ2019年11月21日閲覧。
  22. ^ 開発者、「pip」、「pip: Python パッケージをインストールするための PyPA 推奨ツール」2020 年 7 月 14 日にオリジナルからアーカイブ、 2019 年 11 月 21 日に取得
  23. ^ “Apt - Debian Wiki” . wiki.debian.org . 2019年10月19日時点のオリジナルよりアーカイブ2019年11月22日閲覧。
  24. ^ “Homebrew” . Homebrew . 2022年10月5日時点のオリジナルよりアーカイブ。 2019年11月22日閲覧
  25. ^ 「YelpがYelp Fusionをリリース、MicrosoftがVcpkgツールとAndroid開発者向けの新しいTouch Sense SDKを作成」 SD Times . 2016年9月20日. 2020年11月27日時点のオリジナルよりアーカイブ。 2020年11月19日閲覧
  26. ^ 「MicrosoftのC++ライブラリマネージャーがLinuxとmacOSで利用可能に」SD Times . 2018年4月25日. 2020年9月22日時点のオリジナルよりアーカイブ2020年11月19日閲覧。
  27. ^ Chinthaguntla, Keerthi (2020年4月22日). 「YUMとRPMによるLinuxパッケージ管理」 . Enable Sysadmin . 2021年4月11日時点のオリジナルよりアーカイブ2021年4月11日閲覧。
  28. ^ "pacman - ArchWiki" . wiki.archlinux.org . 2017年8月18日時点のオリジナルよりアーカイブ2021年4月11日閲覧。
  29. ^ “Nexus Repository | ソフトウェアコンポーネント管理” . 2021年4月25日時点のオリジナルよりアーカイブ2021年4月25日閲覧。
  30. ^ Chris, Tucker (2007-03-15). 「Optimal Package Install/Uninstall Manager」(PDF) . UC San Diego: 1. 2011年6月14日時点のオリジナルよりアーカイブ(PDF) . 2011年9月14日閲覧. {{cite journal}}:ジャーナルを引用するには|journal=ヘルプ)が必要です
  31. ^ 「Linux リポジトリ分類スキーム」 braintickle.blogspot.com. 2006年1月13日. 2007年10月11日時点のオリジナルよりアーカイブ2008年3月1日閲覧。

    ソフトウェアリポジトリ(略してレポ)は、ソフトウェアパッケージの保存場所です。多くの場合、メタデータに加えて目次も保存されます。ソフトウェアリポジトリは通常、ソース管理またはバージョン管理、あるいはリポジトリマネージャによって管理されます。パッケージマネージャを使用すると、リポジトリ(「パッケージ」と呼ばれることもあります)を自動的にインストールおよび更新できます。

    概要

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

    署名されたリポジトリキーの例(openSUSE上のZYppを使用)

    ソフトウェアリポジトリは有用なパッケージを含むように設計されているため、主要なリポジトリはマルウェアフリーになるように設計されています。信頼できるベンダーのデジタル署名付きリポジトリを使用するようにコンピュータを設定し、適切な権限システムと組み合わせることで、これらのシステムに対するマルウェアの脅威は大幅に軽減されます。副次的な効果として、これらの機能を備えた多くのシステムでは、ウイルス対策ソフトウェアなどのマルウェア対策ソフトウェアは必要ありません[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のようなリポジトリは、寄贈パッケージを定期的にチェックすることで、コア言語の開発版向けに広範なアドホックテストスイートを提供しています。例えば、上記の例のSallyが、特に開発版の言語から、理解できない、あるいは不適切と思われるエラーメッセージを受け取った場合、彼女は(Rではよくそうしています)、その言語のコア開発チームに支援を求めることができます。このように、リポジトリはコア言語ソフトウェアの品質向上に貢献することができます。

    言語、目的パッケージ開発プロセスリポジトリインストール方法共同開発プラットフォーム自動チェック
    C / C++vcpkg
    コナン
    コモンリスプクイックリスプ[2]
    Dダブdlang.orgdub add <パッケージ>
    ダーツフラッターpub.devflutter pub get <パッケージ>
    フォートランFortran パッケージ マネージャー (fpm)
    行く行くpkg.go.devgo get <パッケージ>GitHub [3]
    ハスケルアプリケーションとライブラリを構築するための共通アーキテクチャ[4]ハッキングcabal(ソフトウェア)
    JavaKotlinScalaGroovyClojureなど。メイヴン[5]Maven、Apache IvyGradlesbt
    JavaScriptTypeScriptNode.jsノードnpmレジストリ[6]npm install <パッケージ>
    yarn add <パッケージ>
    バウアーbower install <パッケージ>
    ジュリア[7]
    。ネットヌゲットNuGet [8]dotnet add package <パッケージ>
    オカムルオパム
    パールCPANPPM [9]アクティブステート
    PHPPEAR作曲家PECLパッケージ担当者composer require <パッケージ>

    pear install <パッケージ>

    パワーシェルPowerShell ギャラリーPSリソース取得
    パイソンセットアップツール、詩[10]パイパイpip、EasyInstall、PyPM、Poetry、uv
    コンダ
    RR CMDチェックプロセス[11] [12]クラン[13]install.packages [14]
    リモート[15]
    GitHub [3]多くの場合、12 のプラットフォーム、または異なるオペレーティング システム (Linux、Windows、macOS、および Solaris の異なるバージョン) 上の異なるバージョンの R (devel、prerel、patched、release) の組み合わせです。
    ルビールビージェムズルビージェムズ[16]RubyGems、[16]、バンドラー[17]
    さび貨物[18]クレートス.io [19]貨物[18]
    迅速Swift パッケージマネージャー
    TeXLaTeXCTAN

    (この表の一部はStack Overflowの「プログラミング言語別トップリポジトリリスト」[20]からコピーしたものです)

    範囲が限定されている注目すべきリポジトリには次のものがあります。

    • Netlib は主に Fortran と C の数学ルーチンで、歴史的に最初のオープン ソフトウェア リポジトリの 1 つです。
    • Boost は、C++ 用の厳選された高品質ライブラリのコレクションです。Boost で開発された一部のコードは、後に C++ 標準ライブラリの一部になりました。

    パッケージマネージャー

    パッケージマネージャーは、リポジトリの管理と配布に役立ちます。リポジトリが更新された場合、パッケージマネージャーは通常、ユーザーがパッケージマネージャーを通じてそのリポジトリを更新できるようにします。また、他のソフトウェアリポジトリ間の依存関係の管理にも役立ちます。パッケージマネージャーの例としては、以下のようなものがあります。

    人気のパッケージマネージャー
    パッケージマネージャー説明
    npmNode.js用のパッケージマネージャー[21]
    ピップPython用パッケージインストーラー[22]
    適切Debianパッケージの管理用[23]
    自家製Appleが提供していないパッケージをインストールできるMacOS用のパッケージインストーラー[24]
    vcpkgCおよびC++用のパッケージマネージャー[25] [26]
    おいしいDNFFedoraおよびRed Hat Enterprise Linux用のパッケージマネージャー[27]
    パックマンArch Linux用パッケージマネージャー[28]

    リポジトリ管理者

    企業環境において、ソフトウェアリポジトリは通常、成果物の保存や、セキュリティ上の制限によりアクセスできない可能性のある外部リポジトリのミラーリングに使用されます。このようなリポジトリは、アクセス制御、バージョン管理、アップロードされたソフトウェアのセキュリティチェック、クラスタ機能などの追加機能を提供する場合があり、通常、企業内のあらゆるニーズに対応し、単一の真実の拠点を提供するために、1つのパッケージでさまざまな形式をサポートします。一例として、Sonatype Nexusリポジトリが挙げられます。[29]

    サーバー側では、ソフトウェアリポジトリは通常、ソース管理またはリポジトリマネージャによって管理されます。一部のリポジトリマネージャは、複数のリポジトリの場所を1つのURLに集約し、キャッシュプロキシを提供することができます。継続的なビルドでは多くの成果物が生成され、多くの場合一元的に保存されるため、リリースされない成果物を自動的に削除することが重要です。

    継続的インテグレーションとの関係

    開発ライフサイクルの一環として、継続的インテグレーション(CI)によってソースコードがバイナリアーティファクトに継続的にビルドされます。これは、開発者がリポジトリからアーティファクトを取得してビルドをプッシュするのと同様に、バイナリリポジトリマネージャと連携して行われます。CIサーバーとの緊密な統合により、次のような重要なメタデータを保存できます。

    • どのユーザーがビルドをトリガーしたか(手動で実行したか、リビジョン管理にコミットしたか)
    • どのモジュールが構築されたか
    • 使用されたソース(コミットID、リビジョン、ブランチ)
    • 使用される依存関係
    • 環境変数
    • インストールされたパッケージ

    アーティファクトとパッケージ

    アーティファクトとパッケージは本質的に異なる意味を持ちます。アーティファクトとは、単にファイルの出力または集合(例:JAR、WAR、DLL、RPMなど)であり、これらのファイルの1つにはメタデータ(例:POMファイル)が含まれる場合があります。一方、パッケージは、明確に定義された形式(例:NuGet)で作成された単一のアーカイブファイルであり、パッケージの種類(例:DLL、PDB)に応じたファイルが含まれています。[30]多くのアーティファクトはビルドによって生成されますが、他の種類のアーティファクトも重要です。パッケージは本質的にライブラリまたはアプリケーションのどちらかです。[31]

    ソース ファイルと比較すると、バイナリ アーティファクトは桁違いに大きいことが多く、削除または上書きされることはほとんどありません (スナップショットや夜間ビルドなどのまれなケースを除く)。また、通常は ID、パッケージ名、バージョン、ライセンスなどの多くのメタデータが付随します。

    メタデータ

    メタデータはバイナリアーティファクトを記述するものであり、アーティファクト自体とは別に保存および指定され、いくつかの追加の用途を持つことができます。次の表は、一般的なメタデータの種類とその用途を示しています。

    メタデータタイプ用途
    利用可能なバージョン自動アップグレードとダウングレード
    依存関係現在のアーティファクトが依存する他のアーティファクトを指定します
    下流の依存関係現在のアーティファクトに依存する他のアーティファクトを指定します
    ライセンス法令遵守
    ビルド日時トレーサビリティ
    ドキュメントIDE でコンテキスト ドキュメントをオフラインで利用できるようにする
    承認情報トレーサビリティ
    メトリクスコードカバレッジ、ルール遵守、テスト結果
    ユーザーが作成したメタデータカスタムレポートとプロセス

    参照

    参考文献

    1. ^ itmWEB: コンピュータウイルスへの対処法 アーカイブ済み 2007年10月14日、Wayback Machine
    2. ^ “Quicklisp beta”. www.quicklisp.org . 2019年3月23日時点のオリジナルよりアーカイブ。 2019年3月25日閲覧
    3. ^ 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日閲覧。
    4. ^ “The Haskell Cabal | Overview”. www.haskell.org . 2019年4月10日時点のオリジナルよりアーカイブ。 2019年3月25日閲覧
    5. ^ 「Maven – Welcome to Apache Maven」. maven.apache.org . 2011年7月24日時点のオリジナルよりアーカイブ2019年3月25日閲覧。
    6. ^ "npm". www.npmjs.com . 2018年4月13日時点のオリジナルよりアーカイブ2019年3月25日閲覧。
    7. ^ “Julia パッケージリスト”. pkg.julialang.org . 2019年1月20日時点のオリジナルよりアーカイブ2019年3月25日閲覧。
    8. ^ karann-msft. 「NuGet パッケージ マネージャー UI リファレンス」. docs.microsoft.com . 2019年3月25日時点のオリジナルよりアーカイブ。 2019年3月25日閲覧
    9. ^ “Perlモジュールのインストール - www.cpan.org”. www.cpan.org . 2019年3月14日時点のオリジナルよりアーカイブ。 2019年3月25日閲覧
    10. ^ “Poetry”. python-poetry.org . 2024年5月22日時点のオリジナルよりアーカイブ。 2024年5月22日閲覧
    11. ^ Leisch, Friedrich. 「Rパッケージの作成:チュートリアル」(PDF) . 2017年12月9日時点のオリジナルよりアーカイブ(PDF) . 2016年7月19日閲覧
    12. ^ Graves, Spencer B.; Dorai-Raj, Sundar. 「CRAN、R-Forge、ローカルRアーカイブネットワーク、Subversion(SVN)リポジトリを使用したRパッケージの作成」(PDF) 。 2017年7月5日時点のオリジナルからアーカイブ(PDF) 。 2016年7月19日閲覧
    13. ^ “The Comprehensive R Archive Network”. cran.r-project.org . 2019年1月23日時点のオリジナルよりアーカイブ。 2019年3月25日閲覧
    14. ^ 「Rのインストールと管理」cran.r-project.org . 2015年11月23日時点のオリジナルよりアーカイブ2019年3月25日閲覧。
    15. ^ Wickham, Hadley; Bryan, Jenny. 「パッケージの構造と状態」. R Packages . O'Reilly. 2020年11月9日時点のオリジナルよりアーカイブ。 2020年11月20日閲覧
    16. ^ ab “RubyGems.org あなたのコミュニティGemホスト”. ruby​​gems . 2019年2月13日時点のオリジナルよりアーカイブ2022年2月3日閲覧。
    17. ^ 「Bundler: Rubyアプリケーションのgemを管理する最良の方法」bundler.io . 2022年1月29日時点のオリジナルよりアーカイブ。 2022年2月3日閲覧
    18. ^ ab "The Cargo Book". ドキュメンテーション. Rustプログラミング言語. 2019年4月28日時点のオリジナルよりアーカイブ2019年8月26日閲覧。
    19. ^ “Rust Package Registry”. crates.io . 2019年8月28日時点のオリジナルよりアーカイブ。 2019年8月26日閲覧
    20. ^ 「プログラミング言語別トップリポジトリ一覧」. Stack Overflow . 2018年12月26日時点のオリジナルよりアーカイブ。 2010年4月14日閲覧
    21. ^ “npm About”. www.npmjs.com . 2019年11月19日時点のオリジナルよりアーカイブ2019年11月21日閲覧。
    22. ^ 開発者、「pip」、「pip: Python パッケージをインストールするための PyPA 推奨ツール」、2020 年 7 月 14 日にオリジナルからアーカイブ、 2019 年 11 月 21 日に取得
    23. ^ “Apt - Debian Wiki”. wiki.debian.org . 2019年10月19日時点のオリジナルよりアーカイブ2019年11月22日閲覧。
    24. ^ “Homebrew”. Homebrew . 2022年10月5日時点のオリジナルよりアーカイブ。 2019年11月22日閲覧
    25. ^ 「YelpがYelp Fusionをローンチ、MicrosoftがVcpkgツールとAndroid開発者向けの新しいTouch Sense SDKを作成」SD Times . 2016年9月20日. 2020年11月27日時点のオリジナルよりアーカイブ。 2020年11月19日閲覧
    26. ^ “Microsoft's C++ library manager now available for Linux and macOS”. SD Times . 2018年4月25日. 2020年9月22日時点のオリジナルよりアーカイブ2020年11月19日閲覧。
    27. ^ Chinthaguntla, Keerthi (2020年4月22日). 「YUMとRPMによるLinuxパッケージ管理」Enable Sysadmin . 2021年4月11日時点のオリジナルよりアーカイブ2021年4月11日閲覧。
    28. ^ “pacman - ArchWiki”. wiki.archlinux.org . 2017年8月18日時点のオリジナルよりアーカイブ2021年4月11日閲覧。
    29. ^ “Nexus Repository | ソフトウェアコンポーネント管理”. 2021年4月25日時点のオリジナルよりアーカイブ2021年4月25日閲覧。
    30. ^ Chris, Tucker (2007-03-15). 「Optimal Package Install/Uninstall Manager」(PDF) . UC San Diego: 1. 2011年6月14日時点のオリジナルよりアーカイブ(PDF) . 2011年9月14日閲覧. {{cite journal}}:ジャーナルを引用するには|journal=ヘルプ)が必要です
    31. ^ 「Linux リポジトリ分類スキーム」. braintickle.blogspot.com. 2006年1月13日. 2007年10月11日時点のオリジナルよりアーカイブ。 2008年3月1日閲覧
    Retrieved from "https://en.wikipedia.org/w/index.php?title=Software_repository&oldid=1328500190"
    Original text
    Rate this translation
    Your feedback will be used to help improve Google Translate