Skip to main content
Glama
DEVELOPMENT.ja.md13.2 kB
# 開発ガイド このガイドでは、開発環境のセットアップ、プロジェクトのビルド、コードへの貢献、およびSpec Workflow MCPのアーキテクチャの理解について説明します。 ## 前提条件 ### 必要なソフトウェア - **Node.js** 18.0以上 - **npm** 9.0以上 - **Git** バージョン管理用 - **TypeScript**の知識があると便利 ### 推奨ツール - **VSCode** TypeScript拡張機能付き - **Chrome/Edge DevTools** ダッシュボードのデバッグ用 - **Postman/Insomnia** APIテスト用 ## 開発環境のセットアップ ### 1. リポジトリのクローン ```bash git clone https://github.com/Pimzino/spec-workflow-mcp.git cd spec-workflow-mcp ``` ### 2. 依存関係のインストール ```bash npm install ``` これにより以下がインストールされます: - MCP SDK - TypeScriptとビルドツール - ダッシュボードサーバー用Express - WebSocketライブラリ - テストフレームワーク ### 3. プロジェクトのビルド ```bash npm run build ``` これによりTypeScriptファイルが`dist/`ディレクトリ内のJavaScriptにコンパイルされます。 ## 開発コマンド ### コアコマンド | コマンド | 説明 | |---------|-------------| | `npm run dev` | 自動リロード付きで開発モードで起動 | | `npm run build` | 本番バンドルをビルド | | `npm start` | 本番サーバーを実行 | | `npm test` | テストスイートを実行 | | `npm run clean` | ビルド成果物を削除 | | `npm run lint` | コードリンターを実行 | | `npm run format` | Prettierでコードをフォーマット | ### 開発モード ```bash npm run dev ``` 機能: - ファイル変更時の自動再コンパイル - ダッシュボードのホットリロード - 詳細なエラーメッセージ - デバッグ用のソースマップ ### 本番用ビルド ```bash npm run clean && npm run build ``` 最適化: - 最小化されたJavaScript - 最適化されたバンドルサイズ - 本番エラーハンドリング - パフォーマンスの改善 ## プロジェクト構造 ``` spec-workflow-mcp/ ├── src/ # ソースコード │ ├── index.ts # MCPサーバーエントリーポイント │ ├── server.ts # ダッシュボードサーバー │ ├── tools/ # MCPツール実装 │ ├── prompts/ # プロンプトテンプレート │ ├── utils/ # ユーティリティ関数 │ └── types/ # TypeScript型定義 ├── dist/ # コンパイルされたJavaScript ├── dashboard/ # Webダッシュボードファイル │ ├── index.html # ダッシュボードUI │ ├── styles.css # ダッシュボードスタイル │ └── script.js # ダッシュボードJavaScript ├── vscode-extension/ # VSCode拡張機能 │ ├── src/ # 拡張機能ソース │ └── package.json # 拡張機能マニフェスト ├── tests/ # テストファイル ├── docs/ # ドキュメント └── package.json # プロジェクト設定 ``` ## アーキテクチャ概要 ### MCPサーバーアーキテクチャ ``` クライアント(AI)↔ MCPプロトコル ↔ サーバー ↔ ファイルシステム ↓ ダッシュボード ``` ### 主要コンポーネント #### 1. MCPサーバー(`src/index.ts`) - MCPプロトコル通信を処理 - ツールリクエストを処理 - プロジェクト状態を管理 - ファイルシステム操作 #### 2. ダッシュボードサーバー(`src/server.ts`) - Webダッシュボードを提供 - WebSocket接続 - リアルタイム更新 - HTTP APIエンドポイント #### 3. ツール(`src/tools/`) 各ツールは個別のモジュールです: - 入力検証 - ビジネスロジック - ファイル操作 - レスポンスのフォーマット #### 4. プロンプト(`src/prompts/`) 以下のためのテンプレート文字列: - ドキュメント生成 - ワークフローガイダンス - エラーメッセージ - ユーザー指示 ## 新機能の実装 ### 新しいツールの追加 1. **`src/tools/`にツールファイルを作成**: ```typescript // src/tools/my-new-tool.ts import { Tool } from '@anthropic/mcp-sdk'; export const myNewTool: Tool = { name: 'my-new-tool', description: 'ツールの動作説明', parameters: { type: 'object', properties: { param1: { type: 'string', description: 'パラメータの説明' }, param2: { type: 'number', optional: true } }, required: ['param1'] }, handler: async (params) => { // ツールの実装 const { param1, param2 = 0 } = params; // ビジネスロジックをここに return { success: true, data: 'ツールのレスポンス' }; } }; ``` 2. **インデックスに登録**(`src/tools/index.ts`): ```typescript export { myNewTool } from './my-new-tool'; ``` 3. **サーバーに追加**(`src/index.ts`): ```typescript import { myNewTool } from './tools'; server.registerTool(myNewTool); ``` ### ダッシュボード機能の追加 1. **HTMLを更新**(`dashboard/index.html`): ```html <div class="new-feature"> <h3>新機能</h3> <button id="new-action">アクション</button> </div> ``` 2. **JavaScriptを追加**(`dashboard/script.js`): ```javascript document.getElementById('new-action').addEventListener('click', () => { // 機能ロジック ws.send(JSON.stringify({ type: 'new-action', data: { /* ... */ } })); }); ``` 3. **サーバーで処理**(`src/server.ts`): ```typescript ws.on('message', (message) => { const { type, data } = JSON.parse(message); if (type === 'new-action') { // 新しいアクションを処理 } }); ``` ## テスト ### テストの実行 ```bash # すべてのテストを実行 npm test # 特定のテストファイルを実行 npm test -- src/tools/my-tool.test.ts # カバレッジ付きで実行 npm run test:coverage # ウォッチモード npm run test:watch ``` ### テストの作成 ソースファイルの隣にテストファイルを作成します: ```typescript // src/tools/my-tool.test.ts import { describe, it, expect } from 'vitest'; import { myTool } from './my-tool'; describe('myTool', () => { it('入力を正しく処理する', async () => { const result = await myTool.handler({ param1: 'test' }); expect(result.success).toBe(true); expect(result.data).toContain('expected'); }); it('エラーを処理する', async () => { const result = await myTool.handler({ param1: null }); expect(result.success).toBe(false); expect(result.error).toBeDefined(); }); }); ``` ### 統合テスト 完全なワークフローをテストします: ```typescript // tests/integration/workflow.test.ts describe('完全なワークフロー', () => { it('最初から最後まで仕様を作成する', async () => { // 要件を作成 // 要件を承認 // 設計を作成 // 設計を承認 // タスクを作成 // 構造を検証 }); }); ``` ## デバッグ ### MCPサーバーのデバッグ 1. **デバッグ出力を追加**: ```typescript console.error('[DEBUG]', 'ツールが呼び出されました:', toolName, params); ``` 2. **VSCodeデバッガーを使用**: ```json // .vscode/launch.json { "type": "node", "request": "launch", "name": "Debug MCP Server", "program": "${workspaceFolder}/dist/index.js", "args": ["/path/to/test/project"], "console": "integratedTerminal" } ``` ### ダッシュボードのデバッグ 1. **ブラウザDevTools**: - ブラウザでダッシュボードを開く - F12を押してDevToolsを開く - エラーのコンソールを確認 - WebSocketのネットワークタブを監視 2. **ロギングを追加**: ```javascript console.log('WebSocketメッセージ:', message); console.log('状態更新:', newState); ``` ## コードスタイルと規格 ### TypeScriptガイドライン - strictモードを使用 - データ構造のインターフェースを定義 - `any`型を避ける - コールバックよりasync/awaitを使用 ### ファイル構成 - ファイルごとに1つのコンポーネント - 関連する機能をグループ化 - 明確な命名規則 - 包括的なコメント ### 命名規則 - **ファイル**:kebab-case(`my-tool.ts`) - **クラス**:PascalCase(`SpecManager`) - **関数**:camelCase(`createSpec`) - **定数**:UPPER_SNAKE(`MAX_RETRIES`) ## 貢献 ### 貢献プロセス 1. **リポジトリをフォーク** 2. **機能ブランチを作成**: ```bash git checkout -b feature/my-feature ``` 3. **変更を加える** 4. **テストを書く** 5. **テストとリントを実行**: ```bash npm test npm run lint ``` 6. **変更をコミット**: ```bash git commit -m "feat: add new feature" ``` 7. **ブランチをプッシュ**: ```bash git push origin feature/my-feature ``` 8. **プルリクエストを作成** ### コミットメッセージ形式 従来のコミットに従います: - `feat:` 新機能 - `fix:` バグ修正 - `docs:` ドキュメント - `style:` フォーマット - `refactor:` コード再構築 - `test:` テスト - `chore:` メンテナンス 例: ``` feat: add approval revision workflow fix: resolve dashboard WebSocket reconnection issue docs: update configuration guide ``` ### プルリクエストガイドライン - 明確な説明 - 関連する問題を参照 - UI変更のスクリーンショットを含める - すべてのテストが合格することを確認 - ドキュメントを更新 ## 公開 ### NPMパッケージ 1. **バージョンを更新**: ```bash npm version patch|minor|major ``` 2. **パッケージをビルド**: ```bash npm run build ``` 3. **公開**: ```bash npm publish ``` ### VSCode拡張機能 1. **拡張機能のバージョンを更新**(`vscode-extension/package.json`) 2. **拡張機能をビルド**: ```bash cd vscode-extension npm run package ``` 3. **マーケットプレイスに公開**: ```bash vsce publish ``` ## パフォーマンス最適化 ### サーバーパフォーマンス - ファイル読み取りにキャッシングを使用 - ファイルウォッチャーにデバウンスを実装 - WebSocketメッセージのバッチ処理を最適化 - 大きなドキュメントの遅延読み込み ### ダッシュボードパフォーマンス - DOM更新を最小化 - 長いリストに仮想スクロールを使用 - プログレッシブレンダリングを実装 - WebSocket再接続を最適化 ## セキュリティの考慮事項 ### 入力検証 常にツール入力を検証します: ```typescript if (!params.specName || typeof params.specName !== 'string') { throw new Error('Invalid spec name'); } // ファイルパスをサニタイズ const safePath = path.normalize(params.path); if (safePath.includes('..')) { throw new Error('Invalid path'); } ``` ### ファイルシステムセキュリティ - プロジェクトディレクトリへの操作を制限 - すべてのファイルパスを検証 - 安全なファイル操作を使用 - 権限チェックを実装 ## 開発問題のトラブルシューティング ### 一般的なビルドエラー | エラー | 解決策 | |-------|----------| | TypeScriptエラー | `npm run build`を実行して詳細なエラーを確認 | | モジュールが見つからない | インポートを確認し、`npm install`を実行 | | ポートが既に使用中 | ポートを変更するか既存のプロセスを終了 | | WebSocket接続失敗 | サーバーが実行中でポートが正しいか確認 | ### 開発のヒント 1. より良い型安全性のために**TypeScript strictモードを使用** 2. デバッグを容易にするために**ソースマップを有効化** 3. 開発中の自動再起動に**nodemonを使用** 4. 分離されたディレクトリで**ファイル操作をテスト** 5. Chrome DevToolsで**パフォーマンスを監視** ## リソース - [MCP SDKドキュメント](https://github.com/anthropics/mcp-sdk) - [TypeScriptハンドブック](https://www.typescriptlang.org/docs/) - [Node.jsベストプラクティス](https://github.com/goldbergyoni/nodebestpractices) - [VSCode拡張機能API](https://code.visualstudio.com/api) ## 関連ドキュメント - [設定ガイド](CONFIGURATION.ja.md) - サーバー設定 - [ユーザーガイド](USER-GUIDE.ja.md) - サーバーの使用 - [ツールリファレンス](TOOLS-REFERENCE.ja.md) - ツールドキュメント - [トラブルシューティング](TROUBLESHOOTING.ja.md) - 一般的な問題

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Pimzino/spec-workflow-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server