Claude CodeとGitHub Projectsで、チーム開発のコンテキスト共有とタスク管理を自動化する

Claude CodeとGitHub Projectsで、チーム開発のコンテキスト共有とタスク管理を自動化する

ClaudeとGithub Projectsを使ってタスク管理を効率化してみた話
2026.03.06

こんにちは。リテールアプリ共創部のYahiroです。

AIを前提とした開発になってからかれこれ一年以上が経ちました。

AIは従来では考えられない開発スピードを提供してくれます。一方で、何を作るか・優先度をどうするかといった意思決定は人間が行うべきであり、その多くは会議で行われます。

しかし現状、会議で決まったことはAIのコンテキストに自動的には反映されません。各開発者はIssueを自分で確認し、自身のClaude Codeにインプットし直す必要があります。

カンバンを常に最新に保ち、Claude Codeがそれを参照する仕組みを作れば、この手動の同期作業をなくすことができます。

今回は、GitHubとClaude Code、Geminiを用いて、人間同士のコミュニケーション、またAIと人間のコンテキストのギャップを極限まで縮めるアプローチをご紹介します。

全体像

今回の手法は、人間のコミュニケーションのほぼ全ての情報をClaude Codeが認識できるようにし、チームの各開発者が使うClaude Code間のコンテキストを限りなく近いものにしようという試みです。同時に、GitHub Projectsのカンバンが常に最新に保たれるため、人間もプロジェクトの状況をひと目で把握できるようになります。

以下のサイクルを毎日行い、開発者間の認識とAIと人間のコンテキストを常に同期します。

  1. 作業前にClaude Codeに「今日何をしたら良いか?」を尋ねる

  2. 作業開始時と終了時に、Claude CodeにIssueを更新させる

  3. 進捗定例前に今日更新されたIssueのサマリをSlackに投稿する

  4. 進捗定例をGoogle Meetで行う

  5. 文字起こしをClaude Codeに渡して、Issueを更新させる

(オプション)6. GitHub Discussionに議事を投稿する

順に見ていきます。

事前準備

GitHub

GitHub Projectsのカンバン機能を使います。カンバンとIssueのステータスをあらかじめ設定しておきます。ステータスはプロジェクトごとに適宜設定してください。

今回の記事では、後述のCLAUDE.mdのようなステータスを設定しています。

スクリーンショット 2026-03-06 11.10.07

このように、カンバンが常に最新の状態に保たれることで、AIだけでなく人間もプロジェクトの状況をひと目で把握できます。

gh CLI

GitHubはgh CLIを用いることで、API経由で操作することができます。今回は、Claude CodeにAPI経由でGitHubを操作させるので、gh CLIが使用できるようにしておいてください。

Claude Code Skills

Claude Codeでは、.claude/skills/ ディレクトリにSKILL.mdを配置することで、スラッシュコマンド(/daily-digest/meeting-minutes など)として定型作業を呼び出せます。本記事ではこの仕組みを使って、Slack投稿や議事録処理を自動化しています。

CLAUDE.md

CLAUDE.mdには以下のような設定をしておきます。

## タスク管理(GitHub Projects カンバン)

### セッション開始時の手順
1. カンバンの状態を確認する:
gh project item-list <PROJECT_NUMBER> --owner <OWNER> --format json --limit 100

2. `In progress` のIssueがあればそのタスクを継続する
3. なければ `Ready` のIssueから優先度順に着手する

### ステータス
| ステータス | 説明 |
|---|---|
| Backlog | 未着手・未スケジュール |
| Ready | 着手可能 |
| In progress | 作業中 |
| In review | レビュー中 |
| Done | 完了 |

### カンバン操作コマンド
# ステータス変更(例: In progress)
gh project item-edit --project-id <PROJECT_ID> --id $ITEM_ID \
  --field-id <STATUS_FIELD_ID> --single-select-option-id <OPTION_ID>

# 完了時(ステータスDone + Issueクローズ)
gh project item-edit ... --single-select-option-id <DONE_OPTION_ID>
gh issue close <NUMBER> --repo <OWNER/REPO> --reason completed

ここからは、架空の3人チームによるペット健康管理アプリの開発を例に、各ステップを説明します。

1. 作業前にClaude Codeに「今日何をしたら良いか?」を尋ねる

朝、PCの前に座り、作業を開始する時、前日の作業内容を思い出し整理するというのは意外と負荷が高いです。

まずはこれをClaude Codeにお願いします。

CLAUDE.mdにカンバンの状態確認を行うコマンドを事前に記載しているため、何をしたらいいか聞くだけでClaude Codeはカンバンを自律的に見にいき、今日やるべきIssueを提案してくれます。

$ claude

> 次は何したらいい?

カンバンの状態を確認します...

現在のプロジェクト状況:

🟡 In review
  #16 フード管理画面UI [P1/S] - 担当: 鈴木

📌 Ready
  #15 ペットの体重記録グラフ表示 [P1/M]
  #20 ペットの写真アップロード機能 [P1/L]
  #21 多頭飼い対応 [P2/M]

In progressのタスクはありません。Readyの中で #15 が最優先です。着手しますか?

2. 作業開始時と終了時に、Claude CodeにIssueを更新させる

以下のように、Claude Codeに#15を進めると伝えてみましょう。するとClaude Codeは、Issueのステータスを変更してから作業を開始してくれます。

PRがマージまでできたら、再度Claude Codeにお願いすればIssueのステータスを更新してくれるわけです。

> #15を進めて。終わったらIssueも更新してね

カンバンのステータスを「In progress」に変更します...
✅ #15 のステータスを In progress に変更しました

実装を開始します...
(作業中...)

✅ 実装が完了しました。PRを作成します。
✅ PR #32 を作成しました
✅ #15 のステータスを In review に変更しました
✅ #15 にコメントを追加しました:「体重記録グラフ表示の実装完了。PR #32 でレビュー待ち」

レビューが通りPRがマージされたら、Issueのクローズもお願いできます。

> #15のPRがマージされたよ。Issueをクローズして

✅ #15 のステータスを Done に変更しました
✅ #15 をクローズしました

3. 進捗定例前に今日更新されたIssueのサマリをSlackに投稿する

Slack側にIncoming Webhookを設定しておき、Claude Codeにカンバンの状態をまとめさせてSlackに投稿します。ポイントはドライランで一度文章自体は作成させて、必ず人間が確認するということです。

最近は賢くなりましたが、AIはまれにまだハルシネーションを起こすことがあるため、進捗定例での認識ずれを防止するためにも、人の目でチェックを行います。

以下がSkillsの定義です。

# .claude/skills/daily-digest/SKILL.md
---
name: daily-digest
description: Post daily kanban digest to Slack
disable-model-invocation: true
---

カンバンの進捗ダイジェストをSlackに投稿します。

## 手順

### 1. ドライランで内容を確認
DRY_RUN=1 python3 scripts/<ダイジェストスクリプト>.py

出力内容をユーザーに表示し、投稿してよいか確認する。

### 2. ユーザー承認後、Slackに投稿
SLACK_WEBHOOK_URL="<your-webhook-url>" python3 scripts/<ダイジェストスクリプト>.py

disable-model-invocation: true を設定することで、モデルが自動的にこのSkillを呼び出すことを防ぎ、必ずユーザーがスラッシュコマンドで明示的に実行する形にしています。

ダイジェストの生成ロジック自体はPythonスクリプトに書いています。
サンプルではPythonを使用していますが、AIから実行できれば指定はありません。

Slackには以下のように投稿されます。

📋 ペット健康管理アプリ 進捗レポート(2026-03-04 (Tue))

✅ 完了(Done)
━━━━━━━━━━━━━━━━━━━━
  #15 ペットの体重記録グラフ表示 [P1/M]
    💬 体重記録グラフ表示の実装完了。PR #32 マージ済み

🟡 レビュー中(In review)
━━━━━━━━━━━━━━━━━━━━
  #16 フード管理画面UI [P1/S]
    💬 レビューコメント対応済み、再レビュー待ち

📌 次に着手予定(Ready)
━━━━━━━━━━━━━━━━━━━━
  #20 ペットの写真アップロード機能 [P1/L]
  #21 多頭飼い対応 [P2/M]

これにより、開発メンバーは進捗定例前に最新のカンバン状況をサマリーで確認することができます。

4. 進捗定例をGoogle Meetで行う

会議の文字起こしができれば手動でも構いませんが、ここではGoogle Meetを使用します。Google MeetでGeminiによる文字起こしを有効にすることで以下のようなものを出力することができます。

佐藤: ペットの体重記録のグラフ表示機能ですが、PRがマージされて完了しました。
田中: ありがとうございます。次はワクチン接種スケジュールのリマインダー機能に
取り掛かりましょう。優先度はP1でお願いします。
佐藤: 了解です。サイズ感はMくらいですかね。
田中: そうですね。あと、以前から検討していたペットの写真アップロード機能、
あれはP2に下げましょう。先にリマインダーを優先したい。
鈴木: あ、あとフード管理画面のUIレビューなんですけど、レビューコメント全部
対応したので確認お願いします。
田中: わかりました。今日中に見ます。

これをClaude Codeに渡して、カンバンを更新しましょう。

5. 文字起こしをClaude Codeに渡して、Issueを更新させる

Google Meetの文字起こしをコピーし、/meeting-minutes <議事録テキスト> のように渡します。Skillsに以下を定義しています。

# .claude/skills/meeting-minutes/SKILL.md
---
name: meeting-minutes
description: Process meeting transcripts to update GitHub Projects kanban board
disable-model-invocation: true
argument-hint: <議事録テキストを貼り付け>
---

議事録からカンバン(GitHub Projects)を更新します。

## 手順

### Step 1: カンバンの現状確認
gh project item-list <PROJECT_NUMBER> --owner <OWNER> --format json --limit 100

### Step 2: 議事録から情報を抽出
以下の議事録テキストを分析してください:

$ARGUMENTS

抽出する情報:
- 決定事項(Decision)
- 新規タスク・TODO(Action Item)
- 既存タスクの進捗報告・完了報告
- 仕様変更・追加要件
- 優先度の変更

### Step 3: 更新計画を提示(重要: 実行前に必ずユーザー承認を得る)
以下の形式で一覧を提示する:
- **ステータス変更**: 変更するIssueとその理由
- **コメント追加**: 対象Issueと追記内容
- **新規Issue作成**: タイトル・ラベル・Priority・Size・Status
- **クローズ予定**: 完了報告があったIssue
- **対応不要**: Issue化しない項目と理由

ユーザーの承認・修正指示を受けてから次のステップに進むこと。

### Step 4: 承認後、カンバンを更新
CLAUDE.mdに記載のカンバン操作コマンドを使って更新を実行する。

$ARGUMENTS にはSkill実行時に渡された引数(議事録テキスト)が展開されます。/meeting-minutes <議事録テキスト> のように呼び出すだけで、カンバンの確認から更新提案まで一気通貫で行ってくれます。

これにより、文字起こしを渡すと以下のようにClaude Codeが提案してくれます。

カンバンの現状を確認しました。以下の更新を提案します。

■ クローズ予定
- #15 ペットの体重記録グラフ表示 → Done(佐藤さんの完了報告)

■ 新規Issue作成
- 「ワクチン接種スケジュールのリマインダー機能」
  Priority: P1 / Size: M / Status: Ready

■ 優先度変更
- #20 ペットの写真アップロード機能 → P1 → P2

■ コメント追加
- #16 フード管理画面UI → 「レビューコメント全件対応済み、再レビュー待ち」

承認しますか?

ポイントは、必ず承認をするように設定することです。

これにより、開発者Aが定例後にカンバンを更新すれば、翌朝、開発者Bが「次は何したらいい?」と聞いた時点で、昨日の定例で決まった最新の状態が反映された提案を受け取れます。

(オプション)6. GitHub Discussionに議事を投稿する

meeting-minutesと同じ構造で、議事録をGitHub Discussionに投稿するSkill(/meeting-discussion)も定義しています。議事録テキストを渡すと、以下のようにClaude CodeがDiscussionを作成してくれます。

# 2026/03/04 デイリー議事録 - リマインダー機能着手・優先度見直し

## 進捗報告

### 佐藤(アプリ開発)
- ペットの体重記録グラフ表示(#15) → **完了**
- ワクチン接種リマインダー機能 → **次に着手予定**(P1/M)

### 鈴木(UI)
- フード管理画面UI(#16) → **レビューコメント対応済み、再レビュー待ち**

---

## 決定事項: ワクチン接種リマインダー機能の優先着手

### 背景
- 体重記録グラフ表示が完了し、次のタスクを決定する必要があった
- ペットの写真アップロード機能よりもリマインダー機能を先行させたい

### 合意事項
1. ワクチン接種リマインダー機能を P1/M で新規作成し着手する
2. ペットの写真アップロード機能(#20)の優先度を P2 に変更する

---

## その他連絡
- フード管理画面UI(#16)のレビューを田中が本日中に実施予定

GitHub Discussionに投稿しておくことにより、人間があとから定例の内容を見返すときもわかりやすくなります。

まとめ

上記のサイクルを複数人で繰り返すことにより、従来の「人間が会議」→「AIにインプット」→「人間がそれを理解して報告」のサイクルを脱却することができ、コンテキストの共有がより高速化します。

カンバンが常に最新に保たれるため、各開発者はIssueを自分で確認して自身のClaude Codeにインプットし直す必要がなくなります。朝「次は何したらいい?」と聞くだけで、前日の定例で決まった最新の優先度やタスクを踏まえた提案が返ってきます。

また、MTGの議事をまとめる作業なども不要になるため、人間はより意思決定に専念することができるようになります。

AIとのコミュニケーションをより効率化し、開発スピードと品質を高めていきたいです。

この記事をシェアする

FacebookHatena blogX

関連記事