commit-report-tool/.claude/skills/config-reader/SKILL.md
2026-04-03 19:31:32 +09:00

186 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 を使って今日のレポートを作成して"
```