From e2f31d2006c7ff839df16e86f50d2a34c5b6d249 Mon Sep 17 00:00:00 2001 From: Zhongwei Li Date: Sat, 29 Nov 2025 18:27:38 +0800 Subject: [PATCH] Initial commit --- .claude-plugin/plugin.json | 15 +++ .mcp.json | 11 +++ README.md | 3 + commands/review-dependabot.md | 167 ++++++++++++++++++++++++++++++++++ commands/review-pr.md | 82 +++++++++++++++++ plugin.lock.json | 53 +++++++++++ 6 files changed, 331 insertions(+) create mode 100644 .claude-plugin/plugin.json create mode 100644 .mcp.json create mode 100644 README.md create mode 100644 commands/review-dependabot.md create mode 100644 commands/review-pr.md create mode 100644 plugin.lock.json diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..652c4f8 --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,15 @@ +{ + "name": "github", + "description": "Use for development on GitHub", + "version": "0.0.1", + "author": { + "name": "fussy113" + }, + "commands": [ + "./commands/review-pr.md", + "./commands/review-dependabot.md" + ], + "mcp": [ + "./.mcp.json" + ] +} \ No newline at end of file diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 0000000..b35c6d0 --- /dev/null +++ b/.mcp.json @@ -0,0 +1,11 @@ +{ + "mcpServers": { + "github": { + "type": "http", + "url": "https://api.githubcopilot.com/mcp/", + "headers": { + "Authorization": "Bearer ${MCP_GITHUB_ACCESS_TOKEN}" + } + } + } +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..e42ba28 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# github + +Use for development on GitHub diff --git a/commands/review-dependabot.md b/commands/review-dependabot.md new file mode 100644 index 0000000..26f598a --- /dev/null +++ b/commands/review-dependabot.md @@ -0,0 +1,167 @@ +# Dependabot PR レビュー + +DependabotによるPRを依存関係更新の観点から包括的にレビューしてください。 + +## 実行手順 + +1. **PR情報の取得** + - `gh pr view $ARGUMENTS` を実行して、PRの基本情報を取得 + - `gh pr diff $ARGUMENTS` を実行して、変更内容の差分を取得 + - PRの作成者がdependabotであることを確認 + +2. **依存関係の更新内容を分析** + 以下の観点で詳細に分析してください: + + ### 更新内容の確認 + - 更新される依存関係の名前 + - 現在のバージョンから更新後のバージョン + - セマンティックバージョニング上の変更種別を判定: + - メジャーバージョンアップ(例: 1.x.x → 2.x.x): Breaking changesの可能性が高い + - マイナーバージョンアップ(例: 1.2.x → 1.3.x): 新機能追加、後方互換性あり + - パッチバージョンアップ(例: 1.2.3 → 1.2.4): バグ修正、後方互換性あり + + ### リリースノートとCHANGELOGの確認 + - 可能であれば、更新される依存関係のリリースノートやCHANGELOGを確認 + - GitHub上でのリリースページを参照(gh CLIやWebSearchを活用) + - 主な変更内容を要約 + + ### Breaking Changesの調査 + - メジャーバージョンアップの場合、Breaking changesの詳細を調査 + - 非推奨APIの削除や変更がないか + - 影響を受ける可能性のある箇所を特定 + - マイグレーションガイドの有無 + + ### セキュリティ脆弱性の確認 + - セキュリティアップデートかどうかを判定 + - CVE番号や脆弱性の詳細があれば記載 + - 深刻度レベル(Critical, High, Medium, Low) + - 影響範囲と緊急度 + + ### 互換性の評価 + - プロジェクトの他の依存関係との互換性 + - Node.js、Python、Rubyなどのランタイムバージョン要件 + - peer dependenciesとの整合性 + - 既存コードへの影響範囲を推定 + + ### テスト結果の確認 + - GitHub Actionsやその他のCIステータスを確認 + - `gh pr checks {PR番号}` を実行してテスト結果を取得 + - 失敗しているテストがあれば原因を調査 + + ### プロジェクトコードへの影響調査 + 更新される依存関係がプロジェクト内でどのように使用されているかを詳細に調査してください: + + 1. **依存関係の使用箇所を特定** + - Grep ツールを使用して、更新されるパッケージのimport/requireステートメントを検索 + - パッケージ名やモジュール名で検索(例: `import ... from 'package-name'`, `require('package-name')`) + - 検索結果から使用しているファイルと行番号をリスト化 + + 2. **APIの使用状況を調査** + - Breaking changesで変更・削除されるAPIがプロジェクト内で使用されているか確認 + - 非推奨となったメソッドやプロパティの使用箇所を検索 + - 具体的なファイルパスと行番号を特定(例: `src/utils/helper.ts:42`) + + 3. **影響範囲の評価** + - 直接的な使用箇所の数を集計 + - 影響を受けるファイルの重要度を評価(コアロジック、ユーティリティ、テストコードなど) + - 変更が必要なコード量を見積もり + + 4. **依存している機能の確認** + - プロジェクトが使用している具体的な機能やメソッドを特定 + - それらの機能が更新後も同様に動作するか評価 + - 代替方法が必要な場合はマイグレーションパスを提示 + + 5. **間接的な影響の調査** + - 更新される依存関係に依存している他のコードを特定 + - 型定義の変更による影響(TypeScriptの場合) + - グローバルな設定やプラグイン設定への影響 + +3. **レビュー結果の出力** + 以下の形式で結果を出力してください: + + ```markdown + # Dependabot PR #{PR番号} レビュー結果 + + ## 📦 更新内容 + - パッケージ名: [package name] + - 現在のバージョン: [current version] + - 更新後のバージョン: [new version] + - 変更種別: [Major/Minor/Patch] + + ## 📋 リリースノート要約 + [主な変更点を箇条書きで記載] + + ## 🔒 セキュリティ情報 + - セキュリティアップデート: [Yes/No] + - CVE番号: [CVE-XXXX-XXXXX または N/A] + - 深刻度: [Critical/High/Medium/Low または N/A] + - 脆弱性の詳細: [説明] + + ## ⚠️ Breaking Changes + [Breaking changesがある場合は詳細を記載、なければ「なし」] + + ## 🔍 互換性チェック + - ランタイム要件: [問題なし / 要確認] + - 他の依存関係との整合性: [問題なし / 要確認] + - 既存コードへの影響: [なし / 軽微 / 中程度 / 大] + + ## ✅ テスト結果 + - CIステータス: [Pass/Fail/Pending] + - 失敗しているテスト: [あれば記載] + + ## 🔎 プロジェクトコードへの影響 + + ### 使用箇所 + [依存関係が使用されているファイルと行番号をリスト化] + - `path/to/file1.ts:15` - [使用方法の簡単な説明] + - `path/to/file2.js:42` - [使用方法の簡単な説明] + + **合計使用箇所**: [N個のファイル] + + ### Breaking Changesの影響 + [変更が必要な箇所を具体的に記載] + - ✅ 影響なし + - または + - ⚠️ `path/to/file.ts:line` - [具体的な変更内容] + + ### 必要な対応 + [コード修正が必要な場合、具体的な対応方法を記載] + - [対応が不要な場合は「なし」] + - [対応が必要な場合は、ファイルごとに必要な変更内容を記載] + + ### 影響度 + - 直接的な影響: [高/中/低] + - 変更の複雑さ: [高/中/低] + - 推定作業時間: [見積もり] + + ## 📝 推奨アクション + + ### 🟢 即座にマージ可能(以下のいずれか) + - パッチバージョンアップで、テストが全て通過 + - セキュリティ修正で、Breaking changesなし + - マイナーバージョンアップで、互換性問題なし + + ### 🟡 注意してマージ(以下の確認後) + - [確認すべき事項をリスト化] + + ### 🔴 マージ前に対応が必要 + - [必要な対応をリスト化] + + ## 💡 その他の推奨事項 + - [追加の提案があれば記載] + + ## 📊 総合評価 + **マージ推奨度**: [⭐⭐⭐⭐⭐ (5段階)] + + [総合的な判断理由を記述] + ``` + +## 注意事項 +- Dependabotのコミットメッセージには有用な情報が含まれているため必ず確認すること +- セキュリティアップデートは優先的にマージを検討すること +- メジャーバージョンアップの場合は慎重に評価すること +- テストが失敗している場合は原因を特定すること +- 複数の依存関係が同時に更新される場合は、それぞれについて評価すること +- プロジェクトコードへの影響調査は必須で実施すること。Grepツールを活用してimport/requireステートメントを検索すること +- Breaking changesがある場合は、影響を受けるコードの具体的な修正方法を提示すること +- 使用箇所が多い場合や影響が大きい場合は、段階的な移行計画を提案すること diff --git a/commands/review-pr.md b/commands/review-pr.md new file mode 100644 index 0000000..6ec68e3 --- /dev/null +++ b/commands/review-pr.md @@ -0,0 +1,82 @@ +# GitHub PR レビュー + +指定されたPR番号のプルリクエストを包括的にレビューしてください。 + +## 実行手順 + +1. **PR情報の取得** + - `gh pr view $ARGUMENTS` を実行して、PRの基本情報(タイトル、説明、ステータス、変更ファイル数など)を取得 + - `gh pr diff $ARGUMENTS` を実行して、変更内容の差分を取得 + +2. **コード分析** + 以下の観点で詳細に分析してください: + + ### コード品質 + - 可読性: コードが理解しやすいか、適切なコメントがあるか + - 保守性: 将来の変更や拡張が容易か + - 命名規則: 変数名、関数名、クラス名が適切か + - コードの重複: DRY原則に従っているか + - 関数やクラスの責務: 単一責任の原則に従っているか + + ### セキュリティ + - 認証・認可の適切な実装 + - 入力値の検証とサニタイゼーション + - 機密情報(パスワード、APIキーなど)のハードコーディング + - SQLインジェクション、XSSなどの脆弱性 + - 安全でない依存関係の使用 + + ### バグの可能性 + - 論理エラーや条件分岐の問題 + - エッジケースの処理 + - null/undefined参照の可能性 + - エラーハンドリングの適切さ + - 非同期処理の正しい扱い + - リソースリーク(メモリ、ファイルハンドルなど) + + ### テストカバレッジ + - テストコードの有無 + - テストケースの網羅性 + - 重要な機能に対するテストの存在 + - エッジケースのテストカバレッジ + +3. **レビュー結果の出力** + 以下の形式で結果を出力してください: + + ```markdown + # PR #{PR番号} レビュー結果 + + ## 📊 概要 + - タイトル: [PR title] + - 変更ファイル数: [数] + - 追加行数: [数] + - 削除行数: [数] + + ## ✅ 良い点 + - [具体的な良い点を列挙] + + ## ⚠️ 改善提案 + + ### 🔴 重要度: 高 + - [重大な問題や必須の修正事項] + + ### 🟡 重要度: 中 + - [改善が望ましい項目] + + ### 🟢 重要度: 低 + - [マイナーな提案や最適化] + + ## 🔒 セキュリティチェック + - [セキュリティに関する指摘] + + ## 🧪 テストに関する所見 + - [テストカバレッジや品質についての指摘] + + ## 📝 総評 + [総合的な評価とマージ可否についての判断] + ``` + +## 注意事項 +- レビューは建設的かつ具体的に行うこと +- 問題を指摘する際は、改善案も提示すること +- ファイルパスと行番号を明記すること(例: `src/main.js:42`) +- 重要度に応じて優先順位をつけること diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..88580ab --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,53 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:fussy113/claude-code-marketplace:plugins/github", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "efaa6d6cc8504574e09e18b58524b5964f85940b", + "treeHash": "e3f042ee02364fcbcda7528724b1d1e752bd0ba2f7774e4395e464c95f05114a", + "generatedAt": "2025-11-28T10:16:55.968259Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "github", + "description": "Use for development on GitHub", + "version": "0.0.1" + }, + "content": { + "files": [ + { + "path": ".mcp.json", + "sha256": "93ed65402e95e2fb0e5bd45583318849c979b756ac1781fb4313c094fc186e5b" + }, + { + "path": "README.md", + "sha256": "d6c664cd22e8fb6636084176f8b214738635c981b0f36a5a3a5f3ee42ca3dfc5" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "6c7eaf48598d8d5adbe0c054fc04aa6041ff1e1c1180b0c0066178d70f76eac1" + }, + { + "path": "commands/review-dependabot.md", + "sha256": "f54210996e74f195f36851f1dc5e13a53621d50a1d216c16471936251f0df38d" + }, + { + "path": "commands/review-pr.md", + "sha256": "b829f393e8c07b2660f47e4982fd126f2ae8e9eebc8852538a014e3d89f4a9aa" + } + ], + "dirSha256": "e3f042ee02364fcbcda7528724b1d1e752bd0ba2f7774e4395e464c95f05114a" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file