From 8cc2388be848d1af1c781e3598e434253ae4780c Mon Sep 17 00:00:00 2001 From: keito4 Date: Thu, 19 Feb 2026 16:08:10 +0900 Subject: [PATCH 1/2] =?UTF-8?q?docs:=20=E3=83=89=E3=82=AD=E3=83=A5?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=88=E9=96=93=E3=81=AE=E7=9B=B8=E4=BA=92?= =?UTF-8?q?=E5=8F=82=E7=85=A7=E3=82=92=E6=94=B9=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - docs/README.md を新規作成(全体の索引ページ) - 各 setup ガイドに「関連ドキュメント」セクションを追加 - コマンド(setup-new-repo, setup-ci)から docs/setup への参照を追加 - README.md に docs/ ディレクトリの説明を追加 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .claude/commands/README.md | 55 ++++++++++----------- .claude/commands/setup-ci.md | 5 ++ .claude/commands/setup-new-repo.md | 13 +++++ README.md | 1 + docs/README.md | 76 ++++++++++++++++++++++++++++++ docs/setup/README.md | 11 +++++ docs/setup/desktop-extension-ts.md | 7 +++ docs/setup/mobile-android.md | 7 +++ docs/setup/mobile-flutter.md | 7 +++ docs/setup/npm-library-cli.md | 7 +++ docs/setup/spa-react-vite.md | 8 ++++ docs/setup/web-app-nextjs.md | 9 ++++ 12 files changed, 179 insertions(+), 27 deletions(-) create mode 100644 docs/README.md diff --git a/.claude/commands/README.md b/.claude/commands/README.md index 9939ba7d..4bf7e84e 100644 --- a/.claude/commands/README.md +++ b/.claude/commands/README.md @@ -4,33 +4,34 @@ This directory contains pre-configured commands that provide automated workflows ## Quick Reference -| カテゴリ | コマンド | 説明 | -| --------------------- | ------------------------------- | -------------------------------------------- | -| **Maintenance** | `/repo-maintenance` | 包括的なリポジトリメンテナンス | -| **Git Workflow** | `/git-sync` | Git 同期とブランチ管理 | -| | `/branch-cleanup` | マージ済み・古いブランチのクリーンアップ | -| | `/create-pr` | ベースブランチをマージして PR 作成 | -| **Code Analysis** | `/similarity-analysis` | コードの類似性分析と重複検出 | -| | `/code-complexity-check` | コード複雑度分析とリファクタリング候補の特定 | -| **Quality & Testing** | `/pre-pr-checklist` | PR 作成前の品質チェック | -| | `/test-coverage-trend` | テストカバレッジのトレンド追跡 | -| **Security** | `/dependency-health-check` | 依存関係の健全性分析 | -| | `/security-credential-scan` | ハードコードされた認証情報のスキャン | -| | `/security-review` | セキュリティレビューと改善提案 | -| **DevContainer** | `/container-health` | コンテナ環境の健全性確認 | -| | `/devcontainer-checklist` | DevContainer 再起動後の確認チェックリスト | -| | `/config-base-sync-check` | config-base イメージのバージョン確認 | -| | `/config-base-sync-update` | DevContainer を最新に更新して PR 作成 | -| **Setup** | `/setup-new-repo` | 新規リポジトリのセットアップ | -| | `/setup-ci` | CI/CD ワークフローのセットアップ | -| | `/setup-husky` | Git hooks (Husky) のセットアップ | -| | `/setup-team-protection` | GitHub リポジトリ保護ルールの設定 | -| **Codespaces** | `/codespaces-secrets` | Codespaces シークレットの管理 | -| **Config Sync** | `/sync-settings` | Claude/Codex 設定の同期 | -| | `/config-contribution-discover` | 新機能の発見と取り込み | -| **Updates** | `/update-claude-code` | Claude Code の更新 | -| | `/update-actions` | GitHub Actions バージョンの更新 | -| **Documentation** | `/changelog-generator` | Conventional Commits から CHANGELOG を生成 | +| カテゴリ | コマンド | 説明 | +| --------------------- | ----------------------------------------- | -------------------------------------------- | +| **Maintenance** | `/repo-maintenance` | 包括的なリポジトリメンテナンス | +| **Git Workflow** | `/git-sync` | Git 同期とブランチ管理 | +| | `/branch-cleanup` | マージ済み・古いブランチのクリーンアップ | +| | `/create-pr` | ベースブランチをマージして PR 作成 | +| **Code Analysis** | `/similarity-analysis` | コードの類似性分析と重複検出 | +| | `/code-complexity-check` | コード複雑度分析とリファクタリング候補の特定 | +| **Quality & Testing** | `/pre-pr-checklist` | PR 作成前の品質チェック | +| | `/test-coverage-trend` | テストカバレッジのトレンド追跡 | +| **Security** | `/dependency-health-check` | 依存関係の健全性分析 | +| | `/security-credential-scan` | ハードコードされた認証情報のスキャン | +| | `/security-review` | セキュリティレビューと改善提案 | +| **DevContainer** | `/container-health` | コンテナ環境の健全性確認 | +| | `/devcontainer-checklist` | DevContainer 再起動後の確認チェックリスト | +| | `/config-base-sync-check` | config-base イメージのバージョン確認 | +| | `/config-base-sync-update` | DevContainer を最新に更新して PR 作成 | +| **Setup** | `/setup-new-repo` | 新規リポジトリのセットアップ | +| | `/setup-ci` | CI/CD ワークフローのセットアップ | +| | `/setup-husky` | Git hooks (Husky) のセットアップ | +| | `/setup-team-protection` | GitHub リポジトリ保護ルールの設定 | +| **Documentation** | [docs/setup/](../../docs/setup/README.md) | プロジェクト種別ごとのセットアップガイド | +| **Codespaces** | `/codespaces-secrets` | Codespaces シークレットの管理 | +| **Config Sync** | `/sync-settings` | Claude/Codex 設定の同期 | +| | `/config-contribution-discover` | 新機能の発見と取り込み | +| **Updates** | `/update-claude-code` | Claude Code の更新 | +| | `/update-actions` | GitHub Actions バージョンの更新 | +| **Documentation** | `/changelog-generator` | Conventional Commits から CHANGELOG を生成 | ## Available Commands diff --git a/.claude/commands/setup-ci.md b/.claude/commands/setup-ci.md index 8c8d189b..fcbc3bdd 100644 --- a/.claude/commands/setup-ci.md +++ b/.claude/commands/setup-ci.md @@ -782,6 +782,11 @@ Next Steps: | `/pre-pr-checklist` | PR 作成前チェック | | `/security-credential-scan` | 認証情報スキャン | +## Project Type Guides + +プロジェクト種別に応じた詳細なセットアップガイドは [docs/setup/](../../docs/setup/README.md) を参照してください。 +CI/CD 設定、共通パターン、品質ゲートなどの包括的な情報が含まれています。 + ## Error Handling エラー発生時: diff --git a/.claude/commands/setup-new-repo.md b/.claude/commands/setup-new-repo.md index 94e7ce8a..3aa70bd2 100644 --- a/.claude/commands/setup-new-repo.md +++ b/.claude/commands/setup-new-repo.md @@ -660,6 +660,19 @@ Next Steps: | `/setup-team-protection` | ブランチ保護ルールの設定 | | `/config-base-sync-update` | DevContainerを最新に更新 | +## Project Type Guides + +プロジェクト種別に応じた詳細なセットアップガイドは [docs/setup/](../../docs/setup/README.md) を参照してください: + +| ガイド | 対象 | +| ------------------------------------------------------------------- | --------------------- | +| [spa-react-vite.md](../../docs/setup/spa-react-vite.md) | SPA (React + Vite) | +| [npm-library-cli.md](../../docs/setup/npm-library-cli.md) | npm ライブラリ (CLI) | +| [web-app-nextjs.md](../../docs/setup/web-app-nextjs.md) | Web アプリ (Next.js) | +| [mobile-flutter.md](../../docs/setup/mobile-flutter.md) | モバイル (Flutter) | +| [mobile-android.md](../../docs/setup/mobile-android.md) | モバイル (Android) | +| [desktop-extension-ts.md](../../docs/setup/desktop-extension-ts.md) | デスクトップ拡張 (TS) | + ## Error Handling エラー発生時: diff --git a/README.md b/README.md index 09c2b384..ee3543a4 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ It includes settings for various tools, such as the shell (Zsh), Git, npm, and V - `.github/`: GitHub configuration including workflows for CI/CD, security scanning, and release automation. The `templates/` subdirectory contains reusable workflow templates for unified CI with coverage reporting and monorepo releases with change detection. - `brew/`: Contains Brewfiles for different operating systems (Linux, macOS) and dependency configurations, including lock files for reproducible package installations. Supports categorized package management and dependency analysis. - `credentials/`: Contains templates and scripts for secure credential management using 1Password CLI integration. +- `docs/`: Documentation directory containing setup guides, usage instructions, and reference materials. The `setup/` subdirectory provides project-type-specific setup guides (Next.js, React+Vite, npm libraries, Flutter, Android, Desktop extensions). See [docs/setup/README.md](docs/setup/README.md) for the complete list. - `eslint/`: Contains recommended ESLint complexity rules template and documentation to prevent technical debt accumulation. See [eslint/README.md](eslint/README.md) for usage guidelines. - `dot/`: Directory for dotfiles and configuration files that are typically placed in the home directory, including Zsh configuration with comprehensive aliases, functions, and environment setup. - `git/`: Contains Git configuration files including gitconfig, gitignore, commitlint configuration with i18n support, and modular configuration files in the `gitconfig.d/` subdirectory. See [git/README.md](git/README.md) for details. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..8b8943c5 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,76 @@ +# Documentation + +このディレクトリには、開発環境のセットアップ、ツール構成、各種ガイドが含まれています。 + +## ドキュメント一覧 + +### プロジェクトセットアップ + +新規プロジェクトを立ち上げる際のガイドです。 + +| ドキュメント | 説明 | +| ---------------------------------------------------------------- | -------------------------------------------- | +| [setup/README.md](./setup/README.md) | プロジェクト種別ごとのセットアップガイド索引 | +| [setup/web-app-nextjs.md](./setup/web-app-nextjs.md) | Next.js Web アプリケーション | +| [setup/spa-react-vite.md](./setup/spa-react-vite.md) | React + Vite SPA | +| [setup/npm-library-cli.md](./setup/npm-library-cli.md) | npm ライブラリ / CLI ツール | +| [setup/mobile-flutter.md](./setup/mobile-flutter.md) | Flutter モバイルアプリ | +| [setup/mobile-android.md](./setup/mobile-android.md) | Android ネイティブアプリ | +| [setup/desktop-extension-ts.md](./setup/desktop-extension-ts.md) | デスクトップ拡張(TypeScript) | + +### DevContainer / 開発環境 + +| ドキュメント | 説明 | +| ---------------------------------------------------------- | ----------------------------------------------- | +| [using-config-base-image.md](./using-config-base-image.md) | `ghcr.io/keito4/config-base` イメージの使用方法 | +| [tool-catalog.md](./tool-catalog.md) | 環境×ツールのマトリクス一覧 | + +### サービス連携 + +| ドキュメント | 説明 | +| ------------------------------------------------ | ----------------------------------------------------- | +| [mcp-servers-guide.md](./mcp-servers-guide.md) | MCP サーバー設定ガイド(Linear, Playwright, o3 など) | +| [sentry-setup-guide.md](./sentry-setup-guide.md) | Sentry セットアップガイド(Next.js 14+ 向け) | + +## クイックスタート + +### 新規プロジェクトの作成 + +1. プロジェクト種別に応じた [setup ガイド](./setup/README.md) を参照 +2. DevContainer を使用する場合は [config-base イメージ](./using-config-base-image.md) を確認 +3. ツール構成の詳細は [tool-catalog](./tool-catalog.md) を参照 + +### Claude Code コマンドとの連携 + +| コマンド | 関連ドキュメント | +| -------------------------- | ---------------------------------------------------------- | +| `/setup-new-repo` | [setup/README.md](./setup/README.md) | +| `/setup-ci` | [setup/README.md](./setup/README.md) | +| `/config-base-sync-update` | [using-config-base-image.md](./using-config-base-image.md) | +| `/repo-maintenance` | [tool-catalog.md](./tool-catalog.md) | + +## ディレクトリ構造 + +``` +docs/ +├── README.md # このファイル(ドキュメント索引) +├── setup/ # プロジェクト種別セットアップガイド +│ ├── README.md # 共通品質ゲート・パターン +│ ├── web-app-nextjs.md # Next.js +│ ├── spa-react-vite.md # React + Vite +│ ├── npm-library-cli.md # npm ライブラリ +│ ├── mobile-flutter.md # Flutter +│ ├── mobile-android.md # Android +│ └── desktop-extension-ts.md # デスクトップ拡張 +├── using-config-base-image.md # DevContainer ベースイメージ +├── mcp-servers-guide.md # MCP サーバー設定 +├── sentry-setup-guide.md # Sentry セットアップ +└── tool-catalog.md # ツールカタログ +``` + +## 関連リソース + +- [AGENTS.md](../AGENTS.md) - AI エージェント向け開発ガイドライン +- [.claude/commands/README.md](../.claude/commands/README.md) - Claude Code コマンド一覧 +- [credentials/README.md](../credentials/README.md) - 認証情報管理ガイド +- [script/README.md](../script/README.md) - スクリプト一覧 diff --git a/docs/setup/README.md b/docs/setup/README.md index 9909106f..37bbffc0 100644 --- a/docs/setup/README.md +++ b/docs/setup/README.md @@ -390,3 +390,14 @@ jobs: | `/security-credential-scan` | 認証情報の漏洩スキャン | | `/code-complexity-check` | コード複雑度チェック | | `/dependency-health-check` | 依存パッケージの健全性チェック | + +--- + +## 関連ドキュメント + +| ドキュメント | 説明 | +| ----------------------------------------------------- | ------------------------------------------------- | +| [ツールカタログ](../tool-catalog.md) | 環境×ツールのマトリクス(何がどこで使えるか一覧) | +| [config-base イメージ](../using-config-base-image.md) | DevContainer ベースイメージの詳細 | +| [MCP サーバーガイド](../mcp-servers-guide.md) | Linear, Playwright, Supabase 等の MCP 連携 | +| [Sentry セットアップガイド](../sentry-setup-guide.md) | Next.js 14+ 向けの Sentry 設定 | diff --git a/docs/setup/desktop-extension-ts.md b/docs/setup/desktop-extension-ts.md index 2eb15c35..5beb6451 100644 --- a/docs/setup/desktop-extension-ts.md +++ b/docs/setup/desktop-extension-ts.md @@ -90,3 +90,10 @@ config リポジトリの `.github/workflows/claude.yml` をテンプレート - **ベースイメージ**: `ghcr.io/keito4/config-base:latest` - **冗長 Features の削除**: ベースイメージに含まれるもの(github-cli, pnpm, jq-likes)は削除 - **残すべき Features**: `docker-in-docker`(プロジェクト固有) + +## 関連ドキュメント + +| ドキュメント | 説明 | +| ----------------------------------------------------- | --------------------------------- | +| [ツールカタログ](../tool-catalog.md) | 環境×ツールのマトリクス | +| [config-base イメージ](../using-config-base-image.md) | DevContainer ベースイメージの詳細 | diff --git a/docs/setup/mobile-android.md b/docs/setup/mobile-android.md index e4dda382..c3ef0cea 100644 --- a/docs/setup/mobile-android.md +++ b/docs/setup/mobile-android.md @@ -97,3 +97,10 @@ config リポジトリの `.github/workflows/claude.yml` をテンプレート - **ベースイメージ**: `ghcr.io/keito4/config-base:latest` - **Features**: `java(17)` + Gradle — Android 固有のため維持 - **postCreateCommand**: `sdkmanager --install 'platforms;android-35' ...` + +## 関連ドキュメント + +| ドキュメント | 説明 | +| ----------------------------------------------------- | --------------------------------- | +| [ツールカタログ](../tool-catalog.md) | 環境×ツールのマトリクス | +| [config-base イメージ](../using-config-base-image.md) | DevContainer ベースイメージの詳細 | diff --git a/docs/setup/mobile-flutter.md b/docs/setup/mobile-flutter.md index 78fd83c8..2427c472 100644 --- a/docs/setup/mobile-flutter.md +++ b/docs/setup/mobile-flutter.md @@ -63,3 +63,10 @@ Dart 向けの CodeQL は限定的だが、依存関係スキャンは有効。 - **ベースイメージ**: `ghcr.io/keito4/config-base:latest` - **Features**: `flutter`, `java(17)` — Flutter 固有のため維持 - **postCreateCommand**: `flutter pub get && dart run build_runner build --delete-conflicting-outputs` + +## 関連ドキュメント + +| ドキュメント | 説明 | +| ----------------------------------------------------- | --------------------------------- | +| [ツールカタログ](../tool-catalog.md) | 環境×ツールのマトリクス | +| [config-base イメージ](../using-config-base-image.md) | DevContainer ベースイメージの詳細 | diff --git a/docs/setup/npm-library-cli.md b/docs/setup/npm-library-cli.md index 1ef3b10d..1c15a99d 100644 --- a/docs/setup/npm-library-cli.md +++ b/docs/setup/npm-library-cli.md @@ -85,3 +85,10 @@ pnpm exec lint-staged - **ベースイメージ**: `ghcr.io/keito4/config-base:latest` - **冗長 Features の削除**: ベースイメージに含まれるもの(node, gh 等)は更新後に削除を検討 + +## 関連ドキュメント + +| ドキュメント | 説明 | +| ----------------------------------------------------- | --------------------------------- | +| [ツールカタログ](../tool-catalog.md) | 環境×ツールのマトリクス | +| [config-base イメージ](../using-config-base-image.md) | DevContainer ベースイメージの詳細 | diff --git a/docs/setup/spa-react-vite.md b/docs/setup/spa-react-vite.md index e6ced3d9..1232a3e8 100644 --- a/docs/setup/spa-react-vite.md +++ b/docs/setup/spa-react-vite.md @@ -94,3 +94,11 @@ Lint → Format Check → Test (with coverage) → Build ## DevContainer - **ベースイメージ**: `ghcr.io/keito4/config-base:latest` + +## 関連ドキュメント + +| ドキュメント | 説明 | +| ----------------------------------------------------- | ------------------------------------- | +| [ツールカタログ](../tool-catalog.md) | 環境×ツールのマトリクス | +| [MCP サーバーガイド](../mcp-servers-guide.md) | Linear, Playwright, Supabase 等の連携 | +| [config-base イメージ](../using-config-base-image.md) | DevContainer ベースイメージの詳細 | diff --git a/docs/setup/web-app-nextjs.md b/docs/setup/web-app-nextjs.md index 2b73a1b6..038bf2f5 100644 --- a/docs/setup/web-app-nextjs.md +++ b/docs/setup/web-app-nextjs.md @@ -276,3 +276,12 @@ export default defineConfig({ - **ベースイメージ**: `ghcr.io/keito4/config-base:latest` - **冗長 Features の削除**: ベースイメージに含まれるもの(git, pnpm, github-cli, jq-likes, supabase-cli)は削除 - **残すべき Features**: docker-in-docker, playwright(プロジェクト固有) + +## 関連ドキュメント + +| ドキュメント | 説明 | +| ----------------------------------------------------- | ------------------------------------- | +| [Sentry セットアップガイド](../sentry-setup-guide.md) | Next.js 14+ 向けの Sentry 設定 | +| [MCP サーバーガイド](../mcp-servers-guide.md) | Linear, Playwright, Supabase 等の連携 | +| [ツールカタログ](../tool-catalog.md) | 環境×ツールのマトリクス | +| [config-base イメージ](../using-config-base-image.md) | DevContainer ベースイメージの詳細 | From 922bc2540f7eea7af3ff49d6e3facbe0662fb7b8 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <41898282+claude[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 15:13:53 +0000 Subject: [PATCH 2/2] =?UTF-8?q?chore:=20main=E3=83=96=E3=83=A9=E3=83=B3?= =?UTF-8?q?=E3=83=81=E3=81=AE=E5=A4=89=E6=9B=B4=E3=82=92=E5=8F=96=E3=82=8A?= =?UTF-8?q?=E8=BE=BC=E3=81=BF=EF=BC=88=E3=82=B3=E3=83=B3=E3=83=95=E3=83=AA?= =?UTF-8?q?=E3=82=AF=E3=83=88=E8=A7=A3=E6=B6=88=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat/project-type-presets (#490) と feat/vscode-environment-enhancements (#491) のマージにより生じたコンフリクトを手動で解消。 - .claude/commands/setup-new-repo.md: --type/--interactive オプション、Step 3.5 (プロジェクトタイプ検出)、Step 9.5 (skills/plugins設定) を追加 - docs/setup/README.md: project-presets.json への参照と Note を追加 - .devcontainer/codespaces/devcontainer.json: CLAUDE_CONFIG_DIR を追加 - .devcontainer/templates/project-presets.json: 新規作成(プロジェクトプリセット定義) - .gitignore: cspell-custom-words.txt と .claude-data/ を追加 - .vscode/extensions.json: 推奨拡張機能を追加 - .vscode/settings.json: 詳細なエディタ設定を追加 - cspell.json, .vscode/cspell-custom-words.txt: スペルチェック設定を追加 Co-authored-by: keito4 --- .claude/commands/setup-new-repo.md | 155 ++++++++++++++--- .devcontainer/codespaces/devcontainer.json | 3 + .devcontainer/templates/project-presets.json | 166 +++++++++++++++++++ .gitignore | 4 + .vscode/cspell-custom-words.txt | 0 .vscode/extensions.json | 13 +- .vscode/settings.json | 62 ++++++- cspell.json | 48 ++++++ docs/setup/README.md | 15 +- 9 files changed, 436 insertions(+), 30 deletions(-) create mode 100644 .devcontainer/templates/project-presets.json create mode 100644 .vscode/cspell-custom-words.txt create mode 100644 cspell.json diff --git a/.claude/commands/setup-new-repo.md b/.claude/commands/setup-new-repo.md index 3aa70bd2..fddf95f7 100644 --- a/.claude/commands/setup-new-repo.md +++ b/.claude/commands/setup-new-repo.md @@ -1,7 +1,7 @@ --- description: Setup new repository with DevContainer, CI/CD, and development tools from config template allowed-tools: Read, Write, Edit, Bash(git:*), Bash(gh:*), Bash(npm:*), Bash(mkdir:*), Bash(cp:*), Bash(ls:*), Bash(cat:*), Bash(test:*), Task, Glob, Grep -argument-hint: ' [--minimal] [--no-devcontainer] [--no-codespaces] [--no-protection] [--license MIT|Apache-2.0] [--no-install]' +argument-hint: ' [--type TYPE] [--interactive] [--minimal] [--no-devcontainer] [--no-codespaces] [--no-protection] [--license MIT|Apache-2.0] [--no-install]' --- # New Repository Setup Command @@ -28,6 +28,8 @@ argument-hint: ' [--minimal] [--no-devcontainer] [--no-codespaces] [ 引数から設定を読み取る: - `TARGET_DIR`: 新規リポジトリのパス(必須) +- `--type TYPE`: プロジェクトタイプを指定(nextjs|spa-react|npm-library|monorepo|flutter|android|raycast|terraform|nodejs) +- `--interactive`: プロジェクトタイプを対話的に選択 - `--minimal`: GitHub Actionsをスキップ - `--no-devcontainer`: DevContainer設定をスキップ - `--no-codespaces`: Codespacesシークレット紐付けをスキップ @@ -55,6 +57,53 @@ ls -la TARGET_DIR 2>/dev/null || echo "Directory will be created" git rev-parse --show-toplevel ``` +## Step 3.5: Detect or Select Project Type + +プロジェクトタイプを決定する。プリセット定義は `CONFIG_REPO/.devcontainer/templates/project-presets.json` を参照。 + +### 3.5.1 タイプ指定の確認 + +1. `--type TYPE` が指定されている場合、その値を使用 +2. `--interactive` が指定されている場合、ユーザーに選択肢を提示 + +### 3.5.2 自動検出(--type / --interactive なしの場合) + +ターゲットディレクトリ内のファイルパターンで検出: + +``` +検出順序: +1. next.config.* が存在 → nextjs +2. pubspec.yaml が存在 → flutter +3. build.gradle* + app/src/main/ が存在 → android +4. vite.config.* + package.json に @vitejs/plugin-react → spa-react +5. package.json に @raycast/api 依存 → raycast +6. pnpm-workspace.yaml / lerna.json が存在 → monorepo +7. *.tf ファイルが存在 → terraform +8. package.json に bin / exports フィールド → npm-library +9. package.json のみ → nodejs +10. いずれも該当しない → unknown(ユーザーに確認) +``` + +### 3.5.3 検出結果の確認 + +自動検出された場合、結果をユーザーに表示して確認: + +``` +検出されたプロジェクトタイプ: {displayName} +このタイプで続行しますか? (y/n/他のタイプを入力) +``` + +`unknown` の場合は選択肢を一覧表示。 + +### 3.5.4 プリセットの読み込み + +決定したプロジェクトタイプに基づき、`project-presets.json` から以下を読み込む: + +- `features`: DevContainer に追加する features +- `vscodeExtensions`: VS Code 拡張機能 +- `skills`: インストールする Claude Code skills +- `plugins`: インストールする Claude Code plugins + ## Step 4: Initialize Git Repository ```bash @@ -64,18 +113,23 @@ git init ## Step 5: Create DevContainer Configuration (unless --no-devcontainer) -DevContainer設定をプロジェクトに合わせて新規作成する。ローカル用と Codespaces 用の2つを作成する。 +DevContainer設定をプロジェクトタイプに応じて新規作成する。ローカル用と Codespaces 用の2つを作成する。 + +**Step 3.5 で決定したプロジェクトタイプのプリセットを使用する。** ### 5.1 `.devcontainer/devcontainer.json`(ローカル用)を作成 -ローカル DevContainer 用。Codespaces 固有設定(`secrets`, `codespaces` カスタマイゼーション)は含めない。 +ローカル DevContainer 用。Codespaces 固有設定は含めない。 ```json { "name": "{project-name}", "image": "ghcr.io/keito4/config-base:latest", "features": { - // プロジェクトに必要な追加 features をここに記載 + // ← project-presets.json の preset.features を展開 + // 例: nextjs の場合 + // "ghcr.io/devcontainers/features/docker-in-docker:2": { "moby": true }, + // "ghcr.io/schlich/devcontainer-features/playwright:0": {} }, "remoteEnv": { "TMPDIR": "/home/vscode/.claude/tmp" @@ -84,10 +138,7 @@ DevContainer設定をプロジェクトに合わせて新規作成する。ロ "customizations": { "vscode": { "extensions": [ - "esbenp.prettier-vscode", - "dbaeumer.vscode-eslint", - "ms-vscode.vscode-typescript-next" - // プロジェクトに応じた拡張機能を追加 + // ← base.vscodeExtensions + preset.vscodeExtensions を結合 ], "settings": { "editor.formatOnSave": true, @@ -106,7 +157,7 @@ DevContainer設定をプロジェクトに合わせて新規作成する。ロ ### 5.2 `.devcontainer/codespaces/devcontainer.json`(Codespaces 用)を作成 -GitHub Codespaces 用。`secrets`, `codespaces` カスタマイゼーション、`sshd` feature を含める。 +GitHub Codespaces 用。`secrets`, `codespaces` カスタマイゼーション、`sshd` feature を追加。 ```json { @@ -115,10 +166,11 @@ GitHub Codespaces 用。`secrets`, `codespaces` カスタマイゼーション "features": { "ghcr.io/devcontainers/features/sshd:1": {}, "ghcr.io/devcontainers/features/github-cli:1": {} - // プロジェクトに必要な追加 features をここに記載 + // ← + project-presets.json の preset.features を展開 }, "remoteEnv": { - "TMPDIR": "/home/vscode/.claude/tmp" + "TMPDIR": "/home/vscode/.claude/tmp", + "CLAUDE_CONFIG_DIR": "${containerWorkspaceFolder}/.claude-data" }, "postCreateCommand": "npm install", "customizations": { @@ -133,14 +185,19 @@ GitHub Codespaces 用。`secrets`, `codespaces` カスタマイゼーション "ANTHROPIC_API_KEY": { "description": "Anthropic API key for Claude Code" } - // プロジェクト固有のシークレットを追加 } } ``` **重要**: 2つの devcontainer.json を常にセットで作成する。 -### 5.3 `.vscode/` 設定を作成 +### 5.3 features の決定ルール + +1. `project-presets.json` から該当プロジェクトタイプのプリセットを読み込む +2. `preset.features` のみを DevContainer に設定(base は空なので結合不要) +3. features が空 `{}` のプロジェクトタイプでは、features セクションを空にする + +### 5.4 `.vscode/` 設定を作成 ```bash mkdir -p TARGET_DIR/.vscode @@ -205,6 +262,10 @@ npm-debug.log* # OS Thumbs.db + +# Claude (local config, Codespaces) +.claude/settings.local.json +.claude-data/ ``` ## Step 7: Copy GitHub Actions (unless --minimal) @@ -359,6 +420,44 @@ module.exports = { }; ``` +## Step 9.5: Generate Skills/Plugins Configuration + +プロジェクトタイプに応じた Claude Code skills と plugins の設定ファイルを生成する。 + +### 9.5.1 `.claude/plugins.txt` を作成 + +`project-presets.json` の `base.plugins` と `preset.plugins` を結合して生成。 + +```txt +# Claude Code Plugins for {project-type} project +# Generated by /setup-new-repo + +# === Core Plugins (all projects) === +{base.plugins の内容} + +# === {project-type} Plugins === +{preset.plugins の内容} +``` + +### 9.5.2 `.claude/skills.txt` を作成 + +`project-presets.json` の `base.skills` と `preset.skills` を結合して生成。 + +```txt +# Claude Code Skills for {project-type} project +# Generated by /setup-new-repo + +# === Core Skills (all projects) === +{base.skills の内容} + +# === {project-type} Skills === +{preset.skills の内容} +``` + +### 9.5.3 Summary 用にリストを保存 + +生成した skills / plugins の一覧を Step 14 の Summary で表示するために保存。 + ## Step 10: Create Documentation ### 10.1 README.md @@ -593,6 +692,16 @@ gh api repos/{owner}/{repo}/branches/main/protection --jq '{ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📁 Target: {TARGET_DIR} +📦 Project Type: {project-type} ({displayName}) + +DevContainer Features: +{preset.features の一覧、または "なし (ベースイメージのみ)"} + +Claude Code Skills: +{base.skills + preset.skills の一覧} + +Claude Code Plugins: +{base.plugins + preset.plugins の一覧} Files Created: ✅ .devcontainer/ (ローカル + Codespaces) @@ -605,6 +714,8 @@ Files Created: ✅ .github/PULL_REQUEST_TEMPLATE.md ✅ .claude/hooks/ (3 ファイル) ✅ .claude/settings.json +✅ .claude/plugins.txt +✅ .claude/skills.txt ✅ package.json ✅ eslint.config.mjs ✅ .prettierrc @@ -642,14 +753,16 @@ Next Steps: ## Options Summary -| オプション | 説明 | デフォルト | -| ------------------- | -------------------------------------- | ---------- | -| `--minimal` | GitHub Actionsをスキップ | false | -| `--no-devcontainer` | DevContainer設定をスキップ | false | -| `--no-codespaces` | Codespacesシークレット紐付けをスキップ | false | -| `--no-protection` | ブランチ保護・リポジトリ設定をスキップ | false | -| `--license TYPE` | ライセンス種別 | MIT | -| `--no-install` | npm installをスキップ | false | +| オプション | 説明 | デフォルト | +| ------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------- | +| `--type TYPE` | プロジェクトタイプを指定 (nextjs\|spa-react\|npm-library\|monorepo\|flutter\|android\|raycast\|terraform\|nodejs) | 自動検出 | +| `--interactive` | プロジェクトタイプを対話的に選択 | false | +| `--minimal` | GitHub Actionsをスキップ | false | +| `--no-devcontainer` | DevContainer設定をスキップ | false | +| `--no-codespaces` | Codespacesシークレット紐付けをスキップ | false | +| `--no-protection` | ブランチ保護・リポジトリ設定をスキップ | false | +| `--license TYPE` | ライセンス種別 | MIT | +| `--no-install` | npm installをスキップ | false | ## Related Commands diff --git a/.devcontainer/codespaces/devcontainer.json b/.devcontainer/codespaces/devcontainer.json index 1e04b4a0..bc335b0f 100644 --- a/.devcontainer/codespaces/devcontainer.json +++ b/.devcontainer/codespaces/devcontainer.json @@ -35,6 +35,9 @@ "containerEnv": { "CLAUDE_ENV_FILE": "/home/vscode/.devcontainer.env" }, + "remoteEnv": { + "CLAUDE_CONFIG_DIR": "${containerWorkspaceFolder}/.claude-data" + }, "customizations": { "vscode": { "extensions": [ diff --git a/.devcontainer/templates/project-presets.json b/.devcontainer/templates/project-presets.json new file mode 100644 index 00000000..84bfa634 --- /dev/null +++ b/.devcontainer/templates/project-presets.json @@ -0,0 +1,166 @@ +{ + "_comment": "プロジェクトタイプ別の DevContainer features, skills, plugins 推奨設定", + "_detectionLogic": "detection 内の複数条件は AND で結合される(files のいずれか AND packageDependencies の全て)", + "base": { + "_comment": "全プロジェクト共通の設定。各プリセットと結合される", + "features": {}, + "vscodeExtensions": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint", "streetsidesoftware.code-spell-checker"], + "skills": ["intellectronica/agent-skills"], + "plugins": ["commit-commands@claude-plugins-official", "hookify@claude-plugins-official"] + }, + "presets": { + "nextjs": { + "displayName": "Next.js Web アプリ", + "description": "Next.js + React + TypeScript のフルスタック Web アプリケーション", + "detection": { + "files": ["next.config.js", "next.config.mjs", "next.config.ts"] + }, + "features": { + "ghcr.io/devcontainers/features/docker-in-docker:2": { + "moby": true, + "dockerDashComposeVersion": "v2" + }, + "ghcr.io/schlich/devcontainer-features/playwright:0": {} + }, + "vscodeExtensions": ["ms-vscode.vscode-typescript-next", "bradlc.vscode-tailwindcss"], + "skills": [ + "vercel-labs/agent-skills", + "vercel-labs/agent-skills@vercel-composition-patterns", + "supabase/agent-skills", + "supabase/agent-skills@supabase-postgres-best-practices", + "planetscale/database-skills" + ], + "plugins": [ + "typescript-lsp@claude-plugins-official", + "code-review@claude-plugins-official", + "javascript-typescript@claude-code-workflows", + "full-stack-orchestration@claude-code-workflows", + "postgres-best-practices@supabase-agent-skills" + ] + }, + "spa-react": { + "displayName": "SPA (React + Vite)", + "description": "Vite ベースの React シングルページアプリケーション", + "detection": { + "files": ["vite.config.ts", "vite.config.js"], + "packageDependencies": ["react", "@vitejs/plugin-react"] + }, + "features": {}, + "vscodeExtensions": ["ms-vscode.vscode-typescript-next"], + "skills": ["vercel-labs/agent-skills"], + "plugins": [ + "typescript-lsp@claude-plugins-official", + "code-review@claude-plugins-official", + "javascript-typescript@claude-code-workflows" + ] + }, + "npm-library": { + "displayName": "npm ライブラリ / CLI", + "description": "npm パッケージとして公開するライブラリまたは CLI ツール", + "detection": { + "packageFields": ["bin", "exports"] + }, + "features": {}, + "vscodeExtensions": ["ms-vscode.vscode-typescript-next"], + "skills": [], + "plugins": ["typescript-lsp@claude-plugins-official", "code-review@claude-plugins-official"] + }, + "monorepo": { + "displayName": "Monorepo", + "description": "pnpm workspaces または Lerna による Monorepo 構成", + "detection": { + "files": ["pnpm-workspace.yaml", "lerna.json"] + }, + "features": {}, + "vscodeExtensions": ["ms-vscode.vscode-typescript-next"], + "skills": [], + "plugins": [ + "typescript-lsp@claude-plugins-official", + "code-review@claude-plugins-official", + "javascript-typescript@claude-code-workflows" + ] + }, + "flutter": { + "displayName": "モバイル (Flutter)", + "description": "Flutter によるクロスプラットフォームモバイルアプリ", + "detection": { + "files": ["pubspec.yaml"] + }, + "features": { + "ghcr.io/joshspicer/features/flutter:1": {}, + "ghcr.io/devcontainers/features/java:1": { + "version": "17" + } + }, + "vscodeExtensions": ["Dart-Code.flutter", "Dart-Code.dart-code"], + "skills": [], + "plugins": [] + }, + "android": { + "displayName": "モバイル (Android)", + "description": "Kotlin による Android ネイティブアプリ", + "detection": { + "files": ["build.gradle", "build.gradle.kts"], + "directories": ["app/src/main"] + }, + "features": { + "ghcr.io/devcontainers/features/java:1": { + "version": "17" + } + }, + "vscodeExtensions": ["vscjava.vscode-java-pack"], + "skills": [], + "plugins": [] + }, + "raycast": { + "displayName": "Raycast 拡張", + "description": "Raycast 拡張機能(TypeScript)", + "detection": { + "packageDependencies": ["@raycast/api"] + }, + "features": { + "ghcr.io/devcontainers/features/docker-in-docker:2": {} + }, + "vscodeExtensions": ["ms-vscode.vscode-typescript-next"], + "skills": [], + "plugins": ["typescript-lsp@claude-plugins-official", "code-review@claude-plugins-official"] + }, + "terraform": { + "displayName": "Terraform インフラ", + "description": "Terraform による Infrastructure as Code", + "detection": { + "extensions": [".tf"] + }, + "features": { + "ghcr.io/devcontainers/features/terraform:1": {}, + "ghcr.io/devcontainers/features/aws-cli:1": {}, + "ghcr.io/dhoeric/features/google-cloud-cli:1": {} + }, + "vscodeExtensions": ["hashicorp.terraform"], + "skills": [], + "plugins": [] + }, + "nodejs": { + "displayName": "Node.js 汎用", + "description": "汎用 Node.js プロジェクト", + "detection": { + "files": ["package.json"] + }, + "features": {}, + "vscodeExtensions": ["ms-vscode.vscode-typescript-next"], + "skills": [], + "plugins": ["typescript-lsp@claude-plugins-official"] + } + }, + "detectionOrder": [ + "nextjs", + "flutter", + "android", + "spa-react", + "raycast", + "monorepo", + "terraform", + "npm-library", + "nodejs" + ] +} diff --git a/.gitignore b/.gitignore index aa8cdcab..a1113059 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,7 @@ __pycache__/ .vscode/* !.vscode/extensions.json !.vscode/settings.json +!.vscode/cspell-custom-words.txt !.vscode/templates/ .vscode/*.log .idea/ @@ -63,6 +64,9 @@ report.log .claude/settings.local.json .claude/plugins/known_marketplaces.json +# Claude config directory (Codespaces) +.claude-data/ + # Agent skills (installed via npx skills add) .agents/skills/ .claude/skills/vercel-* diff --git a/.vscode/cspell-custom-words.txt b/.vscode/cspell-custom-words.txt new file mode 100644 index 00000000..e69de29b diff --git a/.vscode/extensions.json b/.vscode/extensions.json index bbd3cfcc..8544872f 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,3 +1,14 @@ { - "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "ms-vscode.vscode-typescript-next"] + "recommendations": [ + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "ms-vscode.vscode-typescript-next", + "streetsidesoftware.code-spell-checker", + "usernamehw.errorlens", + "christian-kohler.path-intellisense", + "eamodio.gitlens", + "gruntfuggly.todo-tree", + "editorconfig.editorconfig", + "yoavbls.pretty-ts-errors" + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 27939163..0c57c6f3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,6 +3,16 @@ "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit" }, + "editor.bracketPairColorization.enabled": true, + "editor.guides.bracketPairs": true, + "editor.linkedEditing": true, + "editor.stickyScroll.enabled": true, + "editor.inlayHints.enabled": "onUnlessPressed", + "editor.minimap.enabled": false, + "editor.suggestSelection": "first", + "editor.quickSuggestions": { + "strings": true + }, "eslint.workingDirectories": [ { "mode": "auto" @@ -11,14 +21,62 @@ "files.eol": "\n", "files.trimTrailingWhitespace": true, "files.insertFinalNewline": true, + "files.exclude": { + "**/node_modules": true, + "**/.next": true, + "**/dist": true, + "**/build": true, + "**/.turbo": true, + "**/coverage": true + }, + "search.exclude": { + "**/node_modules": true, + "**/.next": true, + "**/dist": true, + "**/build": true, + "**/*.lock": true, + "**/package-lock.json": true, + "**/pnpm-lock.yaml": true + }, + "typescript.preferences.importModuleSpecifier": "relative", + "typescript.updateImportsOnFileMove.enabled": "always", + "typescript.suggest.autoImports": true, + "typescript.inlayHints.parameterNames.enabled": "literals", + "typescript.inlayHints.functionLikeReturnTypes.enabled": true, "editor.defaultFormatter": "esbenp.prettier-vscode", "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, + "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, "[json]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, - "[markdown]": { + "[jsonc]": { "editor.defaultFormatter": "esbenp.prettier-vscode" - } + }, + "[markdown]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.wordWrap": "on", + "editor.quickSuggestions": { + "comments": "off", + "strings": "off", + "other": "off" + } + }, + "[shellscript]": { + "editor.defaultFormatter": null + }, + "todo-tree.general.tags": ["TODO", "FIXME", "HACK", "XXX", "BUG", "NOTE"], + "todo-tree.highlights.defaultHighlight": { + "gutterIcon": true + }, + "errorLens.enabledDiagnosticLevels": ["error", "warning"], + "errorLens.excludeBySource": ["cSpell"], + "gitlens.codeLens.enabled": false, + "gitlens.currentLine.enabled": true } diff --git a/cspell.json b/cspell.json new file mode 100644 index 00000000..41305b7e --- /dev/null +++ b/cspell.json @@ -0,0 +1,48 @@ +{ + "$schema": "https://raw.githubusercontent.com/streetsidesoftware/cspell/main/packages/cspell-types/cspell.schema.json", + "version": "0.2", + "language": "en,ja", + "dictionaries": ["custom-words"], + "dictionaryDefinitions": [ + { + "name": "custom-words", + "path": "./.vscode/cspell-custom-words.txt", + "addWords": true + } + ], + "words": [ + "esbenp", + "dbaeumer", + "bradlc", + "vscjava", + "dhoeric", + "joshspicer", + "schlich", + "intellectronica", + "hookify", + "moby", + "supabase", + "planetscale", + "pubspec", + "devcontainer", + "devcontainers", + "codex", + "raycast", + "fullstack", + "monorepo", + "workspaces", + "commitlint", + "husky", + "vitest", + "pnpm", + "npx", + "tsx", + "nextjs", + "tailwindcss", + "vercel", + "keito", + "ghcr" + ], + "ignorePaths": ["node_modules", ".git", "dist", "build", ".next", "*.lock", "package-lock.json", "pnpm-lock.yaml"], + "ignoreRegExpList": ["/[a-z0-9]{40}/gi", "sha256:[a-f0-9]{64}"] +} diff --git a/docs/setup/README.md b/docs/setup/README.md index 37bbffc0..25bb5eed 100644 --- a/docs/setup/README.md +++ b/docs/setup/README.md @@ -311,6 +311,8 @@ Claude Code の操作前後に品質チェックを自動実行する仕組み | Android | java(17) + Gradle | | Raycast 拡張 | docker-in-docker | +> **Note**: `/setup-new-repo` コマンドはプロジェクトタイプを自動検出し、[project-presets.json](../../.devcontainer/templates/project-presets.json) の定義に基づいて適切な Features、Skills、Plugins を自動設定する。 + ### リリース管理(semantic-release) Node.js プロジェクトは **semantic-release** を標準とする。 @@ -395,9 +397,10 @@ jobs: ## 関連ドキュメント -| ドキュメント | 説明 | -| ----------------------------------------------------- | ------------------------------------------------- | -| [ツールカタログ](../tool-catalog.md) | 環境×ツールのマトリクス(何がどこで使えるか一覧) | -| [config-base イメージ](../using-config-base-image.md) | DevContainer ベースイメージの詳細 | -| [MCP サーバーガイド](../mcp-servers-guide.md) | Linear, Playwright, Supabase 等の MCP 連携 | -| [Sentry セットアップガイド](../sentry-setup-guide.md) | Next.js 14+ 向けの Sentry 設定 | +| ドキュメント | 説明 | +| -------------------------------------------------------------------------- | ------------------------------------------------- | +| [project-presets.json](../../.devcontainer/templates/project-presets.json) | プロジェクトタイプ別の推奨設定マスター | +| [ツールカタログ](../tool-catalog.md) | 環境×ツールのマトリクス(何がどこで使えるか一覧) | +| [config-base イメージ](../using-config-base-image.md) | DevContainer ベースイメージの詳細 | +| [MCP サーバーガイド](../mcp-servers-guide.md) | Linear, Playwright, Supabase 等の MCP 連携 | +| [Sentry セットアップガイド](../sentry-setup-guide.md) | Next.js 14+ 向けの Sentry 設定 |