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

5.2 KiB
Raw Permalink Blame History

name description
config-reader プロジェクト設定ファイルの構造と読み方。設定ファイルを扱うときに参照。

Config Reader

プロジェクト設定ファイルの構造と使用方法を説明します。

ファイル構造2ファイル分離

configs/
├── repos/           # リポジトリ構造定義(共有)
│   └── your-repo.yml
└── projects/        # プロジェクト設定(個別)
    └── your-project.yml

分離のメリット

  • 再利用性: リポジトリ構造は1箇所で管理、複数プロジェクトから参照
  • 柔軟性: プロジェクトごとに対象アプリを選択可能
  • 保守性: アプリ追加時はrepo定義のみ更新

リポジトリ構造定義repos/*.yml

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

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_appsinclude_categories の和集合

読み込み手順

1. プロジェクト設定を読み込む

cat configs/projects/your-project.yml

2. repo_config を解決してリポジトリ定義を読み込む

# repo_config: "repos/your-repo.yml" の場合
cat configs/repos/your-repo.yml

3. 対象アプリをフィルタリング

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']

コミットのアプリ分類

変更ファイルのパスから、どのアプリに属するか判定:

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

使用例

# レポートを生成
claude "configs/projects/your-project.yml を使って今日のレポートを作成して"