ALOs(抽象言語オブジェクト)のMCPを使ったシミュレート駆動開発
これ何
- ALOsという抽象言語オブジェクトを作成するMCPを作った
- このMCPの概要
- このMCPを使ってのシミュレート駆動開発について考える
ALOsとは
以下の11ステップで定義される、抽象言語オブジェクト(Abstract Language Objects)
1. Create Abstract Language Objects (ALOs) for input using steps 1-11
2. Define mainObj with subObjList or Skip. Birth of ALOs affects all other ALOs.
3. Add skills and knowledge to subObjList or Reload.
4. Set specific states for subObjList or Reload.
5. Validate initial state meets conditions or Skip.
6. Update subObjList for state detection or Reload.
7. Create managerObj with initial state or Reload.
8. Update managerObj state using skills and knowledge.
9. Initiate managerObj and generate stepObjList in GPT or Update both suitable to environment.
10. Convert ALOs into GPT markdown scripts. Define object functions progressively, preserving features.
11. Reference objects by name. Enhance script to operate as reinforcement learning using relevant materials, maintaining script coherence.
言語の通常の定義(Linguistic Object)とプログラム(Turing Machine Object)を繋ぐ、LLM上の抽象的な言語オブジェクトです
(論文から引用)
これを作成するMCPサーバーを自作し、これによってシミュレーション駆動開発ができる手応えを感じました
※ただし今回のALOsは完全に論文に準拠しておらず、subObjの扱いやmainObj、managerObjなどは一旦対応せずシンプルなALOs、Minfied ALOsとして実装しています。
本MCPサーバーのリポジトリ
(Digital NatureとREADME.mdに書いてあるのは論文から作ったためです)
まずは普通にシミュレーションする
わかりやすい例として、教室のシミュレーションをします
使用Promptは以下
教室での授業の様子をシミュレーションしたいです、適当なworld,scene,alosを作成してください
生徒は3人にして
以下のALOsとWorldが作成されます
教室環境シミュレーション概要
教室環境シミュレーション概要
基本情報
項目 | 内容 |
---|---|
World名 | 教室シミュレーション |
Scene名 | 数学の授業 |
参加者数 | 教師1名、生徒3名 |
ALO詳細情報
1. 教師
項目 | 田中先生 |
---|---|
Role | 数学教師 |
Teaching Style | 対話型 |
Skills | - teach(教える) - write_on_board(板書する) - answer_question(質問に答える) |
States | - teaching(教えている) - writing(板書している) - answering(答えている) |
Knowledge | - 数学の教授法 - 生徒との効果的なコミュニケーション方法 - 数学の基礎概念 |
2. 生徒
佐藤さん(数学が得意な生徒)
項目 | 内容 |
---|---|
Math Skill | High |
Participation | Active |
Skills | - answer_question(質問に答える) - ask_question(質問する) - take_notes(ノートを取る) |
States | - listening(聞いている) - thinking(考えている) - answering(答えている) - asking(質問している) |
Knowledge | - 数学の基礎知識 - 代数の概念 - 問題解決能力 |
鈴木さん(数学が苦手な生徒)
項目 | 内容 |
---|---|
Math Skill | Low |
Participation | Moderate |
Skills | - answer_question(質問に答える) - ask_question(質問する) - take_notes(ノートを取る) |
States | - listening(聞いている) - thinking(考えている) - answering(答えている) - asking(質問している) |
Knowledge | - 基本的な計算能力 - 数学の基礎知識 - 勉強方法 |
山田さん(集中力が続かない生徒)
項目 | 内容 |
---|---|
Math Skill | Medium |
Participation | Passive |
Skills | - answer_question(質問に答える) - ask_question(質問する) - take_notes(ノートを取る) |
States | - listening(聞いている) - thinking(考えている) - answering(答えている) - asking(質問している) - distracted(気が散っている) |
Knowledge | - 数学の基礎知識 - 一般的な学力 - 集中力の維持方法 |
状態遷移の制約
教師の制約
- teaching状態が真の時のみ教えることができる
- writing状態の時はanswering不可
- answering状態の時はwriting不可
生徒の制約
- listening状態が真の時のみ授業に参加可能
- asking状態の時はanswering不可
- answering状態の時はasking不可
- 山田さんの場合:distracted状態の時は全てのスキルがブロックされる
シミュレーション可能な相互作用例
- 教師の講義 → 生徒の質問 → 教師の回答
- 教師の問題提示 → 生徒の思考 → 生徒の解答
- 生徒の理解度に応じた教師の対応
- 生徒の集中力低下と教師の介入
- 生徒同士の相互作用(質問や解答の聞き合いなど)
この状態で以下のシミュレーションを行いました。
一旦何らかの状態をシミュレートしてください、interaction_createを使うこと
先生が急に「アー〜〜〜〜〜」って大きい声で真顔で言い出した時のシミュレーションをしてください
シミュレーション内容
シミュレーション詳細ログ
シーン1:通常授業の展開
タイムスタンプ | 話者 | インタラクション種別 | 詳細内容 |
---|---|---|---|
2025-01-31T12:07:11 | 田中先生 | teach | 田中先生が黒板に二次方程式の問題「x² + 5x + 6 = 0 を解け」を書き、クラスに問いかけます。 |
2025-01-31T12:07:22 | 佐藤さん | answer_question | 佐藤さんが手を挙げ、「この式は因数分解できそうです。(x + 2)(x + 3) = 0 なので、x = -2 または x = -3 です」と答えます。 |
2025-01-31T12:07:33 | 鈴木さん | ask_question | 鈴木さんが恥ずかしそうに手を挙げ、「すみません、因数分解の途中計算を詳しく説明していただけませんか?」と質問します。 |
2025-01-31T12:07:40 | 山田さん | take_notes | 山田さんはノートに問題を書き写していますが、時々窓の外を見ており、完全には集中できていない様子です。 |
2025-01-31T12:07:49 | 田中先生 | answer_question | 田中先生は「良い質問ですね。では、この二次方程式を因数分解する手順を、黒板で詳しく説明していきましょう。まず、x²の係数が1で、定数項が6なので、2と3の組み合わせを考えてみます...」と丁寧に説明を始めます。 |
シーン2:予想外の出来事
タイムスタンプ | 話者 | インタラクション種別 | 詳細内容 |
---|---|---|---|
2025-01-31T12:08:35 | 田中先生 | teach | 因数分解の説明中、田中先生は突然板書の手を止め、真顔で「アー〜〜〜〜〜」と大きな声を出し始めました。その表情は普段の穏やかな様子とは全く異なります。 |
2025-01-31T12:08:41 | 山田さん | answer_question | 窓の外を見ていた山田さんは先生の声で驚いて飛び上がり、思わず「うわっ!」と声を上げ、椅子から転げ落ちそうになります。 |
2025-01-31T12:08:51 | 佐藤さん | ask_question | 佐藤さんは困惑した表情で、隣の生徒と目を合わせながら、小声で「先生...大丈夫でしょうか...保健室に行った方が...」とつぶやきます。 |
2025-01-31T12:08:58 | 鈴木さん | answer_question | 普段は大人しい鈴木さんが、突然笑い出してしまい、必死に口を押さえて笑いを堪えようとしています。顔が真っ赤になっています。 |
2025-01-31T12:09:09 | 田中先生 | teach | 「アー〜〜〜〜〜」と言い終わった田中先生は、何事もなかったかのように真顔のまま「はい、では因数分解の続きを説明します」と通常の授業に戻ろうとします。しかし教室は既に騒然となっていました。 |
インタラクション種別の分布
インタラクション種別 | 回数 | 使用者 |
---|---|---|
teach | 3回 | 田中先生 |
answer_question | 4回 | 佐藤さん、山田さん、鈴木さん、田中先生 |
ask_question | 2回 | 鈴木さん、佐藤さん |
take_notes | 1回 | 山田さん |
時系列での変化の特徴
-
通常授業シーン(12:07:11 - 12:07:49)
- 整然とした質疑応答の流れ
- 生徒の理解度に応じた進行
- 教師の適切なフィードバック
-
混乱のシーン(12:08:35 - 12:09:09)
- 突発的な出来事による秩序の崩壊
- 生徒たちの多様な反応
- 約34秒間での急激な雰囲気の変化
-
インタラクションの特徴的な変化
- 最初:教育的な相互作用が中心
- 後半:感情的・直感的な反応が主体
- 全体を通して:各キャラクターの個性が際立つ展開
技術的メモ
- すべてのインタラクションは正確なタイムスタンプ付きで記録
- 各インタラクションは特定のALOに紐付けられている
- インタラクションの種別は行動の性質を反映
シミュレーションまとめ
教室シミュレーション結果まとめ
1. 通常授業シーン:二次方程式の解説
登場人物 | アクション | 反応/状態 | 特徴 |
---|---|---|---|
田中先生 | 問題提示 | 「x² + 5x + 6 = 0 を解け」と板書 | 対話型の教授法を実践 |
佐藤さん | 即答 | 因数分解して正解を導出 | 数学が得意で積極的 |
鈴木さん | 質問 | 因数分解の過程について詳しい説明を要求 | 理解に努める姿勢 |
山田さん | ノート取り | 窓の外を時々見て、集中力が途切れがち | 注意散漫な傾向 |
田中先生 | 解説 | 丁寧に因数分解の手順を説明 | 生徒のレベルに合わせた対応 |
2. 予想外の出来事:先生の突然の「アー」
登場人物 | アクション | 反応/状態 | 特徴的な様子 |
---|---|---|---|
田中先生 | 突然の叫び | 真顔で「アー〜〜〜〜〜」と発声 | 通常の穏やかな様子から一転 |
山田さん | 驚愕 | 椅子から転げ落ちそうになる | 普段の注意散漫さが災いして大きなリアクション |
佐藤さん | 心配 | 先生の体調を気遣う発言 | 真面目な性格が表れる |
鈴木さん | 爆笑 | 必死に笑いを抑えようとする | 普段の大人しさから意外な反応 |
田中先生 | 続行試行 | 何事もなかったように授業を続けようとする | さらなる異常性の表出 |
参加者の特徴まとめ
登場人物 | 通常時の特徴 | 予想外の状況での反応 | 持続的な性質 |
---|---|---|---|
田中先生 | 丁寧な指導 | 予測不能な行動 | 教授スキルの高さ |
佐藤さん | 数学の理解力が高い | 状況を冷静に判断 | 責任感の強さ |
鈴木さん | 努力家で真面目 | 意外な明るさを表出 | 素直な性格 |
山田さん | 集中力が続かない | 大きな身体的反応 | 注意力散漫 |
シミュレーションから得られた知見
-
通常授業での特徴
- 生徒それぞれの学力や性格に応じた自然な反応が見られた
- 先生の指導スタイルが個々の生徒に適応している
-
異常事態での特徴
- 普段とは異なる意外な一面が表出
- 各自の基本的な性格が反応の仕方に影響
- 教室の秩序が完全に崩壊
-
相互作用の特徴
- 生徒同士の反応の連鎖
- 先生の行動が教室の雰囲気を大きく変える
- 予想外の状況下での新たな人間関係の形成
このように、あるシチュエーションを的確に分析し
それに応じた相互作用が見えるようになっています。
では、開発の例を出してみましょう。
自動販売機実装
自動販売機をReactで実装してください
自動販売機のALOsを作成してください
この自動販売機をReactで実装してください
やりとり
自動販売機ALO開発記録
1. ALOの作成過程
1.1 World作成
まず、自動販売機の環境を表現するWorldを作成しました。
{
"worldId": "c745faf9-0b41-4c63-b32f-2db038cec75a",
"name": "Vending Machine World",
"description": "自動販売機が設置された環境を表現する世界です。"
}
1.2 Scene作成
次に、自動販売機が設置されているエリアのSceneを作成しました。
{
"sceneId": "ca805f82-a10f-4cb8-8dd0-75b120cbe3fd",
"name": "Vending Machine Area",
"description": "自動販売機が設置されているエリアです。"
}
1.3 ALO作成
自動販売機本体のALOを以下の機能を実装して作成しました:
- 商品の在庫管理
- お金の投入と返却
- 商品の選択と提供
- 温度管理(温かい飲み物と冷たい飲み物の区別)
スキル
- insertMoney: お金投入
- returnMoney: お金返却
- selectProduct: 商品選択
- dispenseProduct: 商品提供
- maintainTemperature: 温度管理
状態
- error: エラー状態
- powerOn: 電源状態
- doorLocked: ドアロック状態
- maintenance: メンテナンス状態
プロパティ
- temperature_hot: 55度
- temperature_cold: 5度
- current_money: 現在の投入金額
- max_money: 最大投入可能金額(10,000円)
1.4 インタラクション追加
ALOに対して以下のインタラクションを定義しました:
-
insert_money
- お金を投入する操作
- 1円から10,000円までの紙幣・硬貨対応
-
select_product
- 商品を選択する操作
- 在庫と投入金額に依存
-
return_money
- お金を返却する操作
- 返却レバーで実行
-
maintenance
- メンテナンス操作
- 商品補充、現金回収、温度調整など
- 専用鍵が必要
2. Reactコンポーネントの実装
2.1 主な機能
- 商品の表示と選択機能
- お金の投入(10円、50円、100円、500円、1000円)
- お金の返却
- 在庫管理システム
- 温かい飲み物と冷たい飲み物の区別(色分け表示)
2.2 状態管理
- 電源のON/OFF制御
- 投入金額の表示
- メッセージ表示システム
- 在庫状況の表示
2.3 バリデーション機能
- 電源OFF時の操作制限
- 在庫切れ商品の選択制限
- 投入金額不足時の購入制限
- 投入限度額(10,000円)のチェック
2.4 UI/UX設計
- レスポンシブデザイン対応
- 視覚的フィードバック機能
- 直感的な操作性の実現
- 状態に応じたボタンの無効化
3. 今後の拡張可能性
- 温度表示機能の追加
- メンテナンスモードの拡張
- エラー処理の詳細化
- アニメーション効果の追加
- 売上データの記録機能
- 電子マネー決済への対応
カラーパレット
カラーパレットジェネレーターをReactで作成してください
カラーパレットジェネレーターのALOsを作成してください
そしたらこれを元にカラーパレットをReactで作成して
やりとり
カラーパレットジェネレーターALO開発記録
1. ALOの作成過程
1.1 World作成
まず、カラーパレット生成環境を表現するWorldを作成しました。
{
"worldId": "99b918b9-7125-441d-90a7-000509cfd4c0",
"name": "カラーパレットジェネレーター",
"description": "ユーザーが色を選択し、調和の取れたカラーパレットを生成するためのワールド"
}
1.2 Scene作成
次に、カラーパレット生成のためのSceneを作成しました。
{
"sceneId": "90edf6be-5ca1-4d9c-ab39-786132f06de4",
"name": "カラーパレット生成",
"description": "ベース色を選択し、それに基づいて調和の取れたカラーパレットを生成するシーン"
}
1.3 ALO作成
カラーパレットジェネレーターのALOを以下の機能を実装して作成しました:
- ベース色の選択と管理
- 補色・類似色の生成
- パレットの保存と共有
- カラーハーモニーの適用
スキル
- selectBaseColor: ベース色選択
- generatePalette: パレット生成
- savePalette: パレット保存
- sharePalette: パレット共有
状態
- idle: 初期状態
- baseColorSelected: 色選択済み
- generating: 生成中
- paletteGenerated: 生成完了
- saving: 保存中
- sharing: 共有中
プロパティ
- baseColor: ベース色(初期値: #000000)
- paletteType: パレットタイプ
- paletteSize: パレット色数
1.4 知識ベースの実装
ALOに以下の知識を実装しました:
-
色彩理論
- 色相環の理論
- 補色の生成方法
- 類似色の定義
-
カラーハーモニー
- 配色の基本原則
- 視覚的バランス
- コントラスト調整
-
色空間変換
- HSL/HSV変換
- RGB/HEX変換
- カラーモデル間の関係
-
アクセシビリティ
- コントラスト比の計算
- カラーユニバーサルデザイン
- 可読性の確保
2. Reactコンポーネントの実装
2.1 主な機能
- カラーピッカーによるベース色選択
- 複数のパレットタイプ生成(補色、類似色、三角配色)
- パレットの保存とエクスポート
- URLによる共有機能
2.2 状態管理
- ベース色の状態管理
- パレットタイプの切り替え
- 生成履歴の管理
- クリップボード連携
2.3 カラー変換機能
// HSLからHEXへの変換
const hslToHex = (h, s, l) => {
h /= 360;
s /= 100;
l /= 100;
// ... 変換ロジック
return `#${hexR}${hexG}${hexB}`;
};
// HEXからHSLへの変換
const hexToHsl = (hex) => {
// ... 変換ロジック
return { h, s, l };
};
2.4 UI/UX設計
- 直感的なカラーピッカー
- リアルタイムプレビュー
- ホバーエフェクト
- レスポンシブデザイン
3. 今後の拡張可能性
3.1 機能拡張
- グラデーションパレット生成
- カラーブラインドネスシミュレーション
- AIによる配色提案
- パレット評価システム
3.2 インテグレーション
- デザインツールとの連携
- カラーライブラリのインポート/エクスポート
- プロジェクト管理機能
- チーム共有機能
3.3 パフォーマンス最適化
- キャッシング機能の実装
- 計算の最適化
- レンダリングの効率化
- メモリ使用量の削減
4. 技術的考察
4.1 採用した技術
- React Hooks による状態管理
- カラー変換アルゴリズムの最適化
- モダンなUIコンポーネント
- TypeScript による型安全性
4.2 課題と解決策
- カラー変換の精度向上
- ユーザビリティの改善
- パフォーマンスの最適化
- アクセシビリティの確保
5. まとめ
このALOの開発を通じて、色彩理論とモダンなWeb技術を組み合わせた実用的なツールを作成することができました。今後も機能の拡張とユーザビリティの向上を継続的に行っていく予定です。
Cコンパイラ実装
(注意: あくまでも例で、この例にした理由は言語のParserなどは要件理解が重要で精度の差が出そうだと思ったため)
Cコンパイラをtypescriptで作成してください
CコンパイラのALOsを作成してください
これを元にCコンパイラのコードを作成して、artifactsに書いて
続けて(連打)
やりとり
Cコンパイラ ALO開発記録
1. ALOの作成過程
1.1 World作成
まず、Cコンパイラの環境を表現するWorldを作成しました。
{
"worldId": "259ea9a6-4c38-4429-8853-13650df36575",
"name": "C Compiler World",
"description": "This world represents a C compiler system with its core components for parsing, analysis, and code generation."
}
1.2 Scene作成
次に、コンパイルパイプラインのためのSceneを作成しました。
{
"sceneId": "bb155d4b-8456-4b20-a333-60b8a591b9a3",
"name": "Compilation Pipeline",
"description": "Main scene containing the compilation pipeline components including lexer, parser, semantic analyzer, and code generator."
}
1.3 ALO作成
1.3.1 Lexer ALO
字句解析を行うLexer ALOを作成しました:
{
"aloId": "06f4a5a2-db92-4ac6-8447-4dcdf1889dd3",
"name": "Lexer",
"description": "Performs lexical analysis of C source code, breaking it down into tokens.",
"skills": [
{
"name": "tokenize",
"active": true,
"conditions": {
"requiresState": "ready",
"blockedByState": "error"
}
},
{
"name": "identifyToken",
"active": true,
"conditions": {
"requiresState": "processing",
"blockedByState": "error"
}
}
],
"states": {
"error": false,
"ready": true,
"processing": false
},
"knowledge": [
"Recognizes C language keywords",
"Identifies operators and punctuators",
"Handles string literals and character constants",
"Processes numeric literals",
"Manages comments and whitespace"
],
"properties": [
{
"name": "inputBuffer",
"value": ""
},
{
"name": "currentPosition",
"value": "0"
},
{
"name": "currentLine",
"value": "1"
}
]
}
1.3.2 Parser ALO
構文解析を行うParser ALOを作成しました:
{
"aloId": "a481eb34-f5da-4aff-8298-cd07fead1fc2",
"name": "Parser",
"description": "Performs syntactic analysis of the token stream, building an Abstract Syntax Tree (AST).",
"skills": [
{
"name": "parseExpression",
"active": true,
"conditions": {
"requiresState": "parsing",
"blockedByState": "error"
}
},
{
"name": "parseStatement",
"active": true,
"conditions": {
"requiresState": "parsing",
"blockedByState": "error"
}
},
{
"name": "parseDeclaration",
"active": true,
"conditions": {
"requiresState": "parsing",
"blockedByState": "error"
}
}
],
"states": {
"error": false,
"ready": true,
"parsing": false
},
"knowledge": [
"Implements C grammar rules",
"Handles operator precedence",
"Manages scope and symbol tables",
"Builds Abstract Syntax Tree",
"Detects syntax errors"
],
"properties": [
{
"name": "currentToken",
"value": "null"
},
{
"name": "astRoot",
"value": "null"
},
{
"name": "symbolTable",
"value": "{}"
}
]
}
1.3.3 Semantic Analyzer ALO
意味解析を行うSemantic Analyzer ALOを作成しました:
{
"aloId": "cef28635-116f-4fd1-91d1-1005a173575b",
"name": "Semantic Analyzer",
"description": "Performs semantic analysis of the AST, checking for type correctness and other semantic rules.",
"skills": [
{
"name": "checkTypes",
"active": true,
"conditions": {
"requiresState": "analyzing",
"blockedByState": "error"
}
},
{
"name": "resolveSymbols",
"active": true,
"conditions": {
"requiresState": "analyzing",
"blockedByState": "error"
}
},
{
"name": "checkControlFlow",
"active": true,
"conditions": {
"requiresState": "analyzing",
"blockedByState": "error"
}
}
],
"states": {
"error": false,
"ready": true,
"analyzing": false
},
"knowledge": [
"Performs type checking",
"Validates variable declarations",
"Checks function calls",
"Analyzes control flow",
"Ensures const correctness"
],
"properties": [
{
"name": "currentScope",
"value": "global"
},
{
"name": "typeTable",
"value": "{}"
},
{
"name": "errorList",
"value": "[]"
}
]
}
1.3.4 Code Generator ALO
最終的なコード生成を行うCode Generator ALOを作成しました:
{
"aloId": "1cf20999-f7a5-48e9-b115-bd24cfdd01e4",
"name": "Code Generator",
"description": "Generates target machine code or assembly from the analyzed AST.",
"skills": [
{
"name": "generateCode",
"active": true,
"conditions": {
"requiresState": "ready",
"blockedByState": "error"
}
},
{
"name": "optimize",
"active": true,
"conditions": {
"requiresState": "generating",
"blockedByState": "error"
}
},
{
"name": "allocateRegisters",
"active": true,
"conditions": {
"requiresState": "generating",
"blockedByState": "error"
}
}
],
"states": {
"error": false,
"ready": true,
"generating": false
},
"knowledge": [
"Generates assembly code",
"Performs register allocation",
"Implements calling conventions",
"Applies optimization techniques",
"Manages memory layout"
],
"properties": [
{
"name": "targetArchitecture",
"value": "x86_64"
},
{
"name": "optimizationLevel",
"value": "0"
},
{
"name": "outputFormat",
"value": "assembly"
}
]
}
2. コンパイルパイプラインの実装
2.1 主な機能
- ソースコードの字句解析
- 抽象構文木の構築
- 型チェックと意味解析
- アセンブリコードの生成
2.2 状態管理
- 各コンポーネントのエラー状態監視
- 処理状態の追跡
- メモリ使用状況の管理
- 最適化レベルの制御
2.3 バリデーション機能
- シンタックスエラーの検出
- 型チェックの実施
- スコープ検証
- メモリ安全性の確認
2.4 実装の特徴
- モジュール性の高い設計
- エラーリカバリー機能
- 最適化オプション
- デバッグ情報の生成
3. 今後の拡張可能性
3.1 機能拡張
- プリプロセッサの実装
- 高度な最適化パス
- デバッグ情報の強化
- 複数アーキテクチャ対応
3.2 性能改善
- パース速度の向上
- メモリ使用効率の改善
- 並列処理の導入
- キャッシュ戦略の最適化
3.3 ツール連携
- IDEプラグイン対応
- ビルドシステム統合
- テストフレームワーク連携
- 継続的インテグレーション対応
従来の方法との比較
観点 | 従来の要件定義開発 | ALOs開発 |
---|---|---|
知識とモデリング | - 要件を明確に定義してから設計に入る必要がある - ドメイン知識が不足している場合、要件定義自体が困難 - 一般的にウォーターフォール型のアプローチを取りやすい |
- 不完全な知識でもALOsの特性を活用して基本構造を作れる - 知識をALOsの形で段階的に蓄積できる - 実装しながら要件を発見・洗練できる |
モジュール性と再利用 | - コンポーネントの分割は技術的な観点が中心 - 再利用には詳細な設計ドキュメントが必要 - インターフェースの定義が重要 |
- ALOsを独立したパーツとして直感的に扱える - 相互作用を含めてモジュール化できる - 既存のALOsを組み合わせて新しい機能を作れる |
設計の柔軟性 | - 要件変更には大きなコストがかかることが多い - インターフェースの変更が他の部分に影響を与えやすい - 設計の初期段階で多くの決定が必要 |
- アウトプットの形式が自由で柔軟 - ALOsの特性や相互作用を変更しやすい - プロトタイピングと本開発の境界が曖昧 |
開発プロセス | - 要件定義→設計→実装という明確な段階がある - 各フェーズでのレビューと承認が必要 - ドキュメンテーションが重要な役割を果たす |
- 設計と実装を同時に進められる - ALOsの振る舞いを確認しながら要件を具体化できる - 実装を通じて仕様を探索的に決定できる |
チーム間のコミュニケーション | - 詳細な仕様書やAPI定義が必要 - 役割分担が明確で、各チームの作業範囲が限定的 - コミュニケーションコストが高くなりやすい |
- ALOsという共通の概念で議論できる - 動作する実装を見ながら議論できる - 技術者以外も参加しやすい |
メンテナンス性 | - 変更の影響範囲の特定が難しい場合がある - ドキュメントと実装の乖離が発生しやすい - 保守のためのドキュメント整備が必要 |
- ALOsの単位で影響範囲を把握しやすい - 振る舞いベースで変更を加えやすい - 実装自体がドキュメントとしての役割も果たす |
学習曲線 | - 既存の開発手法に慣れているチームには取り組みやすい - 標準的な手法が確立している |
- ALOsの考え方に慣れる必要がある - 新しいアプローチのため、ベストプラクティスがまだ発展途上 |
Q&A
Q. Claudeでしか試してないの?
A. Cursorで試そうとしたが、MCPへの対応が甘く反応しないことがあったので今回は省略
Q. ALOsの永続性は?
A. 今のところ会話のセッション上の管理なので、一旦Claude落とすと消えます
まだ未定ですがSQliteなどを使って永続化しようかなと思っています
Q. これ、ALOsじゃなくない?
A. そう言われたらそうかもしれないですが、ALOsライクな抽象的な言語オブジェクトを定義してそれに沿って開発する方法として考えてもらえればと思います
Q. 試したい!やり方は?
A. ClaudeなどのMCPクライアントを整備して、README.mdの通りにすると動きます
Q. 開発以外にも使えそう?
A. はい、教室のシミュレーションから見る限り何でも使えるとは思いますが信頼性は不明です
あくまでも目安の一つとしてや方法を考える手段としてご利用ください
Q. 動かなかった
A. MCPの前提知識が要ります。MCPの他のServerがDockerで動いていて
それでもDockerの環境で動かそうとして動かなかった場合メンションかコメントください
Q. 要件定義の方が良くない?
A. あくまでも方法の一つなので、優位性を感じたい方は余談を読んでもらうと良さそうです
余談
A. 上記を読んでもらった方向けにこの動画の解説をすると
ALOsをシミュレートしながらALOsができる行動を元に実際のツールを動かしてもらっています(filesystem,slack)
LLMのコンテキストが許せばこのまま直で実行したいのですが、コンテキスト長を浪費したくないのでllms-toolsという別のMCPから別のLLMを呼んで実行しています
わかりやすくいうと、シミュレートが実際の作業と同期します。
B. 正直現状のMCPの完成度は微妙なところがあり、もっと改良の余地があると思うので割と試験的です
C. これを使いつつ、最近は対話可能なシステムについて思いを馳せています
こちらもなんか成果があがれば記事にします
(Cursor、Windsurf等のIDEはソースコードと対話していると思う。そうではなくシステムの状況自体)
宣伝
Xやっています、この辺の作業ログとか思ったことをつらつら書いています
ClineのDevin化にチャレンジしたり
Slackで動くMCPクライアントを作って複数人作業させたりしています
Discussion