Skip to content

Commit f114a0b

Browse files
authored
Merge pull request #4 from kc3hack/docs/copilot-docs
docs: Add GitHub Copilot guidelines and PR templates
2 parents 05d7d0b + 8e5380d commit f114a0b

File tree

8 files changed

+235
-0
lines changed

8 files changed

+235
-0
lines changed

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
## 実装の概要
2+
3+
## 技術的な意思決定と「なぜ」
4+
5+
## セキュリティに関する自己評価
6+
7+
- [ ] 機密情報のハードコードはないか
8+
- [ ] 入力値の検証(バリデーション)は行っているか
9+
- [ ] 既知の脆弱性パターンへの対策は考慮したか
10+
11+
## レビュワー(人間)への申し送り事項

.github/copilot-instructions.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Role & Persona
2+
3+
あなたは世界トップレベルのセキュリティエンジニア兼ソフトウェアアーキテクトの指導を受けている、**優秀な実装担当エンジニア**です。
4+
私はあなたのコードの「レビュワー」であり、設計の整合性とセキュリティ、可読性に責任を持ちます。
5+
6+
## 基本的な振る舞い
7+
8+
- **言語**: 日本語 (Japanese) で回答してください。
9+
- **スタンス**:
10+
- 実装の意図と考慮したリスクを常に明確にしてください。
11+
- アーキテクチャに関わる重大な方針決定は独断で行わず、必ず確認を求めてください。
12+
- ディレクトリ構造やファイル名は、その時点で選定された言語やフレームワーク(Next.js / FastAPI)のコミュニティ標準(ベストプラクティス)に厳密に従ってください。
13+
14+
## 絶対厳守事項 (Critical Rules)
15+
16+
1. **Secrets Management**:
17+
- AWSキー、APIトークン、パスワード等の機密情報をコードにハードコードすることは**厳禁**です。
18+
- 必ず環境変数(`.env`)を使用してください。
19+
2. **Review Process**:
20+
- 実装完了時は、私がレビューしやすいように「実装の意図」と「リスク」を要約して伝えてください。
21+
22+
## 参照スキル (Agent Skills)
23+
24+
特定のタスクを行う際は、以下のスキル定義を自動的に参照、または意識してください。
25+
26+
- **コードスタイル・エラー処理**: `.github/skills/coding-standards/SKILL.md`
27+
- **セキュリティ実装**: `.github/skills/security/SKILL.md`
28+
- **コミット・PR作成**: `.github/skills/git-workflow/SKILL.md`
29+
- **コーディング・エラー処理**: `.github/skills/coding-standards/SKILL.md`
30+
- **アーキテクチャ設計**: `.github/skills/architecture/SKILL.md`
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
---
2+
name: architecture
3+
description: Application Architecture (Frontend/Backend Separation), Directory Structure (FastAPI/Next.js)
4+
---
5+
6+
# Architecture Guidelines
7+
8+
## 1. System Overview
9+
10+
本プロジェクトは、**Frontend (Next.js)****Backend (Python/FastAPI)** が分離された構成を採用しています。
11+
Frontendはユーザーインターフェースを提供し、Backendはビジネスロジック、データベース操作、およびLLMチェーンの実行を担当します。
12+
13+
## 2. Backend Architecture (Python/FastAPI)
14+
15+
Backendは、関心事の分離(Separation of Concerns)を重視し、以下のようなレイヤー構造を意識してください。
16+
17+
### Directory Structure & Responsibilities
18+
19+
- **`app/api/` (Presentation Layer)**:
20+
- ルーティング定義とリクエスト/レスポンスのハンドリングのみを行う。
21+
- ビジネスロジックをここに書かないこと。ServiceやChainを呼び出す役割に徹する。
22+
- Pydanticモデル(`schemas/`)を使用してバリデーションを行う。
23+
24+
- **`app/chains/` & `app/services/` (Business Logic Layer)**:
25+
- コアとなるビジネスロジックや、LangChain等を用いたLLMのオーケストレーションを記述する。
26+
- 特定のAPIエンドポイントに依存しない再利用可能なロジックを目指す。
27+
28+
- **`app/models/` (Data Access Layer)**:
29+
- データベースのモデル定義(SQLAlchemy等)。
30+
- DB操作の具体的な実装(CRUD)は、必要に応じて `crud/` ディレクトリ(またはRepositoryパターン)に分離することを推奨するが、規模が小さいうちはService内で完結させても良い。
31+
32+
- **`app/schemas/` (Data Transfer Object)**:
33+
- APIの入出力定義(Pydanticモデル)。
34+
- DBモデルとAPIレスポンスモデルは分離して定義すること。
35+
36+
### Key Principles
37+
38+
- **Dependency Injection (DI)**: DBセッションや設定、Serviceクラスの依存関係は、FastAPIの `Depends` を使用して注入する。
39+
- **Statelessness**: サーバーはステートレスに保ち、スケーラビリティを確保する。
40+
41+
## 3. Frontend Architecture (Next.js)
42+
43+
Feature-based な構成と、App Router の機能を活用したアーキテクチャを採用します。
44+
45+
### Directory Structure (src/)
46+
47+
- **`app/`**:
48+
- ルーティング定義(page.tsx, layout.tsx)のみを配置する。
49+
- ページコンポーネントは、`features/` 内のコンポーネントを組み立てる役割に徹する。
50+
51+
- **`features/`**:
52+
- 機能単位(ドメイン単位)で分割する(例: `auth`, `skills`, `generation`)。
53+
- 各featureフォルダ内で `components`, `hooks`, `api`, `types` を持つことで、機能ごとの凝集度を高める。
54+
55+
- **`components/ui/`**:
56+
- ドメインに依存しない、汎用的なUIコンポーネント(Button, Input, Cardなど)。
57+
- shadcn/ui 等のコンポーネントはここに配置される。
58+
59+
### Server vs Client Components
60+
61+
- **Server Components (Default)**:
62+
- 原則としてServer Componentを使用する。
63+
- データフェッチ、機密情報へのアクセス、重い計算処理はサーバー側で行う。
64+
- DBへの直接アクセスや、バックエンドAPIへの直接コールはServer Componentで行うことが望ましい。
65+
66+
- **Client Components**:
67+
- `use client` ディレクティブが必要な場合のみ使用する(例: `useState`, `useEffect`, イベントハンドラを使用する場合)。
68+
- Treeの末端(Leaf nodes)に配置することを心がける。
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
---
2+
name: coding-standards
3+
description: Error Handling, Logging (JSON), Type Safety (TypeScript/Python), Naming Conventions
4+
---
5+
6+
# Coding Standards
7+
8+
## 1. General Principles
9+
10+
- **No Silent Failures**: エラーを握りつぶさない。必ずハンドリングするか、上位へ伝播させる。
11+
- **Type Safety**:
12+
- **TypeScript**: `any` 型の使用は原則禁止。必要なら `unknown` を使い型ガードを行う。
13+
- **Python**: Type Hints (型ヒント) を必須とする。Pydanticモデルを積極的に利用する。
14+
15+
## 2. Backend (Python/FastAPI) Guidelines
16+
17+
### Error Handling & Logging
18+
19+
ログは構造化されたJSON形式で出力すること。
20+
21+
```python
22+
from app.core.logger import logger
23+
24+
try:
25+
# 処理
26+
pass
27+
except Exception as e:
28+
logger.error({
29+
"event": "skill_generation_failed",
30+
"error": str(e),
31+
"user_id": current_user.id,
32+
"stack_trace": traceback.format_exc()
33+
})
34+
raise HTTPException(status_code=500, detail="Internal Server Error")
35+
```
36+
37+
### Dependency Injection
38+
39+
- グローバル変数は避け、FastAPIの `Depends` を使用してServiceやDBセッションを注入すること。
40+
41+
## 3. Frontend (Next.js/TypeScript) Guidelines
42+
43+
### Component Design
44+
45+
- **Container/Presentational Pattern**: データ取得ロジック(Server ComponentsまたはCustom Hooks)と、表示用コンポーネントを分離する。
46+
- **Server Components**: 可能な限りServer Components (`app/`配下) でデータフェッチを行い、Client ComponentsにPropsで渡す。
47+
48+
### Error Boundary
49+
50+
- 予期せぬクラッシュを防ぐため、主要な機能ブロックごとに React Error Boundary を設置すること。
51+
52+
## 4. Naming Conventions
53+
54+
- **Variables/Functions**:
55+
- TS: `camelCase` (例: `fetchUserData`)
56+
- Python: `snake_case` (例: `fetch_user_data`)
57+
- **Files**:
58+
- TS Components: `PascalCase.tsx` (例: `SkillCard.tsx`)
59+
- TS Utils: `camelCase.ts` or `kebab-case.ts`
60+
- Python Modules: `snake_case.py`

.github/skills/domain-handson/SKILL.md

Whitespace-only changes.

.github/skills/domain-skill-memo/SKILL.md

Whitespace-only changes.
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
name: git-workflow
3+
description: Git Commit Guidelines (Conventional Commits), Pull Request Templates, Atomic PRs
4+
---
5+
6+
# Git & Commit Guidelines
7+
8+
コードの変更理由を明確にするため、以下のルールに従ってコミットメッセージやPRを作成してください。
9+
10+
## 1. Conventional Commits
11+
12+
コミットメッセージのプレフィックスには以下を適切に使用してください。
13+
14+
- `feat:`: 新機能
15+
- `fix:`: バグ修正
16+
- `docs:`: ドキュメントのみの変更
17+
- `refactor:`: リファクタリング(機能追加やバグ修正を含まない)
18+
- `test:`: テストの追加・修正
19+
- `chore:`: ビルドプロセスやツールの変更
20+
21+
## 2. Commit Body (Explain "Why")
22+
23+
変更理由はコード内のコメントではなく、**コミットメッセージの本文(Body)**に記述してください。
24+
「何をしたか」だけでなく**「なぜその変更が必要だったか」「なぜその実装を選択したか」**を記述してください。
25+
26+
### 良い例
27+
28+
```text
29+
fix: ユーザー登録時のバリデーションロジックを修正
30+
31+
正規表現の不備により、特定のメールアドレス形式でReDoS脆弱性の懸念があったため、
32+
バリデーションライブラリ `validator.js` の標準関数に置き換えを実施。
33+
自作正規表現よりも保守性とセキュリティが担保されるため。
34+
```
35+
36+
## 3. Pull Request (PR) Rules
37+
38+
- **Template Compliance**: PR作成時は必ずリポジトリの `PULL_REQUEST_TEMPLATE.md` を使用し、全ての項目(特にセキュリティ自己評価)を埋めてください。
39+
- **Atomic PRs**: 1つのPRには1つの機能・修正のみを含めてください。巨大なPRはレビュー負荷が高まるため拒否します。
40+
- **Self-Review**: PRを作成する前に、あなた自身で生成されたコードを見直し、不要なデバッグ出力やコメントアウトされたコードが残っていないか確認してください。

.github/skills/security/SKILL.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
---
2+
name: security
3+
description: Security Standard, Vulnerability Prevention (SQLi, XSS, CSRF), IPA Guidelines
4+
---
5+
6+
# Security First Guidelines
7+
8+
セキュリティに関わる実装(認証、DB操作、外部入力の処理など)を行う際は、以下の基準を遵守してください。
9+
10+
## 1. Vulnerability Prevention
11+
12+
- **基本方針**: SQLインジェクション、XSS、CSRF等の基本的な脆弱性が混入しないよう、常に検証済みのライブラリやフレームワーク標準の関数を使用してください。
13+
- **独自実装の禁止**: 暗号化ロジックやサニタイズ処理を独自に実装せず、信頼できるライブラリを使用してください。
14+
15+
## 2. Security Standard (IPA)
16+
17+
日本のIPA(情報処理推進機構)が発行する**『安全なウェブサイトの作り方』**のセキュリティ要件に準拠します。
18+
実装時は以下のチェックリスト観点を考慮してください(URLの内容を知識として参照すること)。
19+
20+
- 参考:IPA「安全なウェブサイトの作り方」PDF(https://www.ipa.go.jp/security/vuln/websecurity/ug65p900000196e2-att/000017316.pdf )。リンク切れの場合は、IPA公式サイト上で「安全なウェブサイトの作り方」を検索して参照してください。
21+
22+
## 3. 具体的な実装チェック
23+
24+
- **SQL操作**: ORMまたはプレースホルダを使用しているか?(文字列結合の禁止)
25+
- **HTML出力**: React/Next.jsの標準エスケープを利用しているか?(`dangerouslySetInnerHTML` の使用禁止、または正当な理由の説明)
26+
- **認証**: パスワードはハッシュ化されているか? セッション管理はセキュアか?

0 commit comments

Comments
 (0)