feat: Add Agent Skills and GitHub Actions Integration#9
Conversation
- 7つのspec-kitコマンドを統合したSkillを作成 - Specify, Clarify, Plan, Tasks, Implement, Analyze, Constitutionの全ワークフローを提供 - .specify/ディレクトリとの連携方法を明記 - TDDワークフローとの統合を説明
- 体系的なコードレビュープロセスを提供 - レビュー観点チェックリスト(品質、セキュリティ、パフォーマンス、テスト、ドキュメント) - レビューコメントのベストプラクティス - 自動化ツールの活用方法 - 言語別のレビューポイント
- 効率的なデバッグプロセスを提供 - 7ステップのデバッグフロー(再現、情報収集、仮説立案、検証、修正、テスト、ドキュメント化) - デバッグテクニック(ラバーダック、バイナリサーチ、プリントデバッグ) - 言語別のデバッグツール紹介
- 安全で効果的なリファクタリングプロセスを提供 - テストファーストリファクタリングの原則 - コードスメルの特定(長いメソッド、重複コード、大きなクラス等) - リファクタリングパターン(メソッド抽出、変数抽出等) - 小さなステップでの安全な変更手順
- 継続的なドキュメントメンテナンスのガイド - ドキュメントの種類(README、API、CHANGELOG、CONTRIBUTING、ADR) - ドキュメント作成のベストプラクティス - コードコメントのベストプラクティス - ドキュメント生成ツールと自動化
- コマンドディレクトリを削除 - スマートフォン/GitHub ActionsのCronから起動するため不要 - すべての機能はAgent Skillsに移行済み
- Agent Skillsセクションに4つの新規Skillsを追加 - code-review-workflow - debugging-workflow - refactoring-workflow - documentation-maintenance - コマンドセクションを削除 - ドキュメント参照をCOMMANDS.mdからSKILLS.mdに更新 - ディレクトリ構造を更新(commands削除、skills追加)
- COMMANDS.mdを削除(古いコマンド構成を参照) - SKILLS.mdを作成 - 10個のAgent Skillsの詳細ガイド - 各Skillのトリガー条件と主な内容 - Skills間の連携 - GitHub Actions統合
- 不要なMCPサーバを削除(sequential-thinking、playwright、serena、docs-rs) - 必要なMCPサーバのみを保持(context7、magic、github) - 設定ファイルサイズを約56%削減
- TDD基礎概念とワークフローを提供 - Red-Green-Refactorサイクルの説明 - 言語非依存のTDDベストプラクティス - テスト戦略とカバレッジ目標
- Jest/Playwrightを使用したテスト実装 - 単体テスト・統合テスト・E2Eテストの設定 - モックとカバレッジ測定 - TypeScript/JavaScriptテストのベストプラクティス
- cargo test/nextestを使用したテスト実装 - mockallによるモック - cargo-llvm-covによるカバレッジ測定 - Rustテストのベストプラクティス
- GitHub Actionsを使用したCI/CDパイプライン - ghatsによる型安全なワークフロー定義 - テスト自動化とデプロイメント戦略 - セキュリティとパフォーマンス最適化
- 最新ライブラリ情報の調査と比較 - Context7 MCPを活用した情報収集 - ライブラリ評価とドキュメント化 - 調査結果のテンプレート
- ANTHROPIC_CUSTOM_HEADERSを追加 - code-execution-2025-08-25: コード実行(スキルに必須) - skills-2025-10-02: Skills API - files-api-2025-04-14: ファイルアップロード/ダウンロード
- load-skills.shスクリプト参照を削除 - skills-content.md参照を削除 - Agent SkillsはANTHROPIC_CUSTOM_HEADERSで有効化 - プロンプトをシンプル化
- .serenaディレクトリを削除 - MCP設定で既に削除済みのため不要
Summary of ChangesHello @UtakataKyosui, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! このプルリクエストは、開発ワークフローを大幅に強化するために、Agent Skillsの導入とGitHub Actionsとの統合に焦点を当てています。これにより、開発者はTDD、テスト、CI/CD、コードレビュー、デバッグ、リファクタリング、ドキュメント管理などのプロセスにおいて、より構造化されたガイダンスと自動化の恩恵を受けることができます。以前のコマンドベースのアプローチから、より包括的なスキルベースのシステムへの移行は、開発効率とコード品質の向上を目指しています。 Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Ignored Files
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
このプルリクエストは、既存の「コマンド」ベースのシステムを、より体系的な「Agent Skills」に置き換える大規模なリファクタリングです。10個の新しいSkillが追加され、それらがGitHub Actionsと統合されています。全体として、プロジェクトの構造がより明確になり、保守性が向上している素晴らしい変更です。
いくつかのドキュメントの不整合と、新しく追加されたスクリプトのバグを指摘しました。特に、テスト実行スクリプトのコマンド構築ロジックは修正が必要です。これらの点を修正することで、より堅牢なシステムになるでしょう。
- docs: fix Agent Skills count (5 -> 10) in CLAUDE.md and README.md - fix(testing-typescript): use array-based command construction, remove eval - fix(testing-rust): use array-based command construction, remove eval - fix(testing-rust): improve --watch and --coverage conflict warning Resolves Gemini Code Assist review comments on PR #9
|
/gemini review |
There was a problem hiding this comment.
Code Review
このプルリクエストは、コマンドベースのシステムから、より構造化され保守性の高いスキルベースのシステムへと移行する、重要かつ肯定的なアーキテクチャの変更を導入しています。TDDからCI/CD、リファクタリングまで、開発ライフサイクルの様々な側面をカバーする10個のよく文書化されたスキルが追加されたことは、素晴らしい改善です。古いコマンドファイルのクリーンアップやMCP設定の最適化も、よりクリーンなプロジェクト構造に貢献しています。
レビューの結果、主にドキュメントの一貫性やスクリプトの保守性に関するいくつかの軽微な問題を特定しました。具体的には、ドキュメントに記載されているスキル数の不一致、テストスクリプトの重複、スキルガイド内のリンク切れ、シェルスクリプトにおける依存関係チェックの欠落などです。これらの点を修正することで、この素晴らしい貢献の品質がさらに向上するでしょう。
全体として、これはプロジェクトの構造と開発者体験を大幅に改善する、見事に実行されたリファクタリングです。
| if command -v jq &> /dev/null; then | ||
| COVERAGE=$(jq '.total.lines.pct' coverage/coverage-summary.json) | ||
| echo -e "${GREEN}カバレッジ: ${COVERAGE}%${NC}" | ||
|
|
||
| if (( $(echo "$COVERAGE < 80" | bc -l) )); then | ||
| echo -e "${YELLOW}⚠ カバレッジが目標(80%)を下回っています${NC}" | ||
| WARNINGS=$((WARNINGS + 1)) | ||
| else | ||
| echo -e "${GREEN}✓ カバレッジ目標を達成${NC}" | ||
| fi | ||
| else | ||
| echo -e "${YELLOW}⚠ jqがインストールされていません${NC}" | ||
| WARNINGS=$((WARNINGS + 1)) | ||
| fi |
There was a problem hiding this comment.
カバレッジ率の比較にbcコマンドを使用していますが、スクリプト内でbcがインストールされているかのチェックが行われていません。実行環境にbcがない場合、スクリプトがエラーで失敗する可能性があります。jqの存在チェックと同様に、bcの存在チェックを追加し、ない場合は警告を出してスキップするなどのフォールバック処理を実装することを推奨します。
| if command -v jq &> /dev/null; then | |
| COVERAGE=$(jq '.total.lines.pct' coverage/coverage-summary.json) | |
| echo -e "${GREEN}カバレッジ: ${COVERAGE}%${NC}" | |
| if (( $(echo "$COVERAGE < 80" | bc -l) )); then | |
| echo -e "${YELLOW}⚠ カバレッジが目標(80%)を下回っています${NC}" | |
| WARNINGS=$((WARNINGS + 1)) | |
| else | |
| echo -e "${GREEN}✓ カバレッジ目標を達成${NC}" | |
| fi | |
| else | |
| echo -e "${YELLOW}⚠ jqがインストールされていません${NC}" | |
| WARNINGS=$((WARNINGS + 1)) | |
| fi | |
| if command -v jq &> /dev/null && command -v bc &> /dev/null; then | |
| COVERAGE=$(jq '.total.lines.pct' coverage/coverage-summary.json) | |
| echo -e "${GREEN}カバレッジ: ${COVERAGE}%${NC}" | |
| if (( $(echo "$COVERAGE < 80" | bc -l) )); then | |
| echo -e "${YELLOW}⚠ カバレッジが目標(80%)を下回っています${NC}" | |
| WARNINGS=$((WARNINGS + 1)) | |
| else | |
| echo -e "${GREEN}✓ カバレッジ目標を達成${NC}" | |
| fi | |
| else | |
| echo -e "${YELLOW}⚠ jqまたはbcがインストールされていません。カバレッジチェックをスキップします。${NC}" | |
| WARNINGS=$((WARNINGS + 1)) | |
| fi |
| #!/bin/bash | ||
| # テスト実行スクリプト | ||
| # プロジェクトタイプを自動検出してテストを実行 | ||
|
|
||
| set -e | ||
|
|
||
| # カラー出力 | ||
| RED='\033[0;31m' | ||
| GREEN='\033[0;32m' | ||
| YELLOW='\033[1;33m' | ||
| NC='\033[0m' # No Color | ||
|
|
||
| # 使用方法 | ||
| usage() { | ||
| echo "Usage: $0 [OPTIONS]" | ||
| echo "" | ||
| echo "Options:" | ||
| echo " --coverage カバレッジレポートを生成" | ||
| echo " --watch ウォッチモードで実行" | ||
| echo " --help このヘルプを表示" | ||
| exit 1 | ||
| } | ||
|
|
||
| # オプション解析 | ||
| COVERAGE=false | ||
| WATCH=false | ||
|
|
||
| while [[ $# -gt 0 ]]; do | ||
| case $1 in | ||
| --coverage) | ||
| COVERAGE=true | ||
| shift | ||
| ;; | ||
| --watch) | ||
| WATCH=true | ||
| shift | ||
| ;; | ||
| --help) | ||
| usage | ||
| ;; | ||
| *) | ||
| echo -e "${RED}Unknown option: $1${NC}" | ||
| usage | ||
| ;; | ||
| esac | ||
| done | ||
|
|
||
| echo -e "${GREEN}🧪 テスト実行スクリプト${NC}" | ||
| echo "" | ||
|
|
||
| # プロジェクトタイプの検出 | ||
| detect_project_type() { | ||
| if [ -f "package.json" ]; then | ||
| echo "typescript" | ||
| elif [ -f "Cargo.toml" ]; then | ||
| echo "rust" | ||
| else | ||
| echo -e "${RED}❌ サポートされていないプロジェクトタイプです${NC}" | ||
| echo "package.json または Cargo.toml が見つかりません" | ||
| exit 1 | ||
| fi | ||
| } | ||
| # TypeScript/JavaScript テスト実行 | ||
| run_typescript_tests() { | ||
| echo -e "${YELLOW}📦 TypeScript/JavaScript プロジェクトを検出${NC}" | ||
|
|
||
| # テストフレームワークの検出 | ||
| if grep -q "jest" package.json; then | ||
| FRAMEWORK="jest" | ||
| elif grep -q "@playwright/test" package.json; then | ||
| FRAMEWORK="playwright" | ||
| else | ||
| echo -e "${RED}❌ テストフレームワークが見つかりません${NC}" | ||
| echo "package.json に jest または @playwright/test を追加してください" | ||
| exit 1 | ||
| fi | ||
|
|
||
| echo -e "${GREEN}✓ テストフレームワーク: $FRAMEWORK${NC}" | ||
|
|
||
| # オプションに応じてコマンドを構築 | ||
| local cmd | ||
| local args=() | ||
| if [ "$FRAMEWORK" = "jest" ]; then | ||
| cmd="npm" | ||
| args+=("test") | ||
| if [ "$WATCH" = true ] || [ "$COVERAGE" = true ]; then | ||
| args+=("--") | ||
| fi | ||
| if [ "$WATCH" = true ]; then | ||
| args+=("--watch") | ||
| fi | ||
| if [ "$COVERAGE" = true ]; then | ||
| args+=("--coverage") | ||
| fi | ||
| elif [ "$FRAMEWORK" = "playwright" ]; then | ||
| cmd="npx" | ||
| args+=("playwright" "test") | ||
| if [ "$WATCH" = true ]; then | ||
| args+=("--ui") | ||
| fi | ||
| if [ "$COVERAGE" = true ]; then | ||
| echo -e "${YELLOW}⚠ Playwrightはカバレッジオプションをサポートしていません${NC}" | ||
| fi | ||
| fi | ||
|
|
||
| echo -e "${YELLOW}実行コマンド: $cmd ${args[*]}${NC}" | ||
| echo "" | ||
|
|
||
| # テスト実行 | ||
| "$cmd" "${args[@]}" | ||
|
|
||
| if [ $? -eq 0 ]; then | ||
| echo "" | ||
| echo -e "${GREEN}✅ すべてのテストがパスしました${NC}" | ||
| else | ||
| echo "" | ||
| echo -e "${RED}❌ テストが失敗しました${NC}" | ||
| exit 1 | ||
| fi | ||
| } | ||
|
|
||
| # Rust テスト実行 | ||
| run_rust_tests() { | ||
| echo -e "${YELLOW}🦀 Rust プロジェクトを検出${NC}" | ||
|
|
||
| # cargo-nextest の確認 | ||
| local test_runner_cmd | ||
| if command -v cargo-nextest &> /dev/null; then | ||
| FRAMEWORK="cargo-nextest" | ||
| test_runner_cmd="cargo nextest run" | ||
| else | ||
| FRAMEWORK="cargo test" | ||
| test_runner_cmd="cargo test" | ||
| fi | ||
|
|
||
| echo -e "${GREEN}✓ テストフレームワーク: $FRAMEWORK${NC}" | ||
|
|
||
| local final_cmd | ||
|
|
||
| if [ "$COVERAGE" = true ]; then | ||
| if ! command -v cargo-llvm-cov &> /dev/null; then | ||
| echo -e "${YELLOW}⚠ cargo-llvm-cov がインストールされていません${NC}" | ||
| echo "インストール: cargo install cargo-llvm-cov" | ||
| exit 1 | ||
| fi | ||
| final_cmd="cargo llvm-cov --html" | ||
| if [ "$WATCH" = true ]; then | ||
| echo -e "${YELLOW}⚠ --watch と --coverage は同時に使用できません。--coverage を優先します。${NC}" | ||
| fi | ||
| echo -e "${YELLOW}カバレッジレポート: target/llvm-cov/html/index.html${NC}" | ||
| elif [ "$WATCH" = true ]; then | ||
| if ! command -v cargo-watch &> /dev/null; then | ||
| echo -e "${YELLOW}⚠ cargo-watch がインストールされていません${NC}" | ||
| echo "インストール: cargo install cargo-watch" | ||
| exit 1 | ||
| fi | ||
| final_cmd="cargo watch -x test" | ||
| else | ||
| final_cmd="$test_runner_cmd" | ||
| fi | ||
|
|
||
| echo -e "${YELLOW}実行コマンド: $final_cmd${NC}" | ||
| echo "" | ||
|
|
||
| # テスト実行 | ||
| eval "$final_cmd" | ||
|
|
||
| if [ $? -eq 0 ]; then | ||
| echo "" | ||
| echo -e "${GREEN}✅ すべてのテストがパスしました${NC}" | ||
|
|
||
| if [ "$COVERAGE" = true ]; then | ||
| echo -e "${GREEN}📊 カバレッジレポート: target/llvm-cov/html/index.html${NC}" | ||
| fi | ||
| else | ||
| echo "" | ||
| echo -e "${RED}❌ テストが失敗しました${NC}" | ||
| exit 1 | ||
| fi | ||
| } | ||
|
|
||
| # メイン処理 | ||
| PROJECT_TYPE=$(detect_project_type) | ||
|
|
||
| case $PROJECT_TYPE in | ||
| typescript) | ||
| run_typescript_tests | ||
| ;; | ||
| rust) | ||
| run_rust_tests | ||
| ;; | ||
| *) | ||
| echo -e "${RED}❌ 不明なプロジェクトタイプ: $PROJECT_TYPE${NC}" | ||
| exit 1 | ||
| ;; | ||
| esac |
There was a problem hiding this comment.
| 詳細な設定については [JEST.md](JEST.md) を参照してください。 | ||
|
|
||
| **基本設定**: | ||
| ```javascript | ||
| // jest.config.js | ||
| module.exports = { | ||
| preset: 'ts-jest', | ||
| testEnvironment: 'node', | ||
| coverageThreshold: { | ||
| global: { | ||
| branches: 80, | ||
| functions: 80, | ||
| lines: 80, | ||
| statements: 80, | ||
| }, | ||
| }, | ||
| }; | ||
| ``` | ||
|
|
||
| ### テストの実行 | ||
|
|
||
| ```bash | ||
| # すべてのテスト実行 | ||
| npm test | ||
|
|
||
| # ウォッチモード | ||
| npm test -- --watch | ||
|
|
||
| # カバレッジ測定 | ||
| npm test -- --coverage | ||
|
|
||
| # 特定のテストのみ | ||
| npm test -- path/to/test.test.ts | ||
| ``` | ||
|
|
||
| ## Playwright設定 | ||
|
|
||
| ### インストール | ||
|
|
||
| ```bash | ||
| npm install --save-dev @playwright/test | ||
| npx playwright install | ||
| ``` | ||
|
|
||
| ### 設定ファイル | ||
|
|
||
| 詳細な設定については [PLAYWRIGHT.md](PLAYWRIGHT.md) を参照してください。 |
| ├── .claude/ # Claude Code設定 | ||
| │ ├── commands/ # カスタムスラッシュコマンド定義 | ||
| │ ├── agents/ # 専門サブエージェント定義 | ||
| │ ├── skills/ # Agent Skills(5個) |
| - **スマホ対応開発環境**: スマートフォンからClaude Code Actionsで開発可能 | ||
| - **Spec Kit + TDD統合**: 仕様駆動開発とテスト駆動開発を組み合わせた開発フロー | ||
| - **Issue Driven開発**: すべての開発はIssueから開始し、体系的に管理 | ||
| - **Agent Skills**: 5つの特化したSkillによる効率的なガイダンス |
- fix(ci-cd-setup): add bc command check in deploy_check.sh - refactor: consolidate run_tests.sh into shared scripts - Create .claude/skills/shared/scripts/ directory - Move run_tests.sh to shared location - Create symlinks from testing-typescript and testing-rust - docs(testing-typescript): remove broken links to JEST.md and PLAYWRIGHT.md Resolves additional Gemini Code Assist review comments on PR #9
- CLAUDE.md: fix directory tree comment (5個 -> 10個) - README.md: fix feature list and directory tree (5つ/5個 -> 10個) Completes all Gemini Code Assist review comments on PR #9
|
Looks like there are a few issues preventing this PR from being merged!
If you'd like me to help, just leave a comment, like Feel free to include any additional details that might help me get this PR into a better state. You can manage your notification settings |
|
/gemini review |
There was a problem hiding this comment.
Code Review
このプルリクエストは、エージェントの能力を「コマンド」から「スキル」モデルに移行する、大規模かつ素晴らしいリファクタリングですね。アーキテクチャがより宣言的で知識ベースになり、保守性と拡張性が向上していると感じます。10個の新しいスキルはどれも包括的で、開発ワークフロー全体をカバーしており、非常に有用です。設定ファイルやドキュメントの整理も、プロジェクトの明確化に貢献しています。
全体として非常に良い変更ですが、共有スクリプトの呼び出し方法に修正が必要な点が見つかりましたので、コメントをご確認ください。
概要
Agent Skillsを作成し、GitHub Actionsワークフローに統合しました。
変更内容
Agent Skills作成(10個)
GitHub Actions統合
その他の変更
コミット数
17個の細かい粒度のコミット
関連Issue
なし
チェックリスト