5.2 KiB
5.2 KiB
| 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生成の指示(省略推奨)
アプリ指定の優先順位
include_appsが指定されている場合 → そのIDのアプリのみ対象include_categoriesのみ指定 → そのカテゴリに属するアプリが対象- 両方指定 →
include_appsとinclude_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 を使って今日のレポートを作成して"