Compare commits

...
Sign in to create a new pull request.

4 commits

Author SHA1 Message Date
fc1a75eec1 docs: MEMO.mdにConventional Commitsの詳細を追加
- コミットメッセージの標準化に関する概要を記載
- 基本構造と主要なtypeの説明を追加
- 実例を通じて具体的な使用方法を示す
- GitHub CopilotやCI/CDとの統合についても言及
2025-07-31 21:59:10 +09:00
6310729265 feat: worktreeを活用した並行作業管理の詳細を追加
- worktreeの利点と推奨ワークフローを明確化
- 複数のIssueを同時に進める具体例を示す
- 機能追加とバグ修正の標準的なワークフローを詳細に記述
- コミット戦略やブランチ名の規則を整理
2025-07-31 12:04:18 +09:00
41075cf116 feat: 新規開発ワークフローの詳細設計書を追加
- 計画フェーズ、開発フェーズ、レビュー&統合フェーズの流れを明確化
- 各フェーズの具体的な手順とタスク管理方法を詳細に記述
- GitHubのIssueやプルリクエストを活用した効率的な開発プロセスを提案
2025-07-31 11:27:48 +09:00
5870194f33 fix: Jekyll設定のメタデータを更新
- site.title と site.description を追加
- SEO最適化のためのメタタグを強化
- ページの可読性向上を図るための設定調整
2025-07-31 02:19:22 +09:00
6 changed files with 6460 additions and 0 deletions

296
FLOW.md Normal file
View 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を活用することで
- ✅ 複数の作業を物理的に分離して管理
- ✅ コンテキストスイッチのコストを最小化
- ✅ 並列開発による生産性向上
- ✅ レビュー対応と新規開発の両立
このフローに従うことで、効率的で整理された開発環境を維持できます。

2322
GEMINI.md Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

1374
MEMO.md Normal file

File diff suppressed because it is too large Load diff

1
leaked-system-prompts Submodule

@ -0,0 +1 @@
Subproject commit d03ab51b39bab41443da50f988141d5a00382609

View file

@ -0,0 +1,251 @@
# Git Worktree vs Jujutsu (jj) 徹底比較
## はじめに:なぜこの比較が重要なのか
Git worktreeとJujutsujjは、どちらも**開発者の最大の悩み「作業の切り替えコスト」を解決する**ためのツールです。しかし、アプローチが根本的に異なります。
- **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/ # 現在のUIlocalhost: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に挑戦する、という段階的なアプローチもおすすめです。