静的なライブラリフォルダとパッケージマネージャの長所と短所を考えると、ライブラリフォルダがより良いアプローチだと感じます。
ライブラリフォルダの長所は以下の通りです。
1.1. パッケージを管理するための外部ツールを必要としない。 2.ビルドにインターネット接続が必要ない。 3.ビルドの高速化(パッケージのチェックが不要)。 4.4. 環境の簡素化(必要な知識が少ない)。
パッケージマネージャの長所
1.複雑な依存関係ツリーを管理できる(依存関係をダウンロードすることで、その依存関係をすべて管理できる)。 2.新しいバージョンが利用可能かどうかをチェックするのに役立つ。
この業界は、今日作られるほとんど全てのものに対してパッケージマネージャの道を歩むことを決定したようです。では、私は何を見逃しているのでしょうか?
他の回答にはない重要なポイント。
パッケージマネージャを使うということは、どのライブラリのバージョンを使っているかを示す設定を持ち、その設定情報が実際に正しいかどうかを確認することです。
どのライブラリをどのバージョンで使っているかを知ることは、以下のような場合に非常に重要です。
さらに、実際にアップデートを行う際には、パッケージマネージャは(通常)移行性のある依存関係を必要に応じてアップデートします。
一方、lib
フォルダでは、(おそらくバイナリや変更された) ファイルの束があるだけで、それらがどこから来たのか、どのバージョンなのかを推測しなければなりません (あるいは、正しいかどうかわからない README を信用しなければなりません)。
他の点についても触れておきます。
パッケージの管理に外部ツールは不要です。
しかし、a) ソフトウェア開発者は、とにかくたくさんのツールをインストールする必要があるので、通常、もう1つは重要ではありませんし、b) 通常、どの分野でも1つか2つのパッケージマネージャ(JavaのMaven/Gradle、JS/TypeScriptのnpmなど)があるだけなので、何十ものパッケージをインストールする必要はないでしょう。
ビルドにインターネット接続は必要ありません。
私が知っているすべてのパッケージマネージャは、必要な依存関係をダウンロードした後(プロジェクト自体をダウンロードした直後でもかまいません)、オフラインで動作します。
ビルドの高速化(パッケージのチェックなし)。
おそらくそうでしょうが、オフラインでのパッケージチェックに多大な時間がかかるとは思えません(バージョン番号を比較するだけです)。オンラインチェックは時間がかかるかもしれませんが、必要に応じてオフにすることができます(デフォルトでオンになっている場合、例えばMavenはリリースバージョンの更新をチェックすることはありません)。
よりシンプルな環境(必要な知識がより少ない)。
確かにそうですが、上記で説明したように、lib
フォルダも知識が必要です。また、上記で説明したように、おそらくあなたは一握りの異なるパッケージマネージャーとしか仕事をしないでしょうし、あなたは既に知っているでしょう。
libフォルダの長所は、小規模な開発から大きな仕事へと移行すると、すぐに消えてしまいます。
例えば、外部ツールを必要としないという利点は、依存関係を手動で管理するために必要な作業によって打ち消され、そのツールは(世界の複数の意味において)あなた自身となります。
パッケージマネージャにインターネット接続は必要ありません。ローカルリポジトリを利用することができます。
ビルドの高速化は事実かもしれませんが、パッケージマネージャを使うかどうかの判断材料にはなりえません。私たちは大きな違いの話をしているわけではありませんし、これもあなたの設定に依存します。パッケージマネージャを使って遅いビルドをするのは簡単ですが、それは基本的に妨害行為です。
よりシンプルな環境(より少ない知識で済む)?これも小規模な開発では間違いなく可能性があります。プロジェクトは、使用されているいくつかのライブラリの一つ一つに至るまで、完全にあなたの頭の中に保持することができるかもしれません。簡単なmakefileや他のビルドスクリプトを追加すれば、完全なパッケージを手に入れることができます。
しかし、これは環境をシンプルにするものではなく、シンプルな環境でのみ機能するものです。大規模な開発では、カスタムソリューションではなく、標準的なツールを使っていることに満足することでしょう。結局のところ、一度だけ学べばいいのです(そして、最新のパッケージマネージャが新しいクールなものに置き換わったとき、それも学ばなければなりません)。
パッケージ管理のための外部ツールは不要です。
それはちょっと意味が違うのでは?パッケージマネージャを使えば、libフォルダを用意する必要はありません。また、自分でパッケージを管理する必要もありません。
ビルドにインターネット接続は必要ない
開発中にインターネットに接続できないことは稀ですが(移動中は例外かも)、まともなパッケージマネージャなら、アプリケーションをビルドするために最新版を用意する必要はないはずです。文句を言われるかもしれませんが、すでにインストールされているバージョンでビルドしない理由はありません。
ビルドの高速化(パッケージのチェックなし)
ビルドの高速化(パッケージのチェックなし) これは、かなりわずかなスピードアップですが、間違いなくその点は評価できます。
よりシンプルな環境(必要な知識がより少ない)
ほとんどのパッケージマネージャは最近とてもシンプルになっており、これらを使って回避しようとする価値はほとんどありません。ビジュアルクライアントもあります。実際には、多くのクロフトが隠されているのですが。
パッケージマネージャはまた、異なるプロジェクト間でパッケージを共有することもできます。5つのプロジェクトが同じバージョンのBoostを使っている場合、それぞれのプロジェクトでBoostを複製する必要はないのです。特に、あなたがおっしゃるような複雑な依存関係のあるツリーではそうです。
lib フォルダでは、そのプロジェクトのパッケージのみを管理しますが、パッケージマネージャでは、開発環境全体のパッケージを1つのツールで管理できます。