ワンクリックで
usdm
ソフトウェアプロジェクトや仕様書を解析し、USDM要求仕様書をMarkdownで作成してExcelを生成する
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
ソフトウェアプロジェクトや仕様書を解析し、USDM要求仕様書をMarkdownで作成してExcelを生成する
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | usdm |
| description | ソフトウェアプロジェクトや仕様書を解析し、USDM要求仕様書をMarkdownで作成してExcelを生成する |
| argument-hint | <対象のパス(ソースコード or 仕様書)> |
以下のガイドに従って $ARGUMENTS を解析対象として USDM 要求仕様書を作成してください。
このドキュメントは、AI エージェントが USDM (Universal Specification Describing Manner) 形式の要求仕様書を Markdown で作成し、Excel ファイルを生成するための手順書です。入力ソースとして ソースコード と 既存の仕様書・設計書 の両方に対応しています。
USDM はソフトウェアの要求を階層的に記述する手法です。以下の構造を持ちます:
コンポーネント(プロジェクト全体の要求)
└─ 上位要求(大きな機能単位の要求)
├─ 理由(なぜこの要求が必要か)
├─ 説明(補足情報)
└─ 下位要求(上位要求を実現するための具体的な要求)
├─ 理由
├─ 説明
└─ 仕様(実装レベルの具体的な記述)
# インストール(pip or uv)
pip install md2usdm
# 雛形生成
usdm new <プロジェクト名> <出力先ディレクトリ>
# シート追加
usdm add <出力先ディレクトリ> <シート名>
# Markdown → Excel 変換
md2usdm <出力先ディレクトリ> [出力.xlsx]
入力ソースに応じて A(ソースコード) または B(仕様書・設計書) のいずれかを実施する。
対象がソースコードの場合。
A-1. 全体像の把握
A-2. 機能の洗い出し
ソースコードのディレクトリ構造、モジュール、クラス、関数を走査し、ユーザー視点の機能を洗い出す。
注意点:
対象が既存の仕様書、設計書、要件定義書、提案書などのドキュメントの場合。
重要: ドキュメント「を」分析するのではなく、ドキュメント「に書かれているシステム」の要求を USDM にする。 仕様書はあくまで入力情報であり、USDM の対象はそのドキュメントが記述しているソフトウェア・システムである。
例: 「タスク管理アプリの設計書」が入力の場合
B-1. ドキュメントの読み込み
B-2. 対象システムの要求を抽出する
ドキュメントを読み、そこに記述されている対象システムが満たすべき要求を洗い出す。
注意点:
B-3. 重複・矛盾の整理
### 説明 に記載)洗い出した機能を以下の階層に整理する:
| レベル | USDM 用語 | 粒度の目安 | 例 |
|---|---|---|---|
| シート | カテゴリ | 大分類(3〜5個程度) | 入力処理、データ変換、出力処理 |
| 上位要求 | 機能要求 | シート内の主要機能(シートあたり2〜5個) | ファイル読み込み、形式検証 |
| 下位要求 | 詳細要求 | 上位要求の構成要素(上位あたり1〜5個) | CSV パース、エンコーディング検出 |
| 仕様 | 実装仕様 | テスト可能な具体的記述(下位あたり2〜8個) | UTF-8 と Shift_JIS を自動判別する |
設計の指針:
usdm new <プロジェクト名> <出力先ディレクトリ>
例:
usdm new MyApp examples/myapp
生成されるファイル:
examples/myapp/
├── index.md # ヘッダーテーブル + シート一覧
├── MyApp.md # コンポーネント(プロジェクト全体の要求)
├── MyApp.xlsx # 生成済み Excel
└── sheet01/
├── index.md
└── MyApp_R01/
├── MyApp_R01.md
└── MyApp_R01.DM01.md
ステップ 1-3 で設計したカテゴリの数だけシートを追加する。雛形生成時に sheet01 が 1 つ作られているので、2 つ目以降を追加する。
# 2 つ目のシート
usdm add examples/myapp "2.データ変換"
# 3 つ目のシート
usdm add examples/myapp "3.出力処理"
シート名の書式: {番号}.{カテゴリ名}(例: 1.入力処理、2.データ変換)
以下の順序で各ファイルを編集・作成する。
examples/myapp/
├── index.md # [自動生成済み] 編集不要
├── MyApp.md # コンポーネント
├── sheet01/
│ ├── index.md # シート index
│ ├── MyApp_R01/
│ │ ├── MyApp_R01.md # 上位要求 (u-file)
│ │ ├── MyApp_R01.DM01.md # 下位要求 (uu-file)
│ │ └── MyApp_R01.DM02.md # 下位要求 (uu-file)
│ └── MyApp_R02/
│ ├── MyApp_R02.md
│ └── MyApp_R02.DM01.md
├── sheet02/
│ ├── index.md
│ └── MyApp_R03/
│ ├── MyApp_R03.md
│ └── MyApp_R03.DM01.md
└── sheet03/
└── ...
命名規則:
{プロジェクト名}_R{連番:02d} — プロジェクト全体で通し番号{上位要求ID}.DM{連番:02d}【{下位要求ID}-{連番:02d}】プロジェクト全体の要求を 1 文で記述する。雛形のプレースホルダーを書き換える。
# 【MyApp】タスク管理アプリケーション
## 要求
タスクの作成・編集・削除・一覧表示を行うWebアプリケーションを提供する
### 理由
チームのタスク管理を効率化し、進捗を可視化するため
### 説明
記載無し
書式ルール:
# 【{プロジェクト名}】{タイトル} — 見出しに仕様番号を【】で囲んで記載## 要求 — 要求の本文(1〜3 文)### 理由 — なぜこの要求が必要か(1〜2 文)### 説明 — 補足説明。不要なら 記載無し と書く(Excel 上では空セルになる)usdm.py add で自動生成されたものを編集する。上位要求のリンク一覧を記述する。
↑ [MyApp](../index.md)
# 【MyApp】1.入力処理
## 要求
[MyApp: タスク管理アプリケーション](../MyApp.md "【MyApp】")
## 下位要求
- [R01 ファイル読み込み](./MyApp_R01/MyApp_R01.md "【MyApp_R01】")
- [R02 入力検証](./MyApp_R02/MyApp_R02.md "【MyApp_R02】")
書式ルール:
↑ [プロジェクト名](../index.md) — 親へのナビゲーション## 要求 の下: コンポーネントファイルへのリンク([表示名](パス "【仕様番号】"))## 下位要求 の下: 上位要求へのリンク一覧(- [ID タイトル](パス "【仕様番号】"))各上位要求を 1 ファイルで記述する。ディレクトリを作成してから中にファイルを置く。
↑ [1.入力処理](../index.md)
# 【MyApp_R01】ファイル読み込み
## 要求
各種形式のファイルを読み込み、内部データ構造に変換する
### 理由
複数のファイル形式をサポートし、ユーザーの既存データを取り込むため
### 説明
記載無し
## 下位要求
- [01 CSVパース](./MyApp_R01.DM01.md "【MyApp_R01.DM01】")
- [02 JSONパース](./MyApp_R01.DM02.md "【MyApp_R01.DM02】")
書式ルール:
↑ [シート名](../index.md) — 親シートへのナビゲーション# 【{仕様番号}】{タイトル} — 仕様番号は【】で囲む## 要求 / ### 理由 / ### 説明 — コンポーネントと同じ構造## 下位要求 — 下位要求へのリンク一覧各下位要求と、その仕様一覧を記述する。
↑ [【MyApp_R01】ファイル読み込み](./MyApp_R01.md "【MyApp_R01】")
# 【MyApp_R01.DM01】CSVパース
## 要求
CSV形式のファイルをパースし、ヘッダー行とデータ行を分離して内部構造に格納する
### 理由
CSVはデータ交換で最も一般的な形式であり、対応が必須であるため
### 説明
記載無し
## 仕様
| 種別 | 内容 | 仕様番号 |
| --- | --- | --- |
| 仕様 | カンマ区切りのCSVファイルを読み込む | 【MyApp_R01.DM01-01】 |
| 仕様 | 1行目をヘッダー行として認識する | 【MyApp_R01.DM01-02】 |
| 仕様 | ダブルクォートで囲まれたフィールド内のカンマをエスケープ処理する | 【MyApp_R01.DM01-03】 |
| 仕様 | UTF-8 と Shift_JIS のエンコーディングを自動判別する | 【MyApp_R01.DM01-04】 |
| 仕様 | パースエラー時にはエラー行番号と内容を報告する | 【MyApp_R01.DM01-05】 |
書式ルール:
↑ [【{親仕様番号}】{親タイトル}](./{親ファイル}.md "【{親仕様番号}】") — 親上位要求へのナビゲーション## 仕様 — Markdown テーブル形式の仕様一覧| 種別 | 内容 | 仕様番号 |仕様 とする【{下位要求ID}-{連番:02d}】すべての Markdown ファイルを記述したら、Excel を生成する。
md2usdm examples/myapp
examples/myapp/MyApp.xlsx が生成(または更新)される。
記載無し と書く(必ずこの 4 文字。Excel 上で空セルになる)仕様テーブルの内容に書式を付けることができる:
| Markdown | Excel での表示 |
|---|---|
**テキスト** | 赤フォント(変更箇所の強調等に使用) |
~~テキスト~~ | 取消線(廃止項目の表示等に使用) |
**~~テキスト~~** | 赤フォント + 取消線 |
以下は「電卓アプリ」を対象にした実行例です。
usdm new Calc examples/calc
usdm add examples/calc "2.計算処理"
この時点で sheet01(「1.要件」)と sheet02(「2.計算処理」)ができている。
sheet01 のシート名を変更するには examples/calc/index.md と examples/calc/sheet01/index.md を編集する。
examples/calc/index.md のシート一覧:
- [1.入力処理](./sheet01/index.md)
- [2.計算処理](./sheet02/index.md)
examples/calc/Calc.md:
# 【Calc】電卓アプリケーション
## 要求
四則演算と関数計算を行う電卓アプリケーションを提供する
### 理由
数値計算を手軽に行える環境を提供するため
### 説明
記載無し
↑ [Calc](../index.md)
# 【Calc】1.入力処理
## 要求
[Calc: 電卓アプリケーション](../Calc.md "【Calc】")
## 下位要求
- [R01 数式入力](./Calc_R01/Calc_R01.md "【Calc_R01】")
examples/calc/sheet01/Calc_R01/Calc_R01.md:
↑ [1.入力処理](../index.md)
# 【Calc_R01】数式入力
## 要求
ユーザーが入力した数式文字列を解析し、計算可能な構造に変換する
### 理由
自然な数式表記を受け付けることで直感的な操作を実現するため
### 説明
記載無し
## 下位要求
- [01 字句解析](./Calc_R01.DM01.md "【Calc_R01.DM01】")
examples/calc/sheet01/Calc_R01/Calc_R01.DM01.md:
↑ [【Calc_R01】数式入力](./Calc_R01.md "【Calc_R01】")
# 【Calc_R01.DM01】字句解析
## 要求
数式文字列をトークン列に分割する
### 理由
演算子の優先順位や括弧のネストを正しく処理するため
### 説明
記載無し
## 仕様
| 種別 | 内容 | 仕様番号 |
| --- | --- | --- |
| 仕様 | 数値リテラル(整数・小数)をトークンとして認識する | 【Calc_R01.DM01-01】 |
| 仕様 | 演算子(+, -, *, /)をトークンとして認識する | 【Calc_R01.DM01-02】 |
| 仕様 | 括弧((, ))をトークンとして認識する | 【Calc_R01.DM01-03】 |
| 仕様 | 不正な文字が含まれる場合はエラーを返す | 【Calc_R01.DM01-04】 |
md2usdm examples/calc
Excel 生成前に以下を確認する:
# 【{名前}】 の見出しがある## 下位要求 があり、上位要求へのリンクが正しい## 下位要求 があり、下位要求へのリンクが正しい## 仕様 テーブルがある【{ID}-{連番}】 形式で、下位要求内で連番が重複していない記載無し と記載している./ や ../ の階層が合っている)USDM ツールリポジトリの examples/ ディレクトリに完成例が 2 つある:
| ディレクトリ | 対象 | シート数 | 上位要求 | 下位要求 | 仕様数 |
|---|---|---|---|---|---|
examples/md2usdm/ | md2usdm.py(Markdown→Excel変換) | 3 | 9 | 12 | 69 |
examples/usdm2md/ | usdm2md.py(Excel→Markdown変換) | 3 | 7 | 11 | 77 |
これらのファイルを参考にして、記述スタイルやファイル構成を模倣すること。