From cbac63db4c5ceef5560744642ce0862f67c5128a Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Sat, 2 May 2026 07:14:49 +0900 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20ChatGPT=E6=8C=87=E6=91=98=E3=81=AB?= =?UTF-8?q?=E3=82=88=E3=82=8B=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3?= =?UTF-8?q?=E3=83=88=E6=95=B4=E5=90=88=E6=80=A7=E4=BF=AE=E6=AD=A3=E3=81=A8?= =?UTF-8?q?=E7=AB=B6=E5=90=88=E6=AF=94=E8=BC=83=E3=83=89=E3=82=AD=E3=83=A5?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=88=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit REPORT01の指摘に基づく修正: - plugin-registries.md: 'repo sync' を実装と一致する 'repo refresh' に修正 - plugin-dev/quickstart.md: 存在しない 'devbase shell' を 'devbase login' に修正 - plugin-dev/quickstart.md: CONTAINER_SCALE のデフォルト値を実装(2)と一致させる - README.md: snapshot対象を 'ホームボリューム' から '/work ボリューム' に修正 (snapshot-guide.md および実装と整合) - container-operations.md / quickstart.md: php85 イメージを一覧に追加 その他: - docs/comparison.md: 競合ツール比較ドキュメントを新規追加 - .gitignore: issues/ を追加(ローカル作業用ディレクトリ) Co-Authored-By: Claude Opus 4.7 (1M context) --- .gitignore | 1 + README.md | 2 +- docs/comparison.md | 258 ++++++++++++++++++++++++++++++ docs/plugin-dev/quickstart.md | 7 +- docs/user/container-operations.md | 4 +- docs/user/plugin-registries.md | 2 +- 6 files changed, 268 insertions(+), 6 deletions(-) create mode 100644 docs/comparison.md diff --git a/.gitignore b/.gitignore index aa72fe0..390388b 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ plugins/*/ projects/* !projects/.gitkeep .env.sources.yml +issues/ diff --git a/README.md b/README.md index 0e01418..39fc9c7 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ devbaseは、Docker Composeを使った再現性の高い開発環境を提供 - **豊富なツールセット**: Docker CLI、AWS CLI、gcloud SDK、Terraform、Node.js、AI CLIツールがプリインストール - **複数コンテナの並行開発**: `devbase container scale`で既存コンテナを再起動せずにスケール可能 - **データ永続化**: 名前付きボリュームでコンテナ再起動後もデータを保持 -- **スナップショット管理**: ホームボリュームのバックアップ・復元・世代管理 +- **スナップショット管理**: `/work` ボリュームの増分バックアップ・復元・世代管理 - **環境変数の自動収集**: `devbase env init`でAWS/Git/GCP認証情報を対話的に設定 ## クイックスタート diff --git a/docs/comparison.md b/docs/comparison.md new file mode 100644 index 0000000..840d47c --- /dev/null +++ b/docs/comparison.md @@ -0,0 +1,258 @@ +# 競合ツール比較 + +devbase と類似カテゴリのツールを「複数リポジトリ管理」「ローカルDocker完結」「AI開発適性」「永続化・世代管理」などの観点で比較し、**どんな課題のときに devbase を選ぶ価値があるか** を整理します。 + +--- + +## 1. 比較対象カテゴリ + +devbase の隣接ツールはレイヤーが異なります。まずカテゴリ分けします。 + +```mermaid +flowchart TB + subgraph A[クラウド型 開発環境] + A1[GitHub Codespaces] + A2[Gitpod] + A3[Coder] + A4[Bunnyshell] + end + subgraph B[ローカル型 / セルフホスト型 dev env manager] + B1[Dev Containers 単体] + B2[devbase] + B3[DevPod] + B4[Daytona] + B5[DDEV / Lando] + end + subgraph C[マルチサービス開発オーケストレータ Kubernetes 系] + C1[Tilt] + C2[Skaffold] + C3[DevSpace] + end + subgraph D[VM / 宣言的パッケージマネージャ] + D1[Vagrant] + D2[Nix / devbox / flox] + D3[asdf / mise] + end + B2 -.「複数リポジトリ統合」.-> B3 + B2 -.「ローカルで完結」.-> A1 + B2 -.「コンテナで隔離」.-> D2 +``` + +--- + +## 2. 直接的な競合(dev environment manager) + +devbase と最も近い位置に立つツール群。devcontainer / Docker / VM ベースで「再現可能な開発環境」を提供します。 + +### 2.1 DevPod(loft-sh) — 最も近い競合 + +- **概要**: 「Codespaces のオープンソース版・クライアント専用」を標榜。`devcontainer.json` を入力にして、ローカルDocker / SSH / Kubernetes / AWS EC2 / GCP / Codespaces など**複数のバックエンドプロバイダ**で同じワークスペースを起動できる。 +- **強み**: プロバイダ抽象化、devcontainer 標準準拠、IDE非依存。 +- **devbase との違い**: + - DevPod は **1ワークスペース = 1リポジトリ** が基本単位。**複数リポジトリの統合管理(plugin/extension配布)の概念は無い**。 + - devbase は **複数リポジトリ × 並行コンテナ(scale)× 環境変数の3レベル統合** を提供。 + - devbase は **AI CLI 同梱 / snapshot 30世代 / `${DEVBASE_ROOT}/.env` 自動収集** が標準。DevPod は素のdevcontainer体験。 +- **使い分け**: 単一リポジトリでクラウド/ローカルを切り替えたい → DevPod。複数リポジトリ+AI開発 → devbase。 + +### 2.2 Daytona + +- **概要**: 元はOSSの「self-hosted dev environment manager」だったが、2026年2月のSeries A($24M)で **「AI生成コードを安全に実行するサンドボックス基盤」** へ事業ピボット。現行は AI agent向けのコード実行サンドボックスが主。 +- **devbase との違い**: + - 現行 Daytona は **AI agent 向けのサンドボックス実行基盤**。開発者本人の日常的開発環境という用途は二次的。 + - devbase は **開発者の日常開発体験**にフォーカス(dev コンテナへの接続・複数リポジトリ管理・snapshot)。 +- **使い分け**: AIに任意コードを実行させるサンドボックス基盤が必要 → Daytona。人間の開発者が複数リポジトリで日常開発 → devbase。 + +### 2.3 Coder / Bunnyshell + +- **概要**: K8s や VM 上に自社で構築するセルフホスト型クラウド開発環境。 +- **devbase との違い**: 運用に Kubernetes / VM 管理が必要。devbase は個人ラップトップでも組織サーバでも同じ CLI で動く軽量さ。 + +### 2.4 GitHub Codespaces / Gitpod + +- **概要**: クラウドVM上で `.devcontainer.json` を解釈する完全クラウド型。 +- **devbase との違い**: クラウド継続課金、オフライン不可。devbase は**ローカルDockerだけで完結**し、private extension に組織秘構成を閉じ込められる。 +- **併用**: Codespaces で素早く触る → 本格運用は devbase に移行、というハイブリッドが現実的。 + +### 2.5 Dev Containers 単体(Microsoft 公式) + +- **概要**: VSCode 拡張 + `.devcontainer/` ディレクトリでリポジトリ単位のコンテナ環境を定義。 +- **devbase との関係**: devbase は内部で Dev Containers 互換の dev コンテナを使う。**競合というより上位ツール**。 +- **devbase が追加するもの**: + - 複数リポジトリの **横断管理**(plugin/extension) + - `scale` による並行 dev コンテナ + - 環境変数の **3レベル統合**(`${DEVBASE_ROOT}/.env` / `env` / `.env`) + - snapshot(差分10世代+フル3世代) + - **AI CLI 同梱**(claude / codex / gemini / kiro) + +### 2.6 DDEV / Lando + +- **概要**: PHP / Drupal / WordPress に特化したDocker開発環境管理。 +- **devbase との違い**: 言語特化なので他言語混在チームには不向き。devbase は言語不問。 + +--- + +## 3. マルチサービス開発オーケストレータ(K8s 系) + +devbase は「**ホスト ↔ dev コンテナ**」型、こちらは「**dev ↔ K8sクラスタ上の複数サービス**」型で、レイヤーが違います。 + +### 3.1 Tilt + +- **概要**: K8s上で動くマイクロサービスを**ファイル同期+ライブアップデート**で開発。`Tiltfile`(Starlark DSL)でビルド/デプロイ/同期を宣言。Web UI付き。 +- **devbase との関係**: マイクロサービスの**サービス間統合**を解決。devbase は**リポジトリ間統合**を解決。**併用可**。 + +### 3.2 Skaffold + +- **概要**: K8s前提の continuous development ツール。`skaffold.yaml`(YAML)でビルド/デプロイ/開発サイクルを定義。CLI中心。 +- **Tilt との違い**: Skaffold はビルド→デプロイ型、Tilt は同期型。Skaffold の方が言語サポートが広く、コミュニティも成熟。 +- **devbase との関係**: 同上、レイヤーが異なる(併用可)。 + +### 3.3 DevSpace + +- **概要**: loft-sh による K8s 開発ツール。Tilt / Skaffold と同領域。 +- **devbase との関係**: 同上。 + +--- + +## 4. その他の隣接ツール + +| ツール | 概要 | devbase との違い | +|--------|------|-----------------| +| **Vagrant** | VM ベースの古典 | VM起動が遅い、Apple Silicon相性悪い。devbase はDockerなのでオーバーヘッド最小。 | +| **Nix / devbox / flox** | 宣言的パッケージマネージャ | ホストOS上で動く前提、AI CLIの危険モードを**閉じ込められない**。学習コスト高。 | +| **asdf / mise / rtx** | 言語バージョンマネージャ | ホスト依存を残すため、ローカル汚染問題は解決しない。 | +| **docker compose 自作** | 各リポジトリで独自運用 | 横断の概念が無い。10リポジトリあれば10通りの使い方を覚える必要がある。 | + +--- + +## 5. 機能比較表 + +凡例: ◎ =主要機能、〇 =対応、△ =部分対応・拡張で実現、✕ =非対応 + +| 観点 | devbase | DevPod | Daytona | Codespaces | Coder | Dev Containers | Tilt/Skaffold | DDEV | +|------|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| +| ローカルDockerで完結 | ◎ | ◎ | △ | ✕ | △ | ◎ | △ | ◎ | +| クラウド/リモート利用 | △ | ◎ | ◎ | ◎ | ◎ | ◎ | ◎ | ✕ | +| 複数リポジトリの統合管理 | ◎ | ✕ | △ | △ | △ | ✕ | △ | ✕ | +| 並行コンテナ(scale) | ◎ | ✕ | △ | △ | △ | ✕ | ◎ | ✕ | +| 環境変数の3レベル統合 | ◎ | △ | △ | △ | △ | △ | △ | △ | +| 認証情報の自動収集ウィザード | ◎ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | +| AI CLI 標準同梱 | ◎ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | +| AIコード実行サンドボックス | △ | ✕ | ◎ | △ | △ | ✕ | ✕ | ✕ | +| 巻き戻し可能なsnapshot | ◎ | ✕ | △ | △ | △ | ✕ | ✕ | ✕ | +| private 配布レジストリ | ◎ | △ | △ | △ | △ | ✕ | ✕ | ✕ | +| devcontainer.json 互換 | △ | ◎ | ◎ | ◎ | ◎ | ◎ | ✕ | ✕ | +| 言語非依存 | ◎ | ◎ | ◎ | ◎ | ◎ | ◎ | ◎ | ✕ | +| 月額課金 | なし | なし | あり/自前 | あり | 自前運用 | なし | なし | なし | + +--- + +## 6. 選定ガイド + +### → devbase + +- 複数リポジトリを横断して開発(マイクロサービス、モノリス+API+バッチ+インフラ) +- **AI CLI(claude/codex/gemini/kiro)を多用**しつつコンテナで安全に隔離 +- 同一リポジトリで**並行開発**(git worktree の代替) +- **社外秘の compose 構成**を private extension で組織内に閉じて配布 +- ローカルDockerで**オフライン完結** +- 巻き戻し可能な snapshot が必要 + +### → DevPod + +- 単一リポジトリの devcontainer 体験で、**ローカル/リモート/クラウドを切り替え**たい +- IDE非依存・プロバイダ非依存を最優先 + +### → Daytona + +- **AI エージェントに任意コードを実行させる**サンドボックス基盤が必要 +- マルチテナント・マルチユーザの Code Interpreter 風サービスを構築 + +### → Codespaces / Gitpod + +- 端末でDockerを入れられない、ゼロセットアップを最優先 + +### → Tilt / Skaffold / DevSpace + +- 開発対象が **K8s 上のマイクロサービス群**で、サービス間のホットリロードが本丸 + +### → Dev Containers 単体 + +- リポジトリは1つだけ、VSCode専用、シンプルな構成 + +### → DDEV / Lando + +- PHP / Drupal / WordPress 特化で、その範囲しか触らない + +### → Nix / mise + +- ツールバージョンを言語横断で**宣言的に固定**したい(ホスト常駐モデル) + +--- + +## 7. devbase ならではの差別化要素 + +### 7.1 3層構造による配布 + +```mermaid +flowchart LR + E[extension
GitHub repo] --> P1[plugin: carmo-system] + E --> P2[plugin: carmo-ai] + P1 --> Pr1[project: carmo-cdk] + P1 --> Pr2[project: carmo-batch] + P2 --> Pr3[project: carmo-screening] +``` + +public な devbase 本体に、private な extension を**重ねるだけ**で組織秘の構成を共有できる。DevPod / Codespaces / Dev Containers にはこの**配布抽象化レイヤ**が無い。 + +### 7.2 環境変数の3レベル統合 + +`${DEVBASE_ROOT}/.env`(グローバル) → `projects/

/env`(プロジェクト, Git管理) → `projects/

/.env`(プロジェクト機密, gitignore) を**後勝ち**でマージ。「通常 ap-northeast-1 / このPJだけ us-east-1」が自然。 + +### 7.3 snapshot による世代管理 + +差分10世代+フル3世代=**合計30世代** を自動保管。`devbase snapshot list` で巻き戻し。AIエージェントに `~/` を破壊されても秒で復旧。 + +### 7.4 AI CLI 同梱と封じ込め + +`claude` / `codex` / `gemini` / `kiro` をベースイメージに同梱。`--dangerously-skip-permissions` 等の危険モードもコンテナ境界で**ホストに波及しない**。 + +--- + +## 8. 移行ガイド(簡易) + +| 移行元 | 主な作業 | +|--------|---------| +| docker compose 自作 | `compose.yml` を `${DEVBASE_ROOT}` ベースに書換 → `env`/`.env` 分離 → `projects/` 配下へ | +| Dev Containers | `.devcontainer/Dockerfile` を `containers//` か標準コンテナへ → `compose.yml` 作成 | +| DevPod | devcontainer.json を参考に `compose.yml` 作成 → plugin/extension化で複数リポジトリを束ねる | +| Codespaces | ローカルにDockerを導入 → `projects//` 配下に配置 → `devbase env init` で認証移送 | + +--- + +## 9. まとめ + +devbase は単体の Dev Containers / DevPod / クラウド型開発環境の代替ではなく、**「ローカルDocker × 複数リポジトリ × AI 開発」という現代的な3要件に最適化された統合管理レイヤ**です。 + +特に以下の3つが揃うチームでは選定価値が高い: + +1. **複数リポジトリを日常的に行き来**している +2. **AI CLI を本格活用**しており、安全な隔離が必要 +3. **社外秘の開発環境構成**を組織内で再利用したい + +--- + +## 関連ドキュメント + +- [はじめに](user/getting-started.md) +- [プラグインレジストリ](user/plugin-registries.md) +- [スナップショットガイド](user/snapshot-guide.md) +- [アーキテクチャ](developer/architecture.md) + +## 参考資料 + +- [DevPod 公式](https://devpod.sh/) / [GitHub](https://github.com/loft-sh/devpod) +- [Daytona 公式](https://www.daytona.io/) / [GitHub](https://github.com/daytonaio/daytona) +- [Tilt vs Skaffold(vcluster)](https://www.vcluster.com/blog/skaffold-vs-tilt-vs-devspace) +- [Daytona Alternatives 2026(Bunnyshell)](https://www.bunnyshell.com/comparisons/daytona-alternatives/) +- [DevPod Alternatives 2026(Bunnyshell)](https://www.bunnyshell.com/comparisons/devpod-alternatives/) +- [Self-hostable Alternatives to Daytona(Northflank)](https://northflank.com/blog/self-hostable-alternatives-to-daytona) diff --git a/docs/plugin-dev/quickstart.md b/docs/plugin-dev/quickstart.md index 0934c3e..979c6a0 100644 --- a/docs/plugin-dev/quickstart.md +++ b/docs/plugin-dev/quickstart.md @@ -112,7 +112,7 @@ CONTAINER_SCALE=1 | `GIT_REPO` | リポジトリ名 | | `GIT_HOST` | Gitホスト名(デフォルト: `github.com`)。GitLabの場合は `gitlab.com` を指定 | | `WORK_DIR` | コンテナ内の作業ディレクトリ | -| `CONTAINER_SCALE` | 起動するコンテナ数(デフォルト: 1) | +| `CONTAINER_SCALE` | 起動するコンテナ数(デフォルト: 2) | ### 2.4 .env ファイル(任意) @@ -148,7 +148,7 @@ devbase up ```bash # コンテナにログイン -devbase shell +devbase login # コンテナの状態確認 devbase ps @@ -244,7 +244,8 @@ flowchart LR | `base` | Ubuntu Noble | Docker CLI、Python 3 | 軽量な開発環境 | | `general` | base | AWS CLI、gcloud、Terraform、Node.js 20、AI CLI | 汎用開発 | | `go` | base | Go開発環境 | Go言語プロジェクト | -| `php` | general | PHP 8.3、Composer | PHP/Laravelプロジェクト | +| `php` | general | PHP 8.3、Composer | PHP 8.3 系プロジェクト | +| `php85` | general | PHP 8.5、Composer | PHP 8.5 系プロジェクト | | `latex` | general | LaTeX | 文書・論文作成 | | `lfm` | general | Rust、gfortran、MeCab | 数値計算・自然言語処理 | | `snapshot` | Ubuntu Noble | zstd | スナップショット専用 | diff --git a/docs/user/container-operations.md b/docs/user/container-operations.md index aa01dc8..9e76fcd 100644 --- a/docs/user/container-operations.md +++ b/docs/user/container-operations.md @@ -156,6 +156,7 @@ graph TD B --> C[general] B --> G[go] C --> D[php] + C --> I[php85] C --> E[latex] C --> F[lfm] A --> H[snapshot] @@ -173,7 +174,8 @@ graph TD |---------|-------|---------|------| | **base** | Ubuntu Noble | Docker CLI、Python 3 | 最小限の開発環境 | | **general** | base | AWS CLI、gcloud、Terraform、Node.js 20、AI CLI | 汎用開発環境 | -| **php** | general | PHP 8.3、Composer、MySQL Shell | PHP 開発 | +| **php** | general | PHP 8.3、Composer、MySQL Shell | PHP 8.3 系 開発 | +| **php85** | general | PHP 8.5、Composer、MySQL Shell | PHP 8.5 系 開発 | | **latex** | general | LaTeX | 文書作成 | | **lfm** | general | Rust、gfortran、MeCab | 数値計算・自然言語処理 | | **go** | base | Go 開発環境 | Go 開発 | diff --git a/docs/user/plugin-registries.md b/docs/user/plugin-registries.md index 84dd5f6..6a3872a 100644 --- a/docs/user/plugin-registries.md +++ b/docs/user/plugin-registries.md @@ -43,7 +43,7 @@ devbase plugin repo list devbase plugin repo remove # 同期(最新化) -devbase plugin repo sync +devbase plugin repo refresh ``` ## 自前レジストリの作成 From b1ecd830167b67767610ff14fd1477805b804cbe Mon Sep 17 00:00:00 2001 From: "takemi.ohama" Date: Sat, 2 May 2026 07:25:12 +0900 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20=E3=82=B9=E3=83=8A=E3=83=83?= =?UTF-8?q?=E3=83=97=E3=82=B7=E3=83=A7=E3=83=83=E3=83=88=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E5=85=88=E3=83=91=E3=82=B9=E3=81=A8rotate=E3=83=87=E3=83=95?= =?UTF-8?q?=E3=82=A9=E3=83=AB=E3=83=88=E5=80=A4=E3=81=AE=E4=B8=8D=E6=95=B4?= =?UTF-8?q?=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 全ドキュメントレビューで検出した実装との差分を修正: - snapshot-guide.md: スナップショット保存先を 'projects//backups/' から '\${DEVBASE_ROOT}/backups/'(全プロジェクト共通)に修正 (lib/devbase/snapshot/manager.py:30 と整合) - getting-started.md: プロジェクト構成図の backups/ を devbase ルート直下に移動 - troubleshooting.md: 'du -sh projects//backups/' を 'du -sh \${DEVBASE_ROOT}/backups/' に修正 - cli-reference.md: 'snapshot rotate --keep' のデフォルト記述を 定数名 'DEFAULT_MAX_GENERATIONS' から実際の値 '3' に変更 (lib/devbase/cli.py:182 の argparse default=3 と整合) Co-Authored-By: Claude Opus 4.7 (1M context) --- docs/user/cli-reference.md | 2 +- docs/user/getting-started.md | 4 ++-- docs/user/snapshot-guide.md | 2 +- docs/user/troubleshooting.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/user/cli-reference.md b/docs/user/cli-reference.md index f6bd8ed..1dd5cf3 100644 --- a/docs/user/cli-reference.md +++ b/docs/user/cli-reference.md @@ -488,4 +488,4 @@ devbase snapshot rotate [--keep N] | オプション | 説明 | |-----------|------| -| `--keep N` | 保持する世代数(デフォルトは `DEFAULT_MAX_GENERATIONS`) | +| `--keep N` | 保持する世代数(デフォルト: `3`) | diff --git a/docs/user/getting-started.md b/docs/user/getting-started.md index 2422dae..6749110 100644 --- a/docs/user/getting-started.md +++ b/docs/user/getting-started.md @@ -205,8 +205,8 @@ devbase/ │ ├── plugin.yml # プラグイン定義 │ ├── compose.yml # Docker Compose 設定 │ ├── env # プロジェクト設定(Git 管理) -│ ├── .env # プロジェクト機密情報(gitignore) -│ └── backups/ # スナップショット保存先 +│ └── .env # プロジェクト機密情報(gitignore) +├── backups/ # スナップショット保存先(全プロジェクト共通) ├── .env # グローバル環境変数(gitignore) └── plugins.yml # プラグイン設定 ``` diff --git a/docs/user/snapshot-guide.md b/docs/user/snapshot-guide.md index 4908fba..a1d4d7d 100644 --- a/docs/user/snapshot-guide.md +++ b/docs/user/snapshot-guide.md @@ -98,7 +98,7 @@ flowchart TD ## バックアップデータ構造 -スナップショットは `projects//backups/` ディレクトリに保存されます。 +スナップショットは `${DEVBASE_ROOT}/backups/` ディレクトリ(devbase ルート直下)に保存され、全プロジェクトで共通の場所に集約されます。 ``` backups/ diff --git a/docs/user/troubleshooting.md b/docs/user/troubleshooting.md index c7f2478..a12b404 100644 --- a/docs/user/troubleshooting.md +++ b/docs/user/troubleshooting.md @@ -356,7 +356,7 @@ devbase snapshot restore pre-restore-20260221-150000 devbase snapshot list # バックアップディレクトリのサイズ確認 -du -sh projects//backups/ +du -sh ${DEVBASE_ROOT}/backups/ # 不要な世代を削除(2世代のみ保持) devbase snapshot rotate --keep 2