社内バスケ部に「AIコーチ」を作った話(GitHub Issues × GitHub Actions × Codex Action)
※本記事はSun* Advent Calendar 2025 7日目の記事です。
こんにちは。Sun* 所属のうえひろです。
普段はバックエンドエンジニアをしていますが、月1で “WASSHOI” という社内のバスケ部にて大会に出たり、練習して汗を流しています。
この記事で得られること
この話は「社内バスケ部」の事例ですが、本質はスポーツに限りません。
- 改善が“続かない”問題を、仕組みで回る状態に変える考え方がわかる
- 記憶・気合・属人 から脱却して、チームの学びを資産化する方法がわかる
🥲 背景:課題は出るのに、改善が続かない
大会後、「あれがダメだった」「次こうしよう」は毎回出ます。
でも現実は…
- 記録が残らない(記憶頼り)
- 次の練習で忘れてる
- 結果、同じ課題でまた負ける
試合後半に小学生くらいの子が出てきて、チーム連携に翻弄される…みたいな場面もあり、
「これは課題をちゃんと管理して、チームとして修正しないといけない」と思いました。
やりたいこと:課題 → 練習メニュー化 を自動化したい
やりたいことはシンプルです。
- 課題がIssueに残る
- 課題が固まったらAIが練習メニューを作る
- そのまま練習で回す
- 結果をまたログ化して改善を続ける
つまり、改善の「次の一手」を自動で出すのがゴールです。
まず言葉を整理
GitHub Actions とは?
GitHub上のイベント(Issue更新、ラベル変更、毎日01:00など)をトリガーに、自動処理(workflow)を実行できる仕組みです。
Codex Action(openai/codex-action)とは?
GitHub Actionsのworkflow内で使える “部品(Action)” の1つで、Codex(AI)を呼び出して実行するためのActionです。
つまり、GitHub Actions(仕組み)の中で、Codex Action(AIを動かす部品)を使っている、という関係です。
🤖 GitHub公式(リポジトリREADME):
何ができるか/必要なシークレット(API key)/どうworkflowに組み込むか、がまとまってます。
🧩 全体構成(構成図)
AIコーチの全体の流れは以下です。

🔁 運用フロー(WASSHOI流・改善の回し方)
-
試合 or 練習後に課題を書き出す
- Issueテンプレに沿って、気づいたことをどんどん記録
-
チームで課題を議論する(ここ重要)
- コメント欄で「こうすれば良くなるかも」を自由に交換
- 認識のズレが減り、課題の解像度が上がる
-
課題が固まったら Draft ラベルを外す
- 「もう AI に投げて良い」という合図
- レビュー完了の状態をチームでつくる
-
AI コーチが自動で発動(GitHub Actions)
- 課題 Issue 本文
- 最新の Playbook
を読み込み、110分の練習メニューを自動生成する
-
AIコーチがIssueに練習メニューが自動投稿する
- 課題にフィットした “次の一手” がすぐ手に入る
- 参考動画(YouTube)も付く(あれば)
-
実際の練習で実行する
- AIコーチが示したメニューを試し、改善の方向性を実地検証する
-
結果をログ化(試合ログ / 練習ログ / 課題Issue)
- 何がうまくいったか、何が課題として残ったかを記録する
-
Playbook を更新する(必要なら PR)
- 再現性のある学びは戦術書に追加
- チームの “知識” が Git 上で少しずつ育っていく
-
また 1 に戻る(継続的改善のループ)
- 毎回のログが次の成長につながる
- 仕組みでチームが学習し続けられる状態になる
🧠 AIコーチに渡す材料
- ① 課題Issue本文:いま困っていること(現場の一次情報)
- ② Playbook(docs/playbook.md):チームの方針・共通言語(資産)
これで、毎回 “その場の思いつき” じゃなくて、チーム文脈に沿ったメニューが出やすくなります。
🧾 実装(Workflowの要点だけ)
やっていることはこの3ステップです。
-
Playbook を読み込む
-
Codex Action で「課題 + Playbook → メニュー生成」
-
生成結果を Issue にコメント投稿
AIコーチworkflowのコード
name: Generate Training Menu from 課題 Issue
on:
issues:
types: [unlabeled]
permissions:
contents: read
issues: write
jobs:
generate-training:
if: |
contains(github.event.issue.labels.*.name, '課題') &&
!contains(github.event.issue.labels.*.name, 'draft')
runs-on: ubuntu-latest
steps:
# 必須:リポジトリをチェックアウト
- name: Checkout repository
uses: actions/checkout@v4
# bot 無限ループ防止
- name: Prevent bot loop
if: github.actor == 'github-actions[bot]'
run: exit 0
# 📘 Playbook(docs/playbook.md)を読み込み
- name: Read playbook
id: playbook
run: |
{
echo "content<<EOF"
cat "$GITHUB_WORKSPACE/docs/playbook.md"
echo "EOF"
} >> $GITHUB_OUTPUT
# 🤖 Codex(AIコーチ)で練習メニュー生成
- name: Generate training menu
id: ai
uses: openai/codex-action@v1
with:
openai-api-key: ${{ secrets.OPENAI_API_KEY }}
model: gpt-4o-mini
prompt: |
あなたはバスケットボールのプロコーチであり、戦術分析と練習設計の専門家です。
以下を全て読んだうえで、
**110分の練習メニュー** を Markdown 形式で生成してください。
--------------------------------
【課題 Issue 本文】
${{ github.event.issue.body }}
--------------------------------
【チーム Playbook】
${{ steps.playbook.outputs.content }}
--------------------------------
【あなたが行うこと】
### 1. 課題を正確に解析する
- 優先度「高」の課題に時間を多めに配分する
### 2. 2時間(110分)の練習メニューをMarkdownで作る
- 各課題に対応した具体的な練習ドリルを提示する
- 各ドリルに所要時間をつける(例:15分)
- 全体の合計が110分以内
- メンバーは10〜15人を想定
- 初心者でも理解できる説明にする
- マンツーマンディフェンス強化メニューを1つ以上入れる
- 各練習ごとに「目的(意図)」をつける
### 3. 参考になるYouTube動画(あれば)も紹介する
- 該当する代表的な基礎・戦術解説動画を1〜2本
- 実在する動画のみ紹介し、無理な場合は「なし」とする
### 4. 最後のメッセージは **松岡修造の口調で** 熱く締める
- ポジティブで前向きで、熱量のある一言
- 1〜2行で、チームの士気を爆上げする言葉にする
--------------------------------
【出力フォーマット】
## 🧑🏫 次の練習メニュー(AIコーチ)
### 1. ○○(15分)
- 内容:
- 意図:
...
## 🎥 参考動画
- タイトル
URL
### 🔥 最後に一言
> 情熱のひと言!
# Issueへコメント投稿
- name: Post AI comment
uses: peter-evans/create-or-update-comment@v3
with:
issue-number: ${{ github.event.issue.number }}
body: ${{ steps.ai.outputs.final-message }}
例で見る:課題Issue → 練習メニューが届くまで
1) まず、課題Issueを書く(テンプレに沿って)
### 課題リスト
### 課題1
- タイトル: マンツーマンDFが機能しない時がある
- 詳細: スクリーンをされると自分のマークが誰かわからなくなる。スイッチができない。
- 改善案: スイッチの練習をする
- 頻度: よくある
- シチュエーション: ハーフコートディフェンス時
- 優先度: 中
---
### 課題2
- タイトル: オフェンス時にフリーの選手を作れずチャンスを作れない
- 詳細: オフェンス時の動き方が分からない人が多いため足が止まってしまう。そのためチャンスを作りにくい。
- 改善案: ピックアンドロールを練習すると良い。
- 頻度: よくある
- シチュエーション: ハーフコートオフェンス時
- 優先度: 高
---
### 課題3
- タイトル: シュートが入らない
- 詳細: スリーポイント、ツーポイントシュートの確率が低い。
- 改善案: フォームを確認しながらシュート練習をする。
- 頻度: よくある
- シチュエーション: オフェンスでフリー時
- 優先度: 中
2) 課題が固まったら draft ラベルを外す(ここがトリガー)
- 課題 ラベル:ON(残す)
- draft ラベル:OFF(外す)
3) 数十秒後、AIコーチがIssueにコメントする(自動)
## 🧑🏫 次の練習メニュー(AIコーチ)
### 1. スイッチ練習(15分)
- 内容: マンツーマンディフェンスにおけるスイッチの練習。選手同士でマークの確認を声掛けしながら行う。
- 意図: スクリーン時の理解を深め、スムーズなスイッチを促進する。
### 2. ピックアンドロール練習(25分)
- 内容: ピックアンドロールの基本動作を反復練習。ボールマンとスクリーンをかける選手が協調して動く。実際にボールを使い、ディフェンスも交えた練習。
- 意図: オフェンス時にフリーの選手を作り、チャンスを増やす。
### 3. シュートフォーム確認(20分)
- 内容: 各選手が自身のシュートフォームをチェックし、コーチからのアドバイスを受ける。スリーポイント、ツーポイントそれぞれのシュートを確認。
- 意図: シュート確率を向上させるための基本を固める。
### 4. ミニゲーム1(25分)
- 内容: 5対5のミニゲームを行い、スイッチやピックアンドロールを意識してプレーする。ハーフコートで実施。
- 意図: 実戦形式で習得した技術を試す。
### 5. ミニゲーム2(25分)
- 内容: 5対5のミニゲームを続けて行い、全ての選手に役割を持たせて実施。特にフリーの選手を意識させる。
- 意図: チームプレイを強化し、実際のゲーム環境に慣れる。
## 🎥 参考動画
- **ピックアンドロールの基本**
https://www.youtube.com/shorts/l41eqgX33bQ
### 🔥 最後に一言
> 一つ一つのプレーが君たちの未来を作る!全力でいこうぜ、チーム!
4) 次の練習で回す → 結果をまたログ化する
- 良かった点 / できなかった点を練習ログや試合ログに残す
- 必要なら Playbook(docs/playbook.md)も更新する
- 次の課題Issueへ
これで 「課題 → メニュー → 実行 → 振り返り」 が、Issueを中心に回り続けます。
まとめ
GitHub Actions(自動化の土台)の中に、Codex Action(AIを動かす部品)を組み込み、
課題Issueから練習メニューを自動生成する「AIコーチ」を作りました。
この仕組みは、部活だけじゃなく、プロジェクト運用・勉強会・コミュニティなど
「改善したいあらゆる組織」にそのまま転用できます。
ここまで読んでくれてありがとうございました!
もし「うちでもこういう改善サイクル回したい」みたいな話があれば、ぜひ気軽に声かけてください 🙌
Discussion