🐺

パターン・ランゲージでチームとAIの認識を揃える

に公開

はじめに

本記事は、「パターン・ランゲージ」という考え方を用いて、AIとのコミュニケーションにも応用できるか試してみた話です。

背景

ソフトウェア開発の分野で(特にXP界隈などで)パターン・ランゲージは知られています。
代表的なものとしてデザインパターンやアジャイル開発のXPなどがあります。

人と人がコミュニケーションを取る際に共通の言語としてパターン・ランゲージを活用することで、認識の齟齬を減らし、円滑なコミュニケーションが可能になることが知られています。

自然言語で対話ができる現在であれば、人とAIにおいても同様に共通のパターンを組み合わせた言語でコミュニケーションが取れるのではないかと考え始めたのがきっかけです。

パターン・ランゲージとは

パタン・ランゲージ (pattern language) は、クリストファー・アレグザンダーが提唱した、建築・都市計画に関わる理論。単語が集まって文章となり、詩が生まれるように、パターンが集まってランゲージとなり、このパタン・ランゲージを用いて生き生きとした建物やコミュニティを形成することができるとされる。

https://ja.wikipedia.org/wiki/パタン・ランゲージ

パターン・ランゲージがもたらすもの

パターン・ランゲージがあることでコミュニケーションにもたらす価値として以下のようなものが挙げられます。

  • 認識するための共通言語
  • 思考の構成
  • ボキャブラリー

これらをAIにも適用できる形に変換できれば、同様の価値がもたらされます。

XPの文脈から考える

XPの文脈から考えてみると、XPはプロセスをパターンとして表現したパターン・ランゲージです。

その中には「ストーリー」というプラクティス(パターン)が存在します。「ストーリー」というプラクティスは計画作りを支援するだけでなく、開発するシステムを開発者以外が読んでも理解できるような言葉にすることで、開発者と非開発者のコミュニケーションを円滑にする側面もあります。

# 例
ユーザーは記事のタイトルを任意の値で登録できる

ストーリーをパターンとして捉える

ストーリーはシステムの要素を表現するキーワード(単語)が集まって形成されています。

先ほどのストーリーを例にすると、一見シンプルな文章ですが、「ユーザー」「記事」「タイトル」「任意の値」「登録」というキーワード(単語)が含まれています。このキーワードはシステムの要素を表現していて、これらのキーワードが集まってストーリーを形成していると捉えることができます。

このストーリーをAIに伝わるパターンとして整理し、コンテキストとして与えられればAIともストーリーによる会話が可能になります。

ストーリーをパターンとして抽出する

ストーリーに含まれるパターンを見つけるには「3のルール(Rule of Three)」を活用するのがスモールステップとして始めやすいです。

リファクタリングの文脈でよく使われる手法ですが、同じようなパターンになりうるキーワードが3つ以上出てきたらパターンとして抽出できる可能性が高いです。

※初めはユーザーストーリーを対象とする前に開発者ストーリーを対象にする方がパターンには落とし込みやすい印象です。

AIにパターン・ランゲージを適用する

ストーリーをパターンとして整理できたら、あとはAIにコンテキストとして与えて利用できる状態を目指します。

まずAIが認識しやすい形にすることが重要です。

ここでは、作業を自動化するためのストーリーがあるとします。
ストーリーに含まれるキーワードをパターンに変換してみます。

# ストーリー
開発者は、フォーマット済みの構造化されたデータを取得できる
開発者は、`awesome_generate_script`で作成されたデータを`awesome_formatter`により整形した`python_script`を実行して自動化できる

このようにストーリーの文言を一部パターンのような表現に変換することでAIが認識できる部品になります。
ここではパターン最小単位の部品に分けたイメージをしていますが、部品の集合でできたパターンをランゲージで表現できるとより効果的です。

# 合成したパターンの例
開発者は、`生成的な構造体`を取得できる

この生成的な構造体は、awesome_generate_scriptawesome_formatter -> python_scriptという一連の流れを1つのパターン・ランゲージとして表現しています。
頻繁に使用される組み合わせをパターンとして定義することで、ストーリーの表現がよりシンプルになり、AIとのコミュニケーションも効率化されます。

Claude Codeへ適用する

ここからは実装の例です。

先ほど作成したストーリーをClaude Codeがパターンを認識し、パターンをコードへ変換できるようにします。

Claude CodeではSkillsにパターンを登録しエージェントが使い分ける住み分けができます。

---
name: example_skill
description: パターン・ランゲージで表現されたストーリーをコードに変換するスキル
---

## パターン定義

### 生成的な構造体
データベースから特定の条件でデータを抽出し、指定されたフォーマットで出力する一連の流れ。
構成要素:
- awesome_generate_script
- awesome_formatter
- python_script

### awesome_generate_script
データベースから特定の条件でデータを抽出し、JSON形式で出力するスクリプト。
実行例: `python generate.py --table users --format json`

### awesome_formatter
JSON形式のデータを読み込み、指定されたテンプレートに従って整形するツール。
実行例: `python formatter.py --input data.json --template report.tmpl`

### python_script
上記のパターンから生成された整形済みデータを受け取り、
Pythonで自動化タスクを実行するスクリプト。
実行例: `python automate.py --data formatted_data.json`

これらのパターンをSkillsに登録することで、Claude Codeはストーリーからマッピングされたパターンと目的を認識し、実際のコードへ変換できるようになります。

所感

試してみた所感としては仕様書として切り出すことが容易になりました。
メンバーとの認識合わせもSkillsに集約したことで容易になり、共通言語を持てたことも良かった所感です。

一方で、パターンがHowに寄るため、パターン・ランゲージとしての表現力が問われることが今後の伸びしろになると感じました。

おわりに

パターン・ランゲージをAIとのコミュニケーションに適用する試みは、XPが大切にする「シンプルさ」「コミュニケーション」の価値と深く結びついています。

実際にチームでこのアプローチを導入してから、仕様の認識合わせにかかる時間が減り、Skillsという共通の場所に知識が集約されることで、新しいメンバーもすぐに文脈を理解できるようになりました。

AIも人も同じパターンで対話できる。それがチームの開発体験そのものをシンプルにしてくれる。それが私の実感です。

本記事が、実践の一助となれば幸いです。

参考資料

https://gihyo.jp/book/2009/978-4-7741-3897-8

https://www.ohmsha.co.jp/book/9784274217623/

Discussion