コードベース

コードベース（英: codebase）は、ソフトウェア開発では、特定のソフトウェアシステム、アプリケーション、ソフトウェアコンポーネントなどを構築するために使用されるソースコードの集まりのこと。通常、コードベースには人間が作成したソースコードファイルのみが含まれ、ツールによって生成されたソースコードファイル（生成されたファイル）またはバイナリライブラリファイル（オブジェクトファイル）は含まれない。これらは人間が作成したソースコードから構築できるためである。構成ファイルとプロパティファイルはビルドに必要なデータであるため、コードベースに含まれる。

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

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

分散コードベースと比較した場合、モノリシックコードベースには長所と短所の両方がある。 最も単純には、モノリシックコードベースは統合が簡単である。異なる構成要素に対する変更やコンポーネント間のコードのリファクタリングを容易かつアトミックに行うことができる。そして全体のコードベースを横断した操作が可能であるが、より大きなリポジトリが必要となる。

個別のコードベースまたは分散コードベースは、個々のリポジトリをより小さく、より管理しやすくし、コンポーネント間の分離が可能になる。一方、コードベース間の統合（またはメインリポジトリとの統合）が必要になり、複数のコードベースにまたがる変更を複雑にする。 

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

例 
特に大きなコードベースには、次のものがある。

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

関連項目 

 Codeplex
 OSSホスティングサービスの比較
 FishEye
 Forge
 
 スニペット
 SourceForge.net

脚注 

バージョン管理
ソースコード