agentleFS
satoh-y-0323satoh-y-0323/claude-code-conductor/.claude/skills/extract-lib/SKILL.md

extract-lib

Skill1 starsChanged 15 days agoMITView on GitHub

複数プロジェクトから共通コードを解析・抽出してライブラリ設計案とスケルトンコードを生成する。

The file

Files
SKILL.md

extract-lib

複数プロジェクトのコードを横断解析し、共通要素を抽出してライブラリ設計・スケルトン生成を行う。


Step 0: 規約ファイルを読み込む

.claude/rules/coding-standards.md と .claude/rules/project-conventions.md を Read する。

どちらも存在しない場合: 以下を表示して終了する:

規約ファイルが見つかりません。先に /setup を実行してプロジェクト規約を設定してください。

存在する場合: 以下を抽出して以降のステップで使用する:

  • 使用言語・フレームワーク(ファイル拡張子含む)
  • 命名規則(クラス名・関数名・定数名のパターン)
  • ファイル・ディレクトリ構成の慣習
  • その他の重要な規約

Step 1: 解析対象プロジェクトのパスを収集する

1回目のパス入力

自由入力のため AskUserQuestion は使わず、テキストで尋ねる(AskUserQuestion と c3_ask_user_question は選択肢が必須):

解析対象の1つ目のプロジェクトの絶対パスを入力してください(例: C:/work/project-a)

Glob で {入力パス}/** を検索してパスが存在するか確認する。存在しない場合は「パスが見つかりません」と伝えて再入力させる。

2回目以降のパス追加

AskUserQuestion ツール:

{
  "questions": [{
    "question": "別のプロジェクトを追加しますか?",
    "header": "パス追加",
    "options": [
      { "label": "追加する", "description": "さらに別のプロジェクトパスを入力する" },
      { "label": "これで完了", "description": "入力済みのプロジェクトで解析を開始する" }
    ]
  }]
}

「追加する」の場合は続けてパスを入力・検証し、「これで完了」になるまで繰り返す。 入力済みプロジェクトが1つのみの状態で「これで完了」が選ばれた場合は「最低2プロジェクト必要です」と伝えて再度選択させる。


Step 2: 出力形式を確認する

AskUserQuestion ツール:

{
  "questions": [{
    "question": "解析結果をどの形式で出力しますか?",
    "header": "出力形式",
    "options": [
      { "label": "設計のみ", "description": "共通化候補リストとライブラリ設計案をレポートとして出力する" },
      { "label": "設計 + スケルトン生成", "description": "設計案に加えてライブラリのスケルトンコードも生成する" }
    ]
  }]
}

「設計 + スケルトン生成」が選ばれた場合、続けて出力先をテキストで尋ねる(自由入力のため AskUserQuestion は使わない):

生成するライブラリの出力先ディレクトリの絶対パスを入力してください(例: C:/work/shared-lib)


Step 3: 解析エージェントを起動する

Agent ツールで解析を実行する。以下のプロンプトを使用する:

あなたはコードベース横断解析エージェントです。
以下の複数プロジェクトを解析し、共通化すべき要素を抽出してください。

## 解析対象プロジェクト
{収集したプロジェクトパスのリスト}

## プロジェクト規約(.claude/rules/coding-standards.md / .claude/rules/project-conventions.md より)
{Step 0 で抽出した言語・フレームワーク・命名規則・その他規約}

## 探すもの

各プロジェクトから次を探す。検索は規約の言語・拡張子に合わせ、複数プロジェクトで類似が見つかったら本文を Read して比較する。

- 定数・マジック値(文字列・数値・タイムアウト値・URL パターン等)
- 小規模ユーティリティ(文字列・日付・数値フォーマット、バリデーション、変換)
- 共通ロジック(エラーハンドリング、ログ出力のラッパー、外部 API・HTTP 通信、ページネーション・ソート・フィルタリング)
- 静的型付き言語では、同一概念の型・インターフェース・DTO の個別定義

## 出力形式

以下の形式で結果をまとめること。

---

## 共通化候補リスト

### 高優先度(完全一致・ほぼ同一のコードが複数プロジェクトに存在)
| 種別 | 内容 | 発見場所(プロジェクト名:ファイルパス) |
|---|---|---|
| 定数 | ... | ProjectA: path, ProjectB: path |

### 中優先度(類似ロジック・命名が異なるが同一目的)
| 種別 | 内容 | 発見場所 | 差異の概要 |
|---|---|---|---|

### 低優先度(概念的共通・共通化は任意)
| 種別 | 内容 | 備考 |
|---|---|---|

## ライブラリ設計案

**推奨ライブラリ名**: {プロジェクト規約の命名規則に基づいた名前}

**ディレクトリ構成**:

{ライブラリ名}/ ├── {モジュール1}/ │ ├── {ファイル} │ └── ... ├── {モジュール2}/ └── ...


**公開API一覧**:
| モジュール | 名前 | 種別 | 責務 |
|---|---|---|---|

**移行時の注意点**: {既存プロジェクトからライブラリへ移行する際の注意事項}

---

Skill ツールで report-timestamp を呼んでタイムスタンプを取得し、解析結果を .claude/reports/lib-extract-{timestamp}.md に Write で保存する。


Step 4: 解析結果の提示・承認

レポートの主要な発見事項(高優先度の候補数・推奨ライブラリ構成)を要約してテキストで提示する。

AskUserQuestion ツール:

{
  "questions": [{
    "question": "解析結果を確認してください。どうしますか?",
    "header": "確認",
    "options": [
      { "label": "承認・次へ進む", "description": "この設計案でスケルトン生成または完了する" },
      { "label": "設計案を修正する", "description": "フィードバックを入力して設計を見直す" },
      { "label": "ここで終了する", "description": "レポートのみ保存して終了する" }
    ]
  }]
}

「承認・次へ進む」の場合: セッションファイル(.claude/memory/sessions/*.tmp の最新)の ## うまくいったアプローチ に以下を追記する:

- [extract-lib] {承認された設計アプローチの要点(ライブラリ名・モジュール分割方針・特に有効だった抽出種別)}

「設計案を修正する」の場合: フィードバックをテキストで尋ねる(自由入力のため AskUserQuestion は使わない):

どのように修正してほしいですか?(例: この定数は除外したい・命名を変えたい・モジュール分割を変えたい)

セッションファイルの ## 試みたが失敗したアプローチ に以下を追記する:

- [extract-lib] {否認された設計案の何が問題だったか(フィードバック内容を要約)}

フィードバックを追加指示としてプロンプトに加えて Step 3 の解析エージェントを再起動する。

「ここで終了する」の場合: Step 6 の完了メッセージ(スケルトンなし)を表示して終了する。


Step 5: スケルトン生成(Step 2 で「設計 + スケルトン生成」を選んだ場合のみ)

Agent ツールでスケルトンコード生成を行う:

あなたはライブラリスケルトン生成エージェントです。
以下の設計案に基づいてライブラリのスケルトンコードを生成してください。

## 設計案
{Step 3 で生成したレポートのライブラリ設計案セクション全体}

## プロジェクト規約
{Step 0 で抽出した規約}

## 出力先
{Step 2 で入力した出力先パス}

## 生成方針
- 実際のロジックは TODO コメントを残した空実装にする(シグネチャと型は完成状態で)
- 公開APIのドキュメントコメント(JSDoc / Javadoc / docstring 等)は完成状態で生成する
- 出力先ディレクトリ直下に README.md を生成する
  - 概要・インストール方法・使い方(基本的な呼び出し例)を記載する
  - 既存プロジェクトからの移行例を1つ記載する
- 言語の標準的なパッケージ管理ファイル(package.json / build.gradle / pyproject.toml 等)も生成する

Step 6: セッション記録・完了メッセージ

セッションファイルへの記録

セッションファイル(.claude/memory/sessions/*.tmp の最新)の JSON ブロック "patterns" 配列に、 今回の解析で発見した共通化パターンを追記する。

記録する内容(1〜3件に絞る):

  • 高優先度で発見された共通要素の傾向(例: 「このプロジェクト群では日付フォーマット関数が全プロジェクトに重複する」)
  • 有効だったモジュール分割のアプローチ(例: 「定数・ユーティリティ・型を別モジュールに分けると承認されやすい」)

記録形式:

{
  "id": "extract_lib_{内容を表す英数字ID}",
  "description": "どんなプロジェクト群でどんな共通化パターンが見つかるかを1文で"
}

完了メッセージ

以下を表示して終了する:

完了しました。

レポート  : .claude/reports/lib-extract-{timestamp}.md
スケルトン: {出力先パス}(生成した場合)

次のステップ:
1. レポートの設計案を確認し、必要に応じて調整する
2. 各プロジェクトの該当箇所をライブラリに置き換える
3. /review-phase でライブラリのコードレビューを実施する

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.