ubiquitous-language について
会話からドメイン用語を抽出し、ローカルの用語集ファイルにまとめるスキルです。曖昧さや同義語を示し、定義、用語間の関係、対話例を記載します。
主な機能
- 01会話からドメイン用語を抽出
- 02曖昧さと同義語の指摘
- 03標準用語と定義の提案
- 04UBIQUITOUS_LANGUAGE.md への書き込み
- 05分類した表と対話例の追加
活用シーン
- 01共有ドメイン用語集の作成
- 02用語の不統一の解消
- 03議論の進展に応じた用語集の更新
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mattpocock/ skills --skill ubiquitous-languageインストール後、Claude Code で/ubiquitous-languageを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yaml
詳細
ユビキタス言語
現在の会話からドメイン用語を抽出して形式化し、一貫した用語集としてローカルファイルに保存します。
プロセス
- 会話をスキャンし、ドメインに関連する名詞、動詞、概念を抽出します
- 問題を特定します:
- 同じ単語が異なる概念に使われている(曖昧さ)
- 同じ概念に異なる単語が使われている(同義語)
- 曖昧な用語や複数の意味で使われている用語
- 推奨する用語を選んだ、標準用語集を提案します
- 以下の形式で、作業ディレクトリにある
UBIQUITOUS_LANGUAGE.mdに書き込みます - 会話内で概要を出力します
出力形式
次の構成で 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を呼び出し、ファイルシステムレイヤーはそれらをローカルのシェルコマンドとして実行するだけです。」
再実行
同じ会話内で再び実行する場合:
- 既存の
UBIQUITOUS_LANGUAGE.mdを読み込みます - 以降の会話から新しい用語を取り込みます
- 理解が深まった場合は定義を更新します
- 新たな曖昧さがあれば再度指摘します
- 新しい用語を取り入れて会話例を書き直します
コメント
Markdown 対応