コードベース
プロジェクトのソースコード全体とその構成・管理方法
開発ツールアーキテクチャ
コードベースとは
コードベース (Codebase) は、プロジェクトのソースコード全体を指す。Twelve-Factor App の第 1 原則「1 つのコードベースをバージョン管理し、多数のデプロイを行う」が基本方針。
モノレポ vs ポリレポ
| 観点 | モノレポ | ポリレポ |
|---|---|---|
| 構成 | 1 リポジトリに全プロジェクト | プロジェクトごとにリポジトリ |
| コード共有 | 容易 (同一リポジトリ) | パッケージとして公開 |
| CI/CD | 変更の影響範囲を検出して実行 | リポジトリごとに独立 |
| 依存管理 | 統一バージョン | リポジトリごとに管理 |
| 採用企業 | Google, Meta, Microsoft | Netflix, Amazon |
モノレポのツール
| ツール | 特徴 |
|---|---|
| Turborepo | 高速ビルド、キャッシュ |
| Nx | 依存グラフ、影響範囲分析 |
| pnpm workspaces | パッケージ管理 |
| Lerna | npm パッケージの公開 |
モノレポの構成例
my-project/
packages/
shared/ # 共通ライブラリ
frontend/ # Next.js アプリ
backend/ # Lambda 関数
infra/ # SAM テンプレート
package.json # ルートの設定
turbo.json # Turborepo 設定
コードベースの健全性
| 指標 | 健全 | 不健全 |
|---|---|---|
| ビルド時間 | 数分 | 数十分 |
| テスト実行時間 | 数分 | 数十分 |
| 依存パッケージ | 最新に近い | 数年前のバージョン |
| Dead Code | 少ない | 大量に残っている |
| コードカバレッジ | 70%+ | 10% 未満 |
Twelve-Factor App の原則
1 コードベース = 1 アプリケーション
├── dev デプロイ
├── stg デプロイ
└── prod デプロイ
環境ごとの差異は環境変数で管理 (コードは同一)
コードベースの成長管理
- Dead Code を定期的に削除
- 依存パッケージを定期的に更新 (Dependabot)
- モジュール境界を明確にし、循環依存を防ぐ
- コードオーナーシップを設定 (CODEOWNERS)
コードベースについては関連書籍でも詳しく扱われている。