feat: コミットレポートツール(コミネコ)初期コミット

Made-with: Cursor
This commit is contained in:
hiroki ito
2026-04-03 19:31:32 +09:00
commit c872debe4b
29 changed files with 4344 additions and 0 deletions
+185
View File
@@ -0,0 +1,185 @@
---
name: config-reader
description: プロジェクト設定ファイルの構造と読み方。設定ファイルを扱うときに参照。
---
# Config Reader
プロジェクト設定ファイルの構造と使用方法を説明します。
## ファイル構造(2ファイル分離)
```
configs/
├── repos/ # リポジトリ構造定義(共有)
│ └── your-repo.yml
└── projects/ # プロジェクト設定(個別)
└── your-project.yml
```
### 分離のメリット
- **再利用性**: リポジトリ構造は1箇所で管理、複数プロジェクトから参照
- **柔軟性**: プロジェクトごとに対象アプリを選択可能
- **保守性**: アプリ追加時はrepo定義のみ更新
---
## リポジトリ構造定義(repos/*.yml)
```yaml
repository:
owner: your-username
name: your-web-app
description: リポジトリの説明
# 全アプリ/ツールの定義
apps:
- id: my-app # 一意のID(プロジェクトから参照)
path: "app/" # ディレクトリパス
name: "Webアプリ" # 正式名称(レポートで使用)
short_name: "アプリ" # 短縮名(タグで使用)
icon: "smartphone" # アイコン名
color: "blue" # Tailwind色名
category: "main" # カテゴリID
# カテゴリ定義
categories:
main:
name: "Webプラットフォーム"
description: "Webサービスのコアシステム"
```
### フィールド説明
| フィールド | 用途 |
|-----------|------|
| `id` | アプリの一意識別子(プロジェクトから参照) |
| `path` | コミット分類用のディレクトリパス |
| `name` | 正式名称(アプリ別レポートのセクション名) |
| `short_name` | 短縮名(サマリーのタグ表示) |
| `icon` | Lucideアイコン名 |
| `color` | Tailwind CSS色名 |
| `category` | カテゴリID(グループ化用) |
---
## プロジェクト設定(projects/*.yml)
```yaml
project:
name: "開発プロジェクト"
description: "プロジェクトの説明"
# 参照するリポジトリ定義(相対パス)
repo_config: "repos/your-repo.yml"
# 対象アプリの指定(2つの方法)
include_apps: # 方法1: IDで個別指定
- my-app
- my-web
- my-backend
include_categories: # 方法2: カテゴリで一括指定
- main
# Slack設定
slack:
token_env: SLACK_BOT_TOKEN # トークンの環境変数名
channel_env: SLACK_CHANNEL # チャンネルIDの環境変数名
channel_name: "#your-channel" # 参考用
# レポート対象メンバー(空 = 全員)
target_authors: []
# ワンポイントTIPS設定(オプション)
tips:
enabled: true # TIPSを生成するか
# 以下はオプション(省略時はAIが変更内容から自動判断)
# title: "ワンポイントTIPS" # 図解のタイトル(デフォルト: "ワンポイントTIPS")
# prompt: "カスタムプロンプト" # TIPS生成の指示(省略推奨)
```
### アプリ指定の優先順位
1. `include_apps` が指定されている場合 → そのIDのアプリのみ対象
2. `include_categories` のみ指定 → そのカテゴリに属するアプリが対象
3. 両方指定 → `include_apps` と `include_categories` の和集合
---
## 読み込み手順
### 1. プロジェクト設定を読み込む
```bash
cat configs/projects/your-project.yml
```
### 2. repo_config を解決してリポジトリ定義を読み込む
```bash
# repo_config: "repos/your-repo.yml" の場合
cat configs/repos/your-repo.yml
```
### 3. 対象アプリをフィルタリング
```python
import yaml
# プロジェクト設定を読み込み
with open('configs/projects/your-project.yml') as f:
project = yaml.safe_load(f)
# リポジトリ定義を読み込み
repo_path = f"configs/{project['repo_config']}"
with open(repo_path) as f:
repo = yaml.safe_load(f)
# 対象アプリをフィルタリング
include_apps = set(project.get('include_apps', []))
include_categories = set(project.get('include_categories', []))
target_apps = []
for app in repo['apps']:
if app['id'] in include_apps:
target_apps.append(app)
elif app['category'] in include_categories:
target_apps.append(app)
# include_apps も include_categories も空なら全アプリ対象
if not include_apps and not include_categories:
target_apps = repo['apps']
```
---
## コミットのアプリ分類
変更ファイルのパスから、どのアプリに属するか判定:
```python
def classify_commit(changed_files, target_apps):
"""コミットの変更ファイルからアプリを特定"""
app_commits = {}
for file_path in changed_files:
for app in target_apps:
if file_path.startswith(app['path']):
app_id = app['id']
if app_id not in app_commits:
app_commits[app_id] = []
app_commits[app_id].append(file_path)
break
return app_commits
```
---
## 使用例
```bash
# レポートを生成
claude "configs/projects/your-project.yml を使って今日のレポートを作成して"
```