# Task Run

> 依存解決済みのIssueを選択して実装を実行し、進捗をIssueと組み込みTaskに同期する。タスクの実装着手で使う。

- Skill: `mae616/task-run` (Agent Skill)
- Install (CLI): `npx skillmds@latest add mae616/task-run`
- Raw SKILL.md: https://api.skillmd.com/api/skills/mae616/task-run/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: mae616 (https://skillmd.com/u/mae616)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/mae616/task-run

---


# [タスク] 3. Issue実行 + 進捗同期

## 入力: $ARGUMENTS
- Issue番号（例: `#123` または `123`）
- 省略時: 実行可能なIssue（依存解決済み）を一覧表示して選択

---

## 🎯 目的
- 指定されたIssue（または選択したIssue）に従って実装を行う
- **組み込みTask** と **GitHub Issue** の進捗を同期する
- 完了時に両方を更新（Task: completed、Issue: close）

---

## 実行手順

### 1. Issue選択（引数省略時）
```
📋 実行可能なIssue（依存解決済み）

┌────┬─────────────────────┬──────────┬─────────────┬─────────────┐
│ #  │ Title               │ Issue    │ Task Status │ blockedBy   │
├────┼─────────────────────┼──────────┼─────────────┼─────────────┤
│ 1  │ API設計             │ #126     │ pending     │ なし ✅     │
│ 2  │ ユーザー認証実装     │ #123     │ pending     │ なし ✅     │
│ -  │ ログイン画面作成     │ #124     │ pending     │ #123 ⏳     │
└────┴─────────────────────┴──────────┴─────────────┴─────────────┘

→ どのIssueを実行する？ [番号を入力]
```

### 2. プレチェック
```bash
# Issue内容を取得して確認
gh issue view {ISSUE_NUMBER}
```
- `ready-for-dev` ラベルがあるか
- RDD参照セクションの存在
- 変更要求がある場合は **承認済み** か確認
- 組み込みTaskの blockedBy が空か確認

### 2.5. 作業ブランチ作成（通常 or worktree）

> **ブランチ戦略**: `.claude/rules/git.md` に従う。
> task/* ブランチは **最新の sprint/* から作成** する。sprint/* が存在しない場合は main から作成。

**ベースブランチの決定:**
```bash
# sprint/* ブランチの存在を確認
SPRINT_BRANCH=$(git branch -r --list 'origin/sprint/*' --sort=-committerdate | head -1 | xargs)
if [ -z "$SPRINT_BRANCH" ]; then
  BASE_BRANCH="main"
else
  BASE_BRANCH="${SPRINT_BRANCH#origin/}"
fi
git switch "$BASE_BRANCH" && git pull
```

**通常モード（単一タスク）:**
```bash
git checkout -b task/{ISSUE_NUMBER}-{short-description}
```

**並行モード（git worktree）:**
複数タスクを同時に進める場合は worktree を使用:
```bash
# 親ディレクトリにworktreeを作成
git worktree add ../$(basename $(pwd))-task-{ISSUE_NUMBER} -b task/{ISSUE_NUMBER}-{short-description}

# worktreeに移動して作業
cd ../$(basename $(pwd))-task-{ISSUE_NUMBER}
```

> **Tips**: 別ターミナルで別のClaude Codeセッションを起動し、異なるworktreeで並行作業が可能。
> 完了後は `git worktree remove ../project-task-{ISSUE_NUMBER}` で削除。

### 3. 着手（組み込みTask + Issue同期）

**組み込みTask更新:**
```
TaskUpdate:
  taskId: "{task-id}"  # metadata.issueNumber で特定
  status: "in_progress"
```

**Issueコメント（⚠️ 確認あり）:**
```bash
gh issue comment {ISSUE_NUMBER} --body "🚀 着手開始

## 実行計画
- [ ] {ステップ1}
- [ ] {ステップ2}
- [ ] {ステップ3}
"
```

### 4. 実装（TDD厳守）
- `CLAUDE.md` の規約に従い、RED → GREEN → REFACTOR で段階的に進める
- 要件をToDoに分解（最小ステップ）
- 既存パターン再利用と重複回避を最優先
- UI/画面を伴う実装は、着手前に `experience-plan` skill のチェックリスト（状態/モーション/世界観整合/文言/進行フィードバック）を宣言してから進める

### 5. 検証
```bash
pnpm lint --fix && pnpm type-check
pnpm test
```
- 失敗時の切り分け（最小サンプル運用等）は `CLAUDE.md` の方針に従う

**UI変更がある場合（Agent Browser利用可能時）:**
```bash
# 開発サーバーを起動後、Agent Browserでページを確認
agent-browser open http://localhost:3000/{対象パス}
agent-browser snapshot -i  # 要素一覧を取得
# 必要に応じてインタラクション確認
agent-browser click @{ref}
agent-browser fill @{ref} "テスト入力"
```
- 表示崩れ、状態遷移、レスポンシブを目視確認
- 問題発見時は修正後に再スナップショット

### 6. 進捗報告（適宜）
```bash
gh issue comment {ISSUE_NUMBER} --body "📝 進捗報告

## 完了
- [x] {完了したステップ}

## 次のステップ
- [ ] {残りのステップ}

## メモ
{気づいた点や注意点}
"
```

### 6.5. 設計書の差分更新

**変更モジュールの特定:**
```bash
# 変更ファイルからモジュールを特定
git diff --name-only HEAD~1 | grep "^src/" | cut -d'/' -f2 | sort -u
```

**対応する設計書を更新:**
- 変更があったモジュールの `doc/generated/reverse/modules/{module}.md` を更新
- 更新内容: 変更した関数/クラスの説明、データフロー、設計意図
- **全体再生成ではなく差分のみ**（変更箇所に関連する部分だけ）

**更新例:**
```markdown
## 変更履歴（今回の変更）
- {変更内容の要約}
- 影響範囲: {関連するモジュール/API}
```

> 💡 設計書がPRに含まれることで、レビュアーがコード変更の意図を理解しやすくなる

### 7. コミット + PR作成

**コミット（⚠️ 確認あり）:**
```bash
git add -A
git commit -m "feat: {変更概要} (#${ISSUE_NUMBER})

- {主要変更1}
- {主要変更2}

Refs #${ISSUE_NUMBER}"
```

**リモートにプッシュ:**
```bash
git push -u origin task/{ISSUE_NUMBER}-{short-description}
```

**PR作成（⚠️ 確認あり）:**

> **base先の決定**: `.claude/rules/git.md` に従う。
> - sprint/* ブランチが存在する → `--base sprint/*`（task → sprint へマージ）
> - sprint/* が存在しない → `--base main`

```bash
# base先を動的に決定
SPRINT_BRANCH=$(git branch -r --list 'origin/sprint/*' --sort=-committerdate | head -1 | xargs)
if [ -z "$SPRINT_BRANCH" ]; then
  PR_BASE="main"
else
  PR_BASE="${SPRINT_BRANCH#origin/}"
fi

gh pr create \
  --title "feat: {変更概要}" \
  --body "## 概要
{このPRで何を実現するか}

## 変更内容
- {主要変更1}
- {主要変更2}

## RDD整合
- **準拠**: OK（根拠: doc/input/rdd.md §...）
- **変更要求**: 無し / 有（承認済み）

## 検証結果
- [x] lint/type-check PASS
- [x] test PASS

## テスト手順
1. {確認手順1}
2. {確認手順2}

Closes #${ISSUE_NUMBER}" \
  --base "$PR_BASE"
```

> **Note**: `Closes #${ISSUE_NUMBER}` により、PRマージ時にIssueが自動closeされるにゃ。

### 8. 完了（組み込みTask更新）

**組み込みTask更新:**
```
TaskUpdate:
  taskId: "{task-id}"
  status: "completed"
```

**完了報告:**
```
✅ TASK-{ISSUE_NUMBER} 完了

- PR: #{PR_NUMBER}
- マージ後に Issue #{ISSUE_NUMBER} が自動close
```

---

## 失敗時のガイド

### RDD違反
```bash
gh issue comment {ISSUE_NUMBER} --body "⚠️ RDD違反検出

## 内容
{違反内容}

## 変更要求(ADR-lite)
{変更提案}

## ステータス
承認待ち（ユーザー確認後に再開）
"
```

### 制約で実現不能
```bash
gh issue comment {ISSUE_NUMBER} --body "🚫 実現不能

## 理由
{制約の内容}

## 代替案
1. {代替案1}: {影響}
2. {代替案2}: {影響}

## ロールバック方法
{戻し方}
"
```

---

## 品質チェックリスト
- [ ] RDD準拠（スタック/制約に一致）
- [ ] Docコメント（JSDoc/Docstring）が全関数・クラスにある
- [ ] 重複コードを作らず既存パターンを再利用
- [ ] コメントで**ドメイン意図**と**決定理由**を明記
- [ ] 検証ゲート（lint/type/test）がPASS
- [ ] 必要なら最小サンプルで検証済み（削除可注記）
- [ ] 技術的負債が記録され、次スプリントに回されている
- [ ] **コミットメッセージに Issue番号を含めている**
- [ ] **PRを作成し、`Closes #Issue番号` を本文に含めている**
- [ ] **組み込みTask が completed に更新済み**
- [ ] **変更モジュールの設計書（doc/generated/reverse/modules/）が更新済み**

---

## 自己評価
- **成功自信度**: (1-10)
- **一言理由**: {短く理由を記載}

