PRレビュー + CI自動修正 (PR Review + CI Auto-Fix)
Composio CLIを利用して、シェルからGitHub/GitLabのPRレビューとCIトリアージを実行します。ブラウザ、ターミナル、チャットの間でタブを切り替える必要はありません。
いつ使うか
- PRに対して構造化されたレビュー(正確性、スタイル、リスク)とインラインコメントが必要なとき。
- CIが失敗しており、エージェントにログを読ませ、コードを修正し、再チェックさせたいとき。
- 差分取得 → 批評 → 修正 → プッシュ → 再実行 のサイクルを一つのコマンドで実行したいとき。
前提条件
curl -fsSL https://composio.dev/install | bash
composio login
composio link github # または: composio link gitlab
非対話実行に必要な環境変数(任意): COMPOSIO_API_KEY
コアツールキット
スラッグを検索して見つけ、再利用のために固定します:
composio search "list pull request files" --toolkits github
composio search "download workflow logs" --toolkits github
composio search "create pr comment" --toolkits gitlab
よく使うスラッグ:
GITHUB_GET_A_PULL_REQUESTGITHUB_LIST_PULL_REQUESTS_FILESGITHUB_CREATE_A_REVIEW_FOR_A_PULL_REQUESTGITHUB_LIST_WORKFLOW_RUNS_FOR_A_REPOSITORYGITHUB_DOWNLOAD_WORKFLOW_RUN_LOGSGITLAB_GET_SINGLE_MERGE_REQUESTGITLAB_LIST_MERGE_REQUEST_DISCUSSIONSGITLAB_CREATE_NEW_MERGE_REQUEST_NOTE
初回使用前に、必ず composio execute <SLUG> --get-schema でスキーマを確認してください。
レビューワークフロー
- PRのメタデータと差分を取得:
composio execute GITHUB_GET_A_PULL_REQUEST \ -d '{"owner":"acme","repo":"app","pull_number":482}' composio execute GITHUB_LIST_PULL_REQUESTS_FILES \ -d '{"owner":"acme","repo":"app","pull_number":482}' - リスク領域を要約(認可、マイグレーション、パブリックAPI、テストなど)してレビュー本文にまとめます。
- インラインコメント付きでレビューを投稿:
composio execute GITHUB_CREATE_A_REVIEW_FOR_A_PULL_REQUEST -d '{ "owner":"acme","repo":"app","pull_number":482, "event":"COMMENT", "body":"全体的にLGTMですが、2つのブロッキング指摘があります。", "comments":[ {"path":"src/auth.ts","line":42,"body":"セッションのnullチェックが不足しています"}, {"path":"src/auth.ts","line":88,"body":"トークンTTLがハードコードされています。設定ファイルに移動してください"} ] }'
CI自動修正ループ
- 失敗している実行を見つける:
composio execute GITHUB_LIST_WORKFLOW_RUNS_FOR_A_REPOSITORY \ -d '{"owner":"acme","repo":"app","branch":"feat/billing","status":"failure"}' - ログを取得:
composio execute GITHUB_DOWNLOAD_WORKFLOW_RUN_LOGS \ -d '{"owner":"acme","repo":"app","run_id":123456}' - 失敗を解析 → ローカルに修正を適用(エージェントがワーキングツリーに修正を書き込みます)。
- ローカルの
gitでコミット&プッシュし、conclusion=successになるまでステップ1を再実行します。 - PRコメントを投稿して、各修正コミットの内容を説明し、人間のレビュアーが何が変わったかを確認できるようにします。
ワンショットワークフローファイル
scripts/review-and-fix.ts として保存し、composio run --file ./scripts/review-and-fix.ts -- --pr 482 で実行します:
const pr = process.argv.includes("--pr")
? Number(process.argv[process.argv.indexOf("--pr") + 1])
: null;
const meta = await execute("GITHUB_GET_A_PULL_REQUEST", {
owner: "acme", repo: "app", pull_number: pr
});
const files = await execute("GITHUB_LIST_PULL_REQUESTS_FILES", {
owner: "acme", repo: "app", pull_number: pr
});
console.log(JSON.stringify({ meta, files }, null, 2));
GitLab版
スラッグとパラメータ名を入れ替えます:
composio execute GITLAB_GET_SINGLE_MERGE_REQUEST \
-d '{"id":"acme/app","merge_request_iid":482}'
composio execute GITLAB_CREATE_NEW_MERGE_REQUEST_NOTE \
-d '{"id":"acme/app","merge_request_iid":482,"body":"CI修正をコミットdeadbeefとしてプッシュしました"}'
トラブルシューティング
Connection required for github→composio link github- Unknown input shape →
composio execute <SLUG> --get-schema - Log download huge →
composio proxyで生APIをストリーミングし、ローカルでgrep - Rate limits → 呼び出しを直列化するか、ポーリング頻度を下げる。同じリポジトリで
--parallelは避ける
CLIリファレンス全文: docs.composio.dev/docs/cli