mcpField
U
ubiquitous-language

ubiquitous-language

github.com/mattpocock開発305.7k197.2k 回インストール1 日前に更新
リポジトリ

ubiquitous-language について

会話からドメイン用語を抽出し、ローカルの用語集ファイルにまとめるスキルです。曖昧さや同義語を示し、定義、用語間の関係、対話例を記載します。

主な機能

  1. 01会話からドメイン用語を抽出
  2. 02曖昧さと同義語の指摘
  3. 03標準用語と定義の提案
  4. 04UBIQUITOUS_LANGUAGE.md への書き込み
  5. 05分類した表と対話例の追加

活用シーン

  1. 01共有ドメイン用語集の作成
  2. 02用語の不統一の解消
  3. 03議論の進展に応じた用語集の更新

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mattpocock/skills --skill ubiquitous-language

インストール後、Claude Code で/ubiquitous-languageを入力して読み込まれたか確認します。

同梱ファイルagents/openai.yaml

詳細

ユビキタス言語

現在の会話からドメイン用語を抽出して形式化し、一貫した用語集としてローカルファイルに保存します。

プロセス

  1. 会話をスキャンし、ドメインに関連する名詞、動詞、概念を抽出します
  2. 問題を特定します:
    • 同じ単語が異なる概念に使われている(曖昧さ)
    • 同じ概念に異なる単語が使われている(同義語)
    • 曖昧な用語や複数の意味で使われている用語
  3. 推奨する用語を選んだ、標準用語集を提案します
  4. 以下の形式で、作業ディレクトリにある UBIQUITOUS_LANGUAGE.md に書き込みます
  5. 会話内で概要を出力します

出力形式

次の構成で UBIQUITOUS_LANGUAGE.md ファイルを作成します:

# Ubiquitous Language

## Order lifecycle

| Term        | Definition                                              | Aliases to avoid      |
| ----------- | ------------------------------------------------------- | --------------------- |
| **Order**   | A customer's request to purchase one or more items      | Purchase, transaction |
| **Invoice** | A request for payment sent to a customer after delivery | Bill, payment request |

## People

| Term         | Definition                                  | Aliases to avoid       |
| ------------ | ------------------------------------------- | ---------------------- |
| **Customer** | A person or organization that places orders | Client, buyer, account |
| **User**     | An authentication identity in the system    | Login, account         |

## Relationships

- An **Invoice** belongs to exactly one **Customer**
- An **Order** produces one or more **Invoices**

## Example dialogue

> **Dev:** "When a **Customer** places an **Order**, do we create the **Invoice** immediately?"
> **Domain expert:** "No — an **Invoice** is only generated once a **Fulfillment** is confirmed. A single **Order** can produce multiple **Invoices** if items ship in separate **Shipments**."
> **Dev:** "So if a **Shipment** is cancelled before dispatch, no **Invoice** exists for it?"
> **Domain expert:** "Exactly. The **Invoice** lifecycle is tied to the **Fulfillment**, not the **Order**."

## Flagged ambiguities

- "account" was used to mean both **Customer** and **User** — these are distinct concepts: a **Customer** places orders, while a **User** is an authentication identity that may or may not represent a **Customer**.

ルール

  • 明確な方針を示してください。 同じ概念に複数の単語がある場合は、最適なものを選び、避けるべき別名を記載します。
  • 曖昧さを明示してください。 会話で曖昧に使われている用語があれば、「曖昧さとして指摘された用語」セクションで取り上げ、明確な推奨事項を示します。
  • ドメインの専門家に関係する用語のみを含めてください。 ドメイン用語として意味を持たないモジュール名やクラス名は省きます。
  • 定義は簡潔にしてください。 1文以内にします。用語が何であるかを定義し、何をするかは定義しません。
  • 関係性を示してください。 用語名は太字にし、明らかな場合は多重度を表します。
  • ドメイン用語のみを含めてください。 ドメイン固有の意味がない限り、一般的なプログラミング概念(配列、関数、エンドポイント)は省きます。
  • 自然なまとまりが生まれる場合は、複数の表に分けてください(例:サブドメイン、ライフサイクル、アクターごと)。各グループには独自の見出しと表を設けます。すべての用語が一貫した単一ドメインに属する場合は、無理に分けず、1つの表にまとめてもかまいません。
  • 会話例を作成してください。 用語が自然にやり取りされる様子を示す、開発者とドメインの専門家による短いやり取り(3~5往復)を記載します。この会話では、関連用語の境界を明確にし、用語を正確に使います。

会話例

開発者: 「Docker なしで同期サービスをテストするにはどうすればよいですか?」

ドメインの専門家: 「Docker レイヤーの代わりにファイルシステムレイヤーを指定してください。同じサンドボックスサービスインターフェースを実装していますが、ローカルディレクトリをサンドボックスとして使います。」

開発者: 「つまり、同期インでも引き続きバンドルを作成して展開するのですか?」

ドメインの専門家: 「そのとおりです。同期サービスは、どのレイヤーと通信しているかを認識しません。exec と copyIn を呼び出し、ファイルシステムレイヤーはそれらをローカルのシェルコマンドとして実行するだけです。」

再実行

同じ会話内で再び実行する場合:

  1. 既存の UBIQUITOUS_LANGUAGE.md を読み込みます
  2. 以降の会話から新しい用語を取り込みます
  3. 理解が深まった場合は定義を更新します
  4. 新たな曖昧さがあれば再度指摘します
  5. 新しい用語を取り入れて会話例を書き直します

コメント