ソースフォルダーの階層に関しては、src
、doc
、test
フォルダーなど、いくつかの一般的な機能が常にあり、これらはかなり理解しやすい内容を持っています。
ただし、大きなプロジェクトにはlib
とvendor
の両方のフォルダーがあることに気づきましたが、名前には「サードパーティlibraries
外部からvendors
」。ただし、同じプロジェクトで両方を見ると、そこに違いがあります違いがあります。
Filesystem Hierarchy Standard のような情報は、実際には 何らかの形で の慣例ですが、Googleでもソースでも見つかりませんでした。
Symfony を使用したより詳細な例を次に示します。プロジェクトを作成すると、プロジェクトのルートにlib
フォルダーが作成されます。このフォルダーでは、次の構造が見つかります。
lib
+--filter
+--form
+--…
+--vendor
+--simpletest
+--symfony
ここで、symfony
フォルダーにはSymfonyのコアがすべて含まれています。
@ WayneMの回答を一般化しますが、それほど大胆に編集することはしません
したがって、この構造はアプリケーションフレームワーク(少なくともRailsとSymfony)で観察できるようです。
これは、アプリケーション開発者がlib
/src
構造をそのまま維持しながら、フレームワークの使用によってもたらされる他の距離のレベルを追加する方法です:vendor
フォルダーには実際にフレームワークのライブラリーが含まれ、lib
フォルダーはアプリケーションに含まれるライブラリー用、src
はそのソースファイル用です。
フレームワークがないとアプリケーションは役に立たないので、「より遠い」lib
は不可欠ですが、アプリケーションの開発者は触れないでください。これはフレームワークベンダーのライブラリです。
lib
またはlibraries
ディレクトリを見つけたとき、次のことを考えます。
vendor
ディレクトリを見ると、次のことを考えます。
lib
およびvendor
ディレクトリーを見ると、いくつかの違いがあると思います。
lib
はライブラリのみを保持し、vendor
は実際に何でも保持できます。lib
は、ライブラリを配置する場所です。vendor
は、サードパーティ(元の作成者によるコードを含む)を配置する場所です。lib
は、プロジェクトの元の作成者によるライブラリの場所です(それが私でない場合)。一方、vendor
は、元の作成者がサードパーティに提供したものです。lib
にあるものはすべて、プロジェクトの他の部分と同じライセンスでライセンスされていると想定しても問題ありません。上記のいずれかが当てはまる場合、別のフォルダーを作成するのに十分な理由があります。私の知る限り、一般的に受け入れられている慣習はありません。コミュニティによっては、コミュニティ全体に共通の慣行がありますが、それだけです。
特定のSymfonyの例について:Symfonyはフレームワークであり、開発者が言っていることは、Symfonyアプリケーションでは、フレームワークのコアライブラリはベンダーコードである、つまりアプリケーションの元の作成者ではなくサードパーティからのものであると思います(君は)。
Symfonyのようなものの場合、lib
はアプリケーションコード(つまり、開発者が作成したもの)であり、vendor
はサードパーティのコードです。 libはsrc
フォルダーが通常何であるか、ベンダーはlibであると考えてください。私は通常、そのスタイルをPHPで見ます。HTMLテンプレートを実際のクラスから分離するためです。
app/assets
は、カスタム画像、JavaScriptファイル、スタイルシートなど、アプリケーションが所有するアセット用です。
lib/assets
は、アプリケーションまたはアプリケーション間で共有されるライブラリのスコープに実際には適合しない独自のライブラリのコード用です。
vendor/assets
は、JavaScriptプラグインやCSSフレームワークのコードなど、外部エンティティが所有するアセット用です。
これはRails固有の質問ではないことはわかっていますが、説明は適切で明確であり、おそらく他のフレームワーク/プロジェクト構造にも及びます。