ba-bot 利用ガイド

Slackから話しかけるだけで、Asanaへの起票・コードの実装とPR作成・PRレビューと指摘の反映までを行う開発支援ボットです。

はじめに

操作方法は2種類です。

メンション

@ba-bot に続けて日本語で書きます。起票・実装・レビューなど、日々の作業はこちらです。

@ba-bot #1218055953831941 を実装して

スラッシュコマンド

メッセージの先頭で / から入力します(@ba-bot は付けません)。設定まわりに使います。

/ba-status

使い始めるには ①チャンネルにボットを招待(/invite @ba-bot)→ ②/ba-link でリポジトリとAsanaを紐付け → ③ /ba-status で確認、の3ステップです。

スラッシュコマンド

チャンネルとリポジトリ/Asanaの紐付けを管理します。メッセージ欄の先頭で直接入力してください。

/ba-status

このチャンネルの紐付けを一覧表示します。

書式/ba-status

このチャンネルに登録されている「GitHubリポジトリ ↔ Asanaプロジェクト(またはセクション)」の組み合わせを表示します。

別名・Asanaの対象範囲・既定かどうかが分かります。まず状況を確認したいときに使ってください。

送信/ba-status
返信
このチャンネルの紐付け(3件)
[leclub] retbit/chick-leclub-web — Asana 1210280474134969 / セクション 1210280474242427
[chick] retbit/chick-web — Asana 1210280474134969 / セクション 1210280474134986 ・既定
[suite] retbit/roppongisuite-web — Asana 1210280474134969 / セクション 1210280474242426
  • 未登録のチャンネルでは「未登録です」と案内が返ります。

/ba-sections

Asanaプロジェクト内のセクションとIDを一覧します。

書式/ba-sections <AsanaプロジェクトID>

1つのAsanaプロジェクトをセクションで分けて複数リポジトリを運用する場合に、紐付けで指定するセクションIDを調べるために使います。

結果はそのまま /ba-link の第2引数に貼り付けられる形(プロジェクトID/セクションID)で表示されます。

AsanaプロジェクトのURLをそのまま貼っても構いません。

送信/ba-sections 1210280474134969
返信
プロジェクト 1210280474134969 のセクション(5件)
• 無題のセクション — 1210280474134969/1210280474134970
• 店舗&リクルートサイト — 1210280474134969/1210280474134986
• SUITE — 1210280474134969/1210280474242426
• ルクラ — 1210280474134969/1210280474242427
• インフラ改善 — 1210280474134969/1210410213934363

/ba-default

対象を特定できないときに使う「既定」の紐付けを切り替えます。

書式/ba-default <リポURL または別名>

既定が使われるのは「調査・質問」のときだけです。

起票・実装・修正・一括削除は、対象が確定しない限り既定にフォールバックせず、候補を提示して聞き返します。誤ったリポジトリにPRを作ったり、別のセクションにチケットを溜めたりしないための仕様です。

送信/ba-default chick
返信
✅ 既定を [chick] retbit/chick-web にしました。

メンションコマンド

@ba-bot に続けて日本語で依頼します。決まった言い回しである必要はありません。

チケットを作る

依頼内容から Asana にチケットを作成します。

書式@ba-bot [別名] <依頼内容>のチケットを作って

依頼文がそのままチケットのタイトルになり、本文は登録済みのテンプレート(概要・背景・受入基準)に沿って整形されます。

複数の紐付けがあるチャンネルでは、起票は手掛かりが無いため対象を自動判別できません。[別名] を付けて、どのプロジェクトに作るか指定してください。

セクション単位で紐付けている場合は、そのセクションに入った状態で作成されます。

送信@ba-bot [chick] トップページの表示を改善するチケットを作って
返信
✅ チケットを作成しました([chick] retbit/chick-web): https://app.asana.com/...
送信@ba-bot トップページの表示を改善するチケットを作って
返信
このチャンネルには 3 件の紐付けがあり、対象を特定できませんでした。別名を付けて送り直してください:
[leclub] — retbit/chick-leclub-web …

別名が無い場合は作成せず聞き返します

  • タイトルには依頼文がそのまま入るため、「〜のチケットを作って」の部分も含まれます。気になる場合は作成後にタイトルを変更してください。

チケットを一覧する

紐付いた全ての範囲のチケットを、範囲ごとに区切って表示します。

書式@ba-bot [別名] チケット一覧

別名を付けなければ、このチャンネルに紐付いた全てのプロジェクト/セクションを横断して表示します。

「未完了」「完了済み」といった語を含めると、その状態だけに絞り込めます。

送信@ba-bot チケット一覧

紐付いた全範囲をプロジェクト/セクション別に表示

送信@ba-bot [chick] チケット一覧

chick のセクションだけに絞る

送信@ba-bot 未完了のチケット一覧

未完了のみ

チケットの内容を見る

指定したチケットのタイトル・本文・状態を表示します。

書式@ba-bot #<タスク番号> の詳細

タスク番号(gid)だけで特定できるため、別名の指定は不要です。

送信@ba-bot #1218055953831941 の詳細
返信
READMEの拡充 (未完了)
## 概要 …
https://app.asana.com/...

チケットを更新する

完了・未完了の切り替え、タイトル・本文の変更ができます。

書式@ba-bot #<タスク番号> を完了にして / のタイトルを「〜」に

タイトルや本文を変更する場合は、新しい内容を「かぎかっこ」で囲んでください。

細かい編集は Asana の画面で行うほうが確実です。

送信@ba-bot #1218055953831941 を完了にして
送信@ba-bot #1218055953831941 を未完了に戻して
送信@ba-bot #1218055953831941 のタイトルを「READMEの拡充」に
送信@ba-bot #1218055953831941 の本文を「セットアップ手順を追記する」に

チケットを削除する 取り消しに注意

1件ずつ、または条件を指定してまとめて削除します。

書式@ba-bot #<タスク番号> を削除して / [別名] 未完了のチケットを一括削除

1件だけの削除は、タスク番号を指定すればすぐ実行されます。

まとめて削除する場合は、いきなり消さずに対象一覧を提示して確認します。本当に削除するときだけ「確定」を付けて送り直してください。

一括削除は範囲を横断しません。セクション単位で紐付けている場合、削除されるのはそのセクション内のチケットだけです。対象が確定しない場合は実行せず候補を提示します。

Asana の削除はゴミ箱への移動なので、一定期間は復元できます。

送信@ba-bot #1218055953831941 を削除して

1件だけ削除(即実行)

送信@ba-bot [chick] 未完了のチケットを一括削除
返信
⚠️ [chick] retbit/chick-web(セクション 1210280474134986 内) の「未完了」のチケット *12件* を削除しようとしています。…
本当に全部消してよければ、次を送ってください:
@ba-bot [chick] 未完了のチケットを一括削除 確定

この時点ではまだ削除されていません

送信@ba-bot [chick] 未完了のチケットを一括削除 確定

ここで実際に削除されます

実装して PR を作る 時間がかかります

Asanaタスクの内容を読み、コードを実装して Pull Request を作成します。

書式@ba-bot [別名] #<タスク番号> を実装して

対象リポジトリを取得し、Claude が実際にファイルを編集して、新しいブランチに Pull Request を作成します。

対象リポジトリは、タスクが属するAsanaのセクション(またはプロジェクト)から自動で判別されます。通常は別名の指定は不要です。

変更が1つも生成されなかった場合は、PRを作らずにその旨を返します。タスクの説明が具体的なほど結果が良くなります。

main ブランチへ直接 push することはありません。PR のマージは人が行います。

送信@ba-bot #1218055953831941 を実装して
返信
✅ 実装が完了しPRを作成しました: https://github.com/retbit/chick-leclub-web/pull/15

別名なしでも、タスクの所属セクションから対象リポジトリが決まります

送信@ba-bot [suite] #1218055953831941 を実装して

対象を明示する場合

  • リポジトリの取得と実装のため、完了まで数分かかることがあります。
  • 対象が特定できない場合は実行せず、候補を提示して聞き返します。

バグを修正して PR を作る 時間がかかります

バグ報告のタスクを読み、原因を特定して修正の Pull Request を作成します。

書式@ba-bot [別名] #<タスク番号> を修正して

流れは「実装」と同じですが、原因の特定と最小限の変更を優先し、可能であれば再発防止のテストも追加します。

送信@ba-bot #1218055953831941 のバグを直して

PR をレビューする 時間がかかります

Pull Request の差分をレビューし、PRにコメントを投稿します。

書式@ba-bot レビューして <PRのURL>

バグ・設計・可読性・テストの観点で指摘し、それぞれに重大度(高/中/低)を付けます。

結果は GitHub の PR にコメントとして投稿され、同じ内容が Slack にも返ります。

PRのURLを貼れば対象リポジトリが確定するため、別名の指定は不要です。

送信@ba-bot レビューして https://github.com/retbit/chick-leclub-web/pull/15
返信
✅ レビューを投稿しました: https://github.com/.../pull/15#issuecomment-...
  • 差分が非常に大きいPRは、先頭部分のみが対象になります。

レビュー指摘を PR に反映する 時間がかかります

レビューで出た指摘を、同じ Pull Request に反映します。

書式@ba-bot PR#<番号> のレビュー指摘を修正して

対象PRのブランチに直接コミットを積むため、新しいPRは作られず、そのPRが更新されます。レビュー → 修正 → 再レビューが1つのPRの中で完結します。

PRに付いているコメント(レビュー本文・ファイル単位のインラインコメント)を読み取り、その内容に基づいて修正します。

依頼文で対象を絞ることもできます(例:「パスワード例の指摘だけ修正して」)。

送信@ba-bot PR#15 のレビュー指摘を修正して
返信
✅ PR #15 に修正を反映しました(ba-bot/asana-… を更新): …
送信@ba-bot PR#15 のパスワード例の指摘だけ修正して

反映する指摘を絞り込む場合

  • マージ済み・クローズ済みのPRには反映できません。
  • フォークから作られたPRには反映できません(push 権限が無いため)。

質問する・調べてもらう 時間がかかります

上記のどれにも当てはまらない依頼は、質問・調査として扱われます。

書式@ba-bot [別名] <質問>

対象リポジトリを取得したうえで実際のコードを読み、紐付いたAsanaのタスク一覧も踏まえて回答します。推測ではなく実データに基づいて答えます。

PRのURLを含めれば、そのPRの説明や差分も踏まえて回答します。

「〜できますか?」のような質問で、勝手に実行されることはありません。

送信@ba-bot [chick] このプロジェクトの構成を教えて
送信@ba-bot [chick] 未完了のタスクを見て、着手しやすい順に並べて理由を教えて
送信@ba-bot このチャンネルではどのリポジトリを扱えますか?
  • コードを取得するのは1リポジトリだけです。別のリポジトリについて聞くときは [別名] を付けてください。

対象の決まり方

1つのチャンネルに複数のリポジトリを紐付けられます。ボットは次の優先順で「どのリポジトリ宛てか」を判断します。

優先手掛かり説明
1PRのURLメッセージにPRのURLがあれば、そのリポジトリが対象になります。@ba-bot レビューして https://github.com/retbit/chick-web/pull/8
2別名の指定[chick] のように角かっこで対象を明示します。@ba-bot [chick] #1218055953831941 を実装して
3Asanaタスクの所属タスク番号があれば、そのタスクが属するセクション(無ければプロジェクト)から対象リポジトリを逆引きします。*普段はこれで自動的に決まります。@ba-bot #1218055953831941 を実装して
4紐付けが1件だけそのチャンネルに紐付けが1件しか無ければ、それが対象になります。
5既定の紐付け上記で決まらない場合の最後の手段。*「調査・質問」でのみ使われます。@ba-bot このプロジェクトを説明して

ふだんは意識しなくて構いません。 タスク番号を書けば、そのタスクがどのセクションにあるかから対象リポジトリが自動で決まります。 決められない場合だけ、ボットが候補を出して聞き返します。

安全のための仕様

  • 対象が確定しないと実行しません。 起票・実装・修正・一括削除は、対象リポジトリが1つに決まらない限り実行せず、候補を提示して聞き返します。
  • 一括削除は必ず確認を挟みます。 対象一覧を提示して停止し、「確定」を送ったときだけ実行します。削除はAsanaのゴミ箱への移動なので一定期間は復元できます。
  • 範囲を横断しません。 セクション単位で紐付けている場合、一覧・起票・一括削除の対象はそのセクション内だけです。
  • main ブランチへ直接 push しません。 ボットは作業ブランチにのみ push し、PRを作成します。マージは人が行います。
  • 質問で勝手に実行されません。 「〜できますか?」のような質問は、調査として扱われます。

よくある質問

「対象を特定できませんでした」と候補一覧が返ってきます

複数の紐付けがあるチャンネルで、対象を判断する手掛かりが無い場合です。[別名] を先頭に付けて送り直してください(例: @ba-bot [chick] …)。タスク番号を含む依頼であれば、通常は自動で判別されます。

タスク番号はどこで確認できますか

Asanaのタスク画面のURL末尾にある長い数字(gid)です。@ba-bot チケット一覧 の結果に表示される (#…) からもコピーできます。短い連番での指定には対応していません。

「対象リポジトリが未登録です」と返ります

そのチャンネルに紐付けがありません。/ba-link で登録してください。登録済みかどうかは /ba-status で確認できます。

コマンドが「not a valid command」になります

Slackアプリ側にコマンドが登録されていない可能性があります。管理者に登録・再インストールを依頼してください。

PRが作られません/エラーになります

対象リポジトリに ba-bot の GitHub App が入っているかを確認してください。また、タスクの説明が曖昧だと「変更が生成されませんでした」と返ることがあります。

ボットが応答しません

そのチャンネルにボットが招待されているか(/invite @ba-bot)、およびチャンネルが許可リストに入っているかを管理者に確認してください。

間違えて削除してしまいました

Asanaの削除はゴミ箱への移動なので、一定期間は Asana の画面から復元できます。

用語

タスク番号(gid)
Asanaがタスクに割り当てる長い数字。例: 1218055953831941。タスクのURL末尾にあります。
別名(エイリアス)
Slackで対象リポジトリを指定するための短い名前。例: [chick]。省略時はリポジトリ名が使われます。
セクション
Asanaプロジェクト内の区分け。1つのプロジェクトを複数リポジトリで共有する場合、セクション単位で紐付けます。
既定
チャンネル内で対象を特定できないときに使う紐付け。使われるのは「調査・質問」のみです。