Compare commits
4 commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fc1a75eec1 | |||
| 6310729265 | |||
| 41075cf116 | |||
| 5870194f33 |
6 changed files with 6460 additions and 0 deletions
296
FLOW.md
Normal file
296
FLOW.md
Normal file
|
|
@ -0,0 +1,296 @@
|
||||||
|
# GitHub Development Flow Guide
|
||||||
|
|
||||||
|
このガイドは、Git worktreeを活用した効率的な開発フローをまとめたものです。
|
||||||
|
|
||||||
|
## 📋 基本的な開発フロー
|
||||||
|
|
||||||
|
### 1. 新規開発の流れ
|
||||||
|
|
||||||
|
#### 計画フェーズ
|
||||||
|
1. **リポジトリの作成**: GitHub上でプロジェクト用のリポジトリを作成
|
||||||
|
2. **ブランチ戦略の決定**:
|
||||||
|
- `main`: リリース可能な安定版
|
||||||
|
- `develop`: 開発統合用ブランチ
|
||||||
|
3. **仕様書の作成**: README.mdに「何を」「なぜ」「誰のために」を記載
|
||||||
|
4. **タスクの洗い出しと分解**: 数時間〜1日で完了できるレベルまで細分化
|
||||||
|
5. **全タスクのIssue化**: GitHub Issuesに登録し、Projectsボードで管理
|
||||||
|
|
||||||
|
#### 開発フェーズ
|
||||||
|
```bash
|
||||||
|
# 1. Issueの選択
|
||||||
|
# GitHub ProjectsでIssueを「進行中」に移動
|
||||||
|
|
||||||
|
# 2. worktreeでブランチ作成
|
||||||
|
git worktree add -b feature/11-login-ui ../login-ui-work develop
|
||||||
|
cd ../login-ui-work
|
||||||
|
|
||||||
|
# 3. 開発作業
|
||||||
|
# コーディング作業
|
||||||
|
|
||||||
|
# 4. コミット (Conventional Commits形式)
|
||||||
|
git add .
|
||||||
|
git commit -m "feat: ログインフォームのUIコンポーネントを作成 #11"
|
||||||
|
|
||||||
|
# 5. プッシュ
|
||||||
|
git push origin feature/11-login-ui
|
||||||
|
```
|
||||||
|
|
||||||
|
#### レビュー&統合フェーズ
|
||||||
|
1. **プルリクエストの作成**: GitHub上でPRを作成(`Closes #11`を含める)
|
||||||
|
2. **自動テストの実行**: GitHub Actionsが自動でテストを実行
|
||||||
|
3. **コードレビュー**: レビュアーがコードを確認
|
||||||
|
4. **マージ**: テストとレビューが完了したらマージ
|
||||||
|
5. **後片付け**:
|
||||||
|
```bash
|
||||||
|
cd ../my-project
|
||||||
|
git worktree remove ../login-ui-work
|
||||||
|
git branch -d feature/11-login-ui
|
||||||
|
git push origin --delete feature/11-login-ui
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 機能追加の流れ
|
||||||
|
|
||||||
|
#### 計画フェーズ
|
||||||
|
1. **機能要件の明確化**: What(何を)、Why(なぜ)、How(どのように)を定義
|
||||||
|
2. **Issueの作成**: 要件、技術的検討事項、受け入れ条件を記載
|
||||||
|
3. **ラベルとプロジェクトボードへの追加**: `feature`ラベル、優先度設定
|
||||||
|
4. **タスクの分解**: 大きな機能はサブタスクに分割
|
||||||
|
|
||||||
|
#### 開発フェーズ
|
||||||
|
```bash
|
||||||
|
# 1. 最新のdevelopを取得
|
||||||
|
cd ../my-project
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
|
||||||
|
# 2. 機能用の作業場を作成
|
||||||
|
git worktree add -b feature/24-comment ../comment-work develop
|
||||||
|
cd ../comment-work
|
||||||
|
|
||||||
|
# 3. 開発(小さなコミットを重ねる)
|
||||||
|
git commit -m "feat: コメント投稿フォームのUIを作成 #24"
|
||||||
|
git commit -m "test: コメント投稿APIのテストを追加 #24"
|
||||||
|
|
||||||
|
# 4. 定期的なプッシュ
|
||||||
|
git push origin feature/24-comment
|
||||||
|
```
|
||||||
|
|
||||||
|
#### レビュー&テストフェーズ
|
||||||
|
1. **セルフレビュー**: 不要なコードの削除、フォーマット確認
|
||||||
|
2. **プルリクエストの作成**: 変更内容、テスト方法、スクリーンショットを含める
|
||||||
|
3. **自動テストとCI/CD**: GitHub Actionsによる自動検証
|
||||||
|
4. **コードレビュー**: 設計、可読性、テスト、パフォーマンス、セキュリティ
|
||||||
|
5. **フィードバック対応**: レビューコメントに基づく修正
|
||||||
|
|
||||||
|
### 3. バグ修正の流れ
|
||||||
|
|
||||||
|
#### バグの分類
|
||||||
|
- **Critical(緊急)**: サービス停止、データ損失の危険 → mainからhotfix
|
||||||
|
- **High(高)**: 主要機能の不具合 → developからbugfix
|
||||||
|
- **Medium/Low**: 限定的な影響 → developからbugfix
|
||||||
|
|
||||||
|
#### 修正フロー
|
||||||
|
```bash
|
||||||
|
# 1. バグ報告のIssue作成(詳細な再現手順、期待動作、実際の動作、エラーログ)
|
||||||
|
|
||||||
|
# 2. 緊急度に応じたブランチ作成
|
||||||
|
# 緊急の場合
|
||||||
|
git worktree add -b hotfix/28-critical-auth ../hotfix-auth main
|
||||||
|
|
||||||
|
# 通常の場合
|
||||||
|
git worktree add -b bugfix/27-login-validation ../bugfix-login develop
|
||||||
|
|
||||||
|
# 3. バグの再現とテスト作成
|
||||||
|
cd ../bugfix-login
|
||||||
|
# まず失敗するテストを書く
|
||||||
|
npm test -- --grep "email with plus sign" # 失敗を確認
|
||||||
|
|
||||||
|
# 4. 修正の実装(最小限の変更)
|
||||||
|
git commit -m "test: メールアドレスに+記号を含む場合のテストを追加 #27"
|
||||||
|
git commit -m "fix: メールアドレスの+記号を正しく処理するように修正 #27"
|
||||||
|
|
||||||
|
# 5. 検証
|
||||||
|
npm test # すべてのテストがパス
|
||||||
|
npm run dev # 手動確認
|
||||||
|
|
||||||
|
# 6. プッシュとPR
|
||||||
|
git push origin bugfix/27-login-validation
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔄 並列開発のパターン
|
||||||
|
|
||||||
|
### 複数機能の同時開発
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 3つの機能を並行開発
|
||||||
|
../feature-login/ # ログイン機能(localhost:3000)
|
||||||
|
../feature-profile/ # プロフィール機能(localhost:3001)
|
||||||
|
../feature-dashboard/ # ダッシュボード(localhost:3002)
|
||||||
|
|
||||||
|
# 各ディレクトリで独立して開発サーバーを起動
|
||||||
|
cd ../feature-login && npm run dev
|
||||||
|
cd ../feature-profile && npm run dev -- --port 3001
|
||||||
|
cd ../feature-dashboard && npm run dev -- --port 3002
|
||||||
|
```
|
||||||
|
|
||||||
|
### レビュー対応中の新規開発
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# PR待ちの間に別の作業を開始
|
||||||
|
../feature-A/ # レビュー待ち
|
||||||
|
../feature-B/ # 新規開発中
|
||||||
|
../bugfix-C/ # 緊急修正
|
||||||
|
|
||||||
|
# レビューコメントが来たらすぐに切り替え
|
||||||
|
cd ../feature-A
|
||||||
|
# 修正対応
|
||||||
|
git add .
|
||||||
|
git commit -m "fix: レビュー指摘事項を修正"
|
||||||
|
git push
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🛠️ 便利なコマンド集
|
||||||
|
|
||||||
|
### worktree管理
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# worktree一覧表示
|
||||||
|
git worktree list
|
||||||
|
|
||||||
|
# 不要なworktreeの削除
|
||||||
|
git worktree prune
|
||||||
|
|
||||||
|
# 特定のコミットからworktree作成
|
||||||
|
git worktree add -b feature/test ../test-feature abc123def
|
||||||
|
```
|
||||||
|
|
||||||
|
### ブランチ管理
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# リモートブランチの最新化
|
||||||
|
git fetch --all --prune
|
||||||
|
|
||||||
|
# マージ済みブランチの削除
|
||||||
|
git branch --merged | grep -v "\*\|main\|develop" | xargs -n 1 git branch -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📝 コミットメッセージ規約
|
||||||
|
|
||||||
|
### Conventional Commits形式
|
||||||
|
|
||||||
|
```
|
||||||
|
<type>(<scope>): <subject>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Type一覧
|
||||||
|
- `feat`: 新機能
|
||||||
|
- `fix`: バグ修正
|
||||||
|
- `docs`: ドキュメントのみの変更
|
||||||
|
- `style`: コードの意味に影響しない変更
|
||||||
|
- `refactor`: バグ修正や機能追加を伴わないコード変更
|
||||||
|
- `perf`: パフォーマンス改善
|
||||||
|
- `test`: テストの追加・修正
|
||||||
|
- `chore`: ビルドプロセスやツールの変更
|
||||||
|
|
||||||
|
#### 例
|
||||||
|
```bash
|
||||||
|
git commit -m "feat(auth): JWT認証を実装"
|
||||||
|
git commit -m "fix: メモリリークを修正"
|
||||||
|
git commit -m "docs: READMEにインストール手順を追加"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🤖 GitHub連携機能
|
||||||
|
|
||||||
|
### GitHub Actions(自動化)
|
||||||
|
|
||||||
|
`.github/workflows/ci.yml`:
|
||||||
|
```yaml
|
||||||
|
name: CI
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
branches: [main, develop]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
- run: npm ci
|
||||||
|
- run: npm test
|
||||||
|
- run: npm run lint
|
||||||
|
```
|
||||||
|
|
||||||
|
### PR作成時のチェックリスト
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
## 変更内容
|
||||||
|
- [ ] 機能の説明を記載
|
||||||
|
- [ ] テストを追加/更新
|
||||||
|
- [ ] ドキュメントを更新
|
||||||
|
|
||||||
|
## テスト
|
||||||
|
- [ ] ローカルでテスト実行
|
||||||
|
- [ ] 手動での動作確認
|
||||||
|
|
||||||
|
## レビュー依頼事項
|
||||||
|
- 特に確認してほしい箇所を記載
|
||||||
|
```
|
||||||
|
|
||||||
|
## 💡 Tips & Best Practices
|
||||||
|
|
||||||
|
### 1. worktreeの命名規則
|
||||||
|
```bash
|
||||||
|
# 推奨される命名パターン
|
||||||
|
../feature-login # 機能開発
|
||||||
|
../bugfix-auth # バグ修正
|
||||||
|
../hotfix-critical # 緊急修正
|
||||||
|
../experiment-new-ui # 実験的変更
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 並列開発の注意点
|
||||||
|
- 各worktreeで異なるポートを使用
|
||||||
|
- node_modulesは各worktreeで独立管理
|
||||||
|
- 環境変数は各worktreeで設定
|
||||||
|
|
||||||
|
### 3. クリーンアップの習慣
|
||||||
|
```bash
|
||||||
|
# 週次でのクリーンアップ
|
||||||
|
git worktree prune
|
||||||
|
git remote prune origin
|
||||||
|
git branch --merged | grep -v "\*\|main\|develop" | xargs -n 1 git branch -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. トラブルシューティング
|
||||||
|
|
||||||
|
worktreeが削除できない場合:
|
||||||
|
```bash
|
||||||
|
# 強制削除
|
||||||
|
git worktree remove --force ../feature-xxx
|
||||||
|
|
||||||
|
# 手動削除後のクリーンアップ
|
||||||
|
rm -rf ../feature-xxx
|
||||||
|
git worktree prune
|
||||||
|
```
|
||||||
|
|
||||||
|
ブランチの切り替えができない場合:
|
||||||
|
```bash
|
||||||
|
# 未コミットの変更を一時保存
|
||||||
|
git stash
|
||||||
|
# または
|
||||||
|
git commit -m "WIP: 作業中の変更"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🎯 まとめ
|
||||||
|
|
||||||
|
Git worktreeを活用することで:
|
||||||
|
- ✅ 複数の作業を物理的に分離して管理
|
||||||
|
- ✅ コンテキストスイッチのコストを最小化
|
||||||
|
- ✅ 並列開発による生産性向上
|
||||||
|
- ✅ レビュー対応と新規開発の両立
|
||||||
|
|
||||||
|
このフローに従うことで、効率的で整理された開発環境を維持できます。
|
||||||
2216
GitHub個人開発 最大効率化戦略.md
Normal file
2216
GitHub個人開発 最大効率化戦略.md
Normal file
File diff suppressed because it is too large
Load diff
1
leaked-system-prompts
Submodule
1
leaked-system-prompts
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit d03ab51b39bab41443da50f988141d5a00382609
|
||||||
251
worktree-vs-jj-comparison.md
Normal file
251
worktree-vs-jj-comparison.md
Normal file
|
|
@ -0,0 +1,251 @@
|
||||||
|
# Git Worktree vs Jujutsu (jj) 徹底比較
|
||||||
|
|
||||||
|
## はじめに:なぜこの比較が重要なのか
|
||||||
|
|
||||||
|
Git worktreeとJujutsu(jj)は、どちらも**開発者の最大の悩み「作業の切り替えコスト」を解決する**ためのツールです。しかし、アプローチが根本的に異なります。
|
||||||
|
|
||||||
|
- **Git worktree**: Gitの上に構築された「物理的分離」による解決策
|
||||||
|
- **Jujutsu (jj)**: Git自体を置き換える「概念的革新」による解決策
|
||||||
|
|
||||||
|
## 基本概念の違い
|
||||||
|
|
||||||
|
### Git worktree: 物理的分離戦略
|
||||||
|
|
||||||
|
```
|
||||||
|
プロジェクトのディレクトリ構造:
|
||||||
|
../my-project/ # メインの作業場(develop)
|
||||||
|
├── .git/ # 共通のGitデータ
|
||||||
|
├── src/
|
||||||
|
└── package.json
|
||||||
|
|
||||||
|
../feature-login/ # ログイン機能用作業場
|
||||||
|
├── .git → ../my-project/.git # リンク
|
||||||
|
├── src/
|
||||||
|
└── package.json
|
||||||
|
|
||||||
|
../bugfix-urgent/ # 緊急バグ修正用作業場
|
||||||
|
├── .git → ../my-project/.git # リンク
|
||||||
|
├── src/
|
||||||
|
└── package.json
|
||||||
|
```
|
||||||
|
|
||||||
|
**特徴**:
|
||||||
|
- 各作業場は**物理的に独立したフォルダ**
|
||||||
|
- 同じリポジトリの異なるブランチを**同時に複数の場所で**展開
|
||||||
|
- `cd`コマンドで作業場を移動
|
||||||
|
|
||||||
|
### Jujutsu (jj): 概念的革新戦略
|
||||||
|
|
||||||
|
```
|
||||||
|
プロジェクトのディレクトリ構造:
|
||||||
|
my-project/ # 単一の作業場
|
||||||
|
├── .jj/ # jjのメタデータ
|
||||||
|
├── .git/ # Gitとの互換性維持
|
||||||
|
├── src/
|
||||||
|
└── package.json
|
||||||
|
|
||||||
|
変更の概念的管理:
|
||||||
|
change-abc123: feat: ログイン機能
|
||||||
|
change-def456: fix: 緊急バグ修正 ← 現在ここで作業中
|
||||||
|
change-ghi789: feat: UI改善
|
||||||
|
```
|
||||||
|
|
||||||
|
**特徴**:
|
||||||
|
- **単一のフォルダ**ですべてを管理
|
||||||
|
- 「変更(change)」という概念で作業を分離
|
||||||
|
- `jj edit <change-id>`で瞬時に作業を切り替え
|
||||||
|
|
||||||
|
## 具体的な作業フローの比較
|
||||||
|
|
||||||
|
### シナリオ: ログイン機能開発中に緊急バグ修正が発生
|
||||||
|
|
||||||
|
#### Git worktreeの場合
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. ログイン機能を開発中
|
||||||
|
cd ../login-work
|
||||||
|
# コーディング中...(未コミットの変更あり)
|
||||||
|
|
||||||
|
# 2. 緊急バグ修正が必要に!
|
||||||
|
cd ../my-project
|
||||||
|
git worktree add -b hotfix/urgent-bug ../bugfix-work develop
|
||||||
|
cd ../bugfix-work
|
||||||
|
|
||||||
|
# 3. バグ修正
|
||||||
|
# 修正作業...
|
||||||
|
git add .
|
||||||
|
git commit -m "fix: 緊急バグを修正"
|
||||||
|
git push origin hotfix/urgent-bug
|
||||||
|
|
||||||
|
# 4. PR作成してマージ後、クリーンアップ
|
||||||
|
cd ../my-project
|
||||||
|
git worktree remove ../bugfix-work
|
||||||
|
git branch -d hotfix/urgent-bug
|
||||||
|
|
||||||
|
# 5. ログイン機能に戻る
|
||||||
|
cd ../login-work
|
||||||
|
# 以前の作業がそのまま残っている!
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Jujutsu (jj)の場合
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. ログイン機能を開発中
|
||||||
|
# my-project/で作業中...(change-abc123)
|
||||||
|
|
||||||
|
# 2. 緊急バグ修正が必要に!
|
||||||
|
jj new main -m "fix: 緊急バグを修正"
|
||||||
|
# → 瞬時に新しい変更に切り替わり、以前の作業は自動保存
|
||||||
|
|
||||||
|
# 3. バグ修正
|
||||||
|
# 修正作業...(git addは不要、ファイル保存で自動的に変更に含まれる)
|
||||||
|
jj bookmark create hotfix/urgent-bug
|
||||||
|
jj git push --bookmark hotfix/urgent-bug
|
||||||
|
|
||||||
|
# 4. PR作成してマージ後、クリーンアップ
|
||||||
|
jj bookmark delete hotfix/urgent-bug
|
||||||
|
|
||||||
|
# 5. ログイン機能に戻る
|
||||||
|
jj edit change-abc123
|
||||||
|
# → 瞬時に以前の作業に戻る!
|
||||||
|
```
|
||||||
|
|
||||||
|
## 詳細比較表
|
||||||
|
|
||||||
|
| 項目 | Git worktree | Jujutsu (jj) |
|
||||||
|
|------|-------------|--------------|
|
||||||
|
| **基本思想** | 物理的分離による並行作業 | 概念的な変更管理 |
|
||||||
|
| **ディスク使用量** | 作業場数 × リポジトリサイズ | 1リポジトリ分のみ |
|
||||||
|
| **作業切り替え** | `cd ../other-work`(数秒) | `jj edit <id>`(瞬時) |
|
||||||
|
| **未コミット変更** | 各作業場で独立して保持 | 自動的に変更として保存 |
|
||||||
|
| **ステージング** | 各作業場でgit add必要 | 概念自体が存在しない |
|
||||||
|
| **stash** | 不要(物理的分離のため) | 不要(概念的分離のため) |
|
||||||
|
| **学習コスト** | Gitの延長(低) | 新しいVCS(高) |
|
||||||
|
| **チーム対応** | 全員Gitを知っていればOK | 全員がjjを学ぶ必要 |
|
||||||
|
| **IDEサポート** | フォルダ単位で自然に分離 | 同一フォルダ内での変更切り替え |
|
||||||
|
|
||||||
|
## それぞれの利点・欠点
|
||||||
|
|
||||||
|
### Git worktreeの利点
|
||||||
|
1. **学習コストが低い**: 既存のGit知識で十分
|
||||||
|
2. **直感的**: フォルダ = 作業場という分かりやすい概念
|
||||||
|
3. **IDEフレンドリー**: VS Codeなどで複数ウィンドウを開ける
|
||||||
|
4. **チーム互換性**: 他のメンバーは普通のGitブランチとして見える
|
||||||
|
5. **デバッグしやすい**: どのフォルダで何をしているか一目瞭然
|
||||||
|
|
||||||
|
### Git worktreeの欠点
|
||||||
|
1. **ディスク容量**: 大きなリポジトリだと容量を食う
|
||||||
|
2. **パスの管理**: 複数のパスを覚えておく必要
|
||||||
|
3. **クリーンアップ**: 作業完了後の削除作業が手間
|
||||||
|
4. **ファイルシステム依存**: Windows等でのパス問題
|
||||||
|
|
||||||
|
### Jujutsu (jj)の利点
|
||||||
|
1. **究極の効率性**: 瞬時の作業切り替え
|
||||||
|
2. **ディスク効率**: 1リポジトリ分の容量のみ
|
||||||
|
3. **自動管理**: ステージング、stash等の概念が不要
|
||||||
|
4. **強力なundo**: あらゆる操作が取り消し可能
|
||||||
|
5. **履歴編集**: 過去のコミット修正が超簡単
|
||||||
|
|
||||||
|
### Jujutsu (jj)の欠点
|
||||||
|
1. **学習コスト**: 全く新しい概念の理解が必要
|
||||||
|
2. **チーム導入障壁**: 全員が新しいツールを覚える必要
|
||||||
|
3. **エコシステム**: Git周辺ツールとの互換性問題の可能性
|
||||||
|
4. **成熟度**: 比較的新しいツールで、長期的な安定性が未知
|
||||||
|
|
||||||
|
## 使い分けの指針
|
||||||
|
|
||||||
|
### Git worktreeを選ぶべき場合
|
||||||
|
- **チーム開発**が中心
|
||||||
|
- **既存のGitワークフロー**に大きな変更を加えたくない
|
||||||
|
- **VS Codeなどのエディタ**で複数ウィンドウを開いて作業したい
|
||||||
|
- **学習コストを最小限**に抑えたい
|
||||||
|
- **Windows環境**でのパス問題が許容範囲
|
||||||
|
|
||||||
|
### Jujutsu (jj)を選ぶべき場合
|
||||||
|
- **個人開発**が中心
|
||||||
|
- **最高の開発体験**を求めている
|
||||||
|
- **頻繁な作業切り替え**が必要
|
||||||
|
- **実験的な開発**を多く行う
|
||||||
|
- **新しいツールを学ぶ意欲**がある
|
||||||
|
|
||||||
|
## 具体的な導入シナリオ
|
||||||
|
|
||||||
|
### シナリオ1: フリーランス開発者(個人開発中心)
|
||||||
|
**推奨**: Jujutsu (jj)
|
||||||
|
- クライアントワークでの頻繁な作業切り替えに最適
|
||||||
|
- 最新技術への投資として価値あり
|
||||||
|
- 個人の生産性向上が直接収入に影響
|
||||||
|
|
||||||
|
### シナリオ2: スタートアップのCTO(小規模チーム)
|
||||||
|
**推奨**: Git worktree
|
||||||
|
- チーム全体での学習コストを考慮
|
||||||
|
- 新しいメンバーの onboarding を重視
|
||||||
|
- 安定性と実績を重視
|
||||||
|
|
||||||
|
### シナリオ3: 大企業のシニア開発者(複雑な開発環境)
|
||||||
|
**推奨**: 状況による
|
||||||
|
- 個人作業が多い → jj
|
||||||
|
- チーム調整が多い → worktree
|
||||||
|
- 実験環境でjjを試してから判断
|
||||||
|
|
||||||
|
## 重要な制約:並列開発の観点
|
||||||
|
|
||||||
|
### Git worktree: 真の並列開発が可能
|
||||||
|
```bash
|
||||||
|
# 3つの機能を本当に「同時に」開発できる
|
||||||
|
Terminal 1: cd ../feature-A && npm run dev # localhost:3000
|
||||||
|
Terminal 2: cd ../feature-B && npm run dev # localhost:3001
|
||||||
|
Terminal 3: cd ../feature-C && npm run dev # localhost:3002
|
||||||
|
|
||||||
|
# 各作業場で独立したサーバーが起動し、ブラウザでタブを切り替えながら開発
|
||||||
|
```
|
||||||
|
|
||||||
|
### Jujutsu: 高速切り替えだが同時実行は不可
|
||||||
|
```bash
|
||||||
|
# 同時には1つしか実行できない
|
||||||
|
jj edit feature-A
|
||||||
|
npm run dev # localhost:3000
|
||||||
|
|
||||||
|
# feature-Bを見たい場合
|
||||||
|
# Ctrl+C でサーバー停止
|
||||||
|
jj edit feature-B
|
||||||
|
npm run dev # 再度起動が必要
|
||||||
|
```
|
||||||
|
|
||||||
|
### 並列開発が必要なケース
|
||||||
|
|
||||||
|
| シナリオ | worktree | jj |
|
||||||
|
|---------|----------|-----|
|
||||||
|
| **複数機能の同時比較** | ◎ 複数ブラウザタブで並べて確認 | ✗ 切り替えが必要 |
|
||||||
|
| **APIサーバー + フロントエンド** | ◎ 別ポートで同時起動 | ✗ 1つずつしか起動できない |
|
||||||
|
| **A/Bテスト開発** | ◎ 2つのバージョンを並行実行 | ✗ 切り替えて確認 |
|
||||||
|
| **性能比較** | ◎ 同時にベンチマーク実行 | ✗ 順番に実行 |
|
||||||
|
| **マイクロサービス開発** | ◎ 複数サービスを同時起動 | ✗ 実質不可能 |
|
||||||
|
|
||||||
|
### 実例:リアルタイム比較が必要な開発
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Git worktree: UIの新旧比較
|
||||||
|
../current-ui/ # 現在のUI(localhost:3000)
|
||||||
|
../new-ui-design/ # 新しいUIデザイン(localhost:3001)
|
||||||
|
# → ブラウザで2つのタブを開いて、リアルタイムで比較しながら調整
|
||||||
|
|
||||||
|
# jj: 同じことをやろうとすると...
|
||||||
|
jj edit current-ui
|
||||||
|
npm run dev
|
||||||
|
# スクリーンショットを撮る
|
||||||
|
jj edit new-ui-design
|
||||||
|
npm run dev
|
||||||
|
# メモリに頼って比較... 😓
|
||||||
|
```
|
||||||
|
|
||||||
|
## まとめ:どちらも素晴らしいソリューション
|
||||||
|
|
||||||
|
Git worktreeとJujutsu (jj)は、どちらも「作業の切り替えコスト」という共通の問題を解決する優れたツールです。
|
||||||
|
|
||||||
|
- **Git worktree**: 安全で実用的、チーム開発に最適
|
||||||
|
- **Jujutsu**: 革新的で効率的、個人開発に最適
|
||||||
|
|
||||||
|
重要なのは、**あなたの開発環境と目標に最も適したツールを選ぶこと**です。どちらを選んでも、従来の「1ブランチずつ切り替える」ワークフローより大幅に生産性が向上することは間違いありません。
|
||||||
|
|
||||||
|
始めるなら、学習コストの低いGit worktreeから試して、個人開発でより高い効率性を求めるならJujutsuに挑戦する、という段階的なアプローチもおすすめです。
|
||||||
Loading…
Add table
Add a link
Reference in a new issue