知識ベース

コードベース

ソフトウェア開発では、 コードベース (またはコードベース )は、特定のソフトウェアシステム、アプリケーション、またはソフトウェアコンポーネントの構築に使用されるソースコードのコレクションです。通常、コードベースには人間が作成したソースコードファイルのみが含まれます。したがって、コードベースには通常、ツール(生成されたファイル)またはバイナリライブラリファイル(オブジェクトファイル)によって生成されたソースコードファイルは含まれません。ただし、ビルドに必要なデータであるため、通常は構成ファイルとプロパティファイルが含まれます。

コードベースは通常、バージョン管理システムのソース管理リポジトリに保存されます。小規模なプロジェクトの場合は、単純なファイルセットとして保持される場合があります(Linuxカーネルでさえ、長年にわたってファイルセットとして維持されていました)。ソースコードリポジトリは、大量のソースコードが公開または非公開で保持される場所です。ソースコードリポジトリは、基本的にバックアップとバージョン管理、および複数の開発者プロジェクトで使用され、さまざまなソースコードバージョンを処理し、開発者が重複する変更を送信することで発生する競合の解決を支援します。 Subversion、Git、およびMercurialは、このワークフローを処理するために使用される一般的なツールの例であり、オープンソースプロジェクトで一般的です。

明確でモノリシックなコードベース

複数のプロジェクトに個別の異なるコードベースを持たせることも、単一の共有またはモノリシックコードベースを持たせることもできますこれは、特に、同じ会社内で開発されたプロジェクトなどの関連プロジェクトの場合に当てはまります。より詳細には、モノリシックコードベースは通常、単一のリポジトリ(すべてのコードを1か所に)を必要とし、多くの場合、共通のビルドシステムまたは共通のライブラリを必要とします。コードベースを共有するか分割するかは、システムアーキテクチャと実際のビルド結果に依存しません。したがって、実際の開発に関連するモノリシックコードベースは、ソフトウェアアーキテクチャまたは単一のモノリシックバイナリに関連するモノリシックシステムを必要としません。その結果、モノリシックコードベースは、単一のシステムまたは単一のバイナリのみを保持するのではなく、多くの場合(大規模なコードベースの場合)個別のコンポーネントで構成されます。分散コードベース(複数のコンポーネント)を使用して、単一のモノリシックシステムまたは単一のバイナリを構築することもできます。たとえば、Linuxカーネルはアーキテクチャ上は単一のモノリシックカーネルですが、個別のバイナリ(ロード可能なコンポーネント)で構成され、複数の分散リポジトリで開発されています。

分散コードベースと比較すると、モノリシックコードベースには長所と短所の両方があります。最もシンプルなのは、モノリシックコードベースが統合を単純化することです。‍異なるコンポーネントへの変更またはコンポーネント間のコードのリファクタリングを簡単かつアトミックに行うことができます‍。 。個別のコードベースまたは分散コードベースは、個々のリポジトリをより小さく管理しやすくし、同時にコンポーネントを分離しますが、コードベース間(またはメインリポジトリと)の統合も必要とし、複数のコードベースにわたる変更を複雑にします。

標準に関しては、複数のコードベースを「個別」と呼ぶことで、共有ソースコードのない独立した実装が存在し、歴史的にこれらの実装は共通のプロジェクトから発展しなかったことを宣言しています。これは、所定の標準を実装する2つの独立したソフトウェアを示すことにより、相互運用性を実証する方法の1つです。

いくつかの特に大きなコードベースには以下が含まれます。

  • Google:モノリシック、10億個のファイル、900万個のソースコードファイル、20億行のソースコード、合計3,500万件のコミット、合計86 TBのサイズ(2015年1月)
  • Facebook:モノリシック、8 GB(履歴を含むリポジトリ54 GB、2014)、数十万のファイル(2014)
  • Linuxカーネル:分散、1500万行を超えるコード(2013年およびカーネルバージョン3.10以降)