Skip to content

メモリーバンク

概要

課題:AIのメモリー喪失

VJSPのようなAIアシスタントには根本的な制限が存在する。セッション間で状態が完全にリセットされる点である。この「メモリー喪失」により、新しい対話を開始するたびに、プロジェクトのアーキテクチャ、目標、使用技術、現在の進捗状況を再度説明する必要が生まれる。これにより重大な効率のジレンマが発生する:AIモデルは、プロジェクトを正しく理解せずに編集作業を行う(エラーや解決策の不一致につながる)か、各セッションでコードベース全体の分析に大量の時間とリソースを費やす(大規模プロジェクトの場合、コストがかかり且つ処理が低速になる)か、二者択一となる。

このメモリーの課題を解決しなければ、AIアシスタントは強力なもののステートレスなツールのままで、真の意味で継続的な開発パートナーとなることはできない。

解決策:メモリーバンク

メモリーバンクは、プロジェクトの理解度を高め、コーディングセッション間でコンテキストを保持することを可能にする構造化されたドキュメントシステムである。これにより、AIアシスタントはステートレスなツールから、プロジェクトの情報を完全に記憶する継続的な開発パートナーへと変革される。VJSPは新しいセッションを開始するたびにメモリーバンクファイルを自動的に読み込み、プロジェクトに対する理解を再構築する。

メモリーバンクがアクティブな状態では、VJSPは各タスクの開始時に[Memory Bank: Active]を表示し、プロジェクトのコンテキストを簡潔にまとめる。これにより、繰り返しの説明なしに一貫性のある作業が実現される。

主なメリット

  • 言語非依存:あらゆるプログラミング言語やフレームワークに対応
  • 効率的なプロジェクト理解:VJSPがプロジェクトの目的と技術スタックを把握するのを支援
  • コンテキストの保持:新しいセッションごとのファイルスキャンなしに、プロジェクトの知識をセッション間で維持
  • 高速なスタートアップ:新しいセッション開始時、VJSPは即座にプロジェクトのコンテキストを理解
  • プロジェクトの自動ドキュメント化:副産物として価値のあるドキュメントが生成される

メモリーバンクの動作原理

メモリーバンクはVJSPのカスタムルール機能を基盤に構築され、プロジェクトドキュメント用の専用フレームワークを提供する。メモリーバンクファイルは、プロジェクトリポジトリの.vjsp/rules/memory-bankフォルダに保存される標準的なMarkdownファイルである。これらのファイルは隠しファイルや独占的なファイルではなく、開発者とVJSPの双方がアクセス可能な通常のドキュメントファイルである。

各タスクの開始時、VJSPはすべてのメモリーバンクファイルを読み込み、プロジェクトに対する包括的な理解を構築する。このプロセスは完全に自動で、開発者の操作は不要である。その後、VJSPはレスポンスの先頭に[Memory Bank: Active]を表示し、メモリーバンクの正常なアクティベーションを示すと同時に、プロジェクトに対する理解を簡潔にまとめる。

ファイルは階層的に組織され、プロジェクトの全体像が構築される。

コアメモリーバンクファイル

brief.md

開発者が手動で作成・維持するファイル

  • プロジェクトの基礎情報
  • プロジェクトの高レベルな概要
  • コアな要求仕様と目標

例:「バーコードスキャン機能を搭載したReact製在庫管理システムの構築。複数の倉庫に対応し、既存のERPシステムと連携することを要求。」

注記:VJSPはこのファイルを直接編集することはないが、プロジェクトの概要を改善する方法が見つかった場合、提案を行う可能性がある。

product.md

  • プロジェクトの存在意義の説明
  • 解決すべき課題の記述
  • 製品の動作ロジックの概要
  • ユーザーエクスペリエンスの目標

例:「在庫管理システムは複数倉庫とリアルタイム更新に対応。バーコードスキャンにより在庫の不一致問題を解決し、正確な在庫数を保証する。」

context.md

  • 更新頻度が最も高いファイル
  • 現在の作業重点と最近の変更点の記載
  • 進行中の意思決定と検討事項の追跡
  • 開発の次なるステップ

例:「現在、バーコードスキャンコンポーネントの実装中。前回のセッションでAPI連携の実装が完了。次のステップはネットワーク障害へのエラーハンドリングの追加。」

architecture.md

  • システムアーキテクチャの記録
  • 重要な技術的意思決定の記録
  • 使用中のデザインパターンの一覧
  • コンポーネント間の関係の説明
  • 主要な実装ルート

例:「ノーマライズされたストア構造を採用し、Reduxにより状態管理を実施。アプリケーションはモジュール型アーキテクチャに従い、API通信、状態管理、UIコンポーネントはそれぞれ別のサービスに配置。」

tech.md

  • 使用中の技術とフレームワークの一覧
  • 開発環境の記述
  • 技術的な制約条件の記録
  • 依存関係とツールの設定の記録
  • ツールの使用パターン

例:「React 18、TypeScript、Firebaseを使用し、Jestによりテストを実施。開発にはNode.js 16以上が必要で、ビルドツールにViteを採用。」

その他のコンテキストファイル

必要に応じて以下の情報を整理するため、追加のファイルを作成することが可能。

  • 複雑な機能のドキュメント
  • 連携仕様書
  • APIドキュメント
  • テスト戦略
  • デプロイ手順

これらの補助ファイルにより、コアファイルに収まらない詳細な情報の整理が実現される。

tasks.md

繰り返し実行されるタスクをドキュメント化するためのオプションファイル

  • 類似したパターンに従うタスクのワークフローの保存
  • 修正が必要なファイルの記録
  • ステップバイステップの手順の記載
  • 重要な注意点と落とし穴のメモ

例:新しいAIモデルのサポート追加、APIエンドポイントの実装、または類似した作業の繰り返しが必要な任意のタスク。

メモリーバンクの使用開始

初回セットアップ

  1. プロジェクト内に.vjsp/rules/memory-bank/フォルダを作成
  2. .vjsp/rules/memory-bank/brief.mdに基本的なプロジェクトの概要を記述
  3. .vjsp/rules/memory-bank-instructions.mdファイルを作成
  4. アーキテクトモードに切り替え
  5. 最適なAIモデルが選択されていることを確認。「軽量モデル」の使用は禁止
  6. VJSPにinitialize memory bankを実行するよう指示
  7. VJSPがプロジェクトを分析し、メモリーバンクファイルを初期化するまで待機
  8. ファイルの内容を検証し、プロジェクトの記述が正確であることを確認。必要に応じてファイルを更新

プロジェクト概要の記述コツ

  • シンプルに始める。詳細レベルや高レベルの記述は自由に選択可能
  • 自身にとって最も重要な点に焦点を当てる
  • VJSPが情報の補完と確認の質問を行ってくれる
  • プロジェクトの進捗に伴い、内容を更新することが可能

有効な概要を作成するためのプロンプト例:

このプロジェクトの主要な目標、コア機能、使用技術、事業上の重要性を強調し、簡潔かつ包括的な説明を作成せよ。次に、この説明をプロジェクトの内容を反映した適切な名前のテキストファイルに記述し、記述の明瞭性と専門性を保証する。簡潔に記述すること。

メモリーバンクの使用方法

コアワークフロー

メモリーバンクの初期化

初期化は、今後のすべてのプロジェクトインタラクションの基礎を築くため、極めて重要なステップである。initialize memory bankコマンドで初期化をリクエストすると、VJSPは以下の処理を実行。

  1. プロジェクトの徹底的な分析を実施。対象は以下の通り:
    • すべてのソースコードファイルとその相互関係
    • 設定ファイルとビルドシステムの設定
    • プロジェクトの構造と組織化パターン
    • ドキュメントとコメント
    • 依存関係と外部連携先
    • テストフレームワークとテストパターン
  2. .vjsp/rules/memory-bankフォルダに包括的なメモリーバンクファイルを作成
  3. プロジェクトに対する理解を詳細にまとめて提示
  4. 生成されたファイルの正確性を検証するよう開発者にリクエスト

⚠️ 重要

初期化後は、生成されたファイルを注意深くレビューし、誤りがあれば修正すること。この段階での誤解や情報の欠落は、今後のすべてのインタラクションに影響を与える。十分な時間をかけた初期化によりVJSPの有効性は大幅に向上するが、手を抜いたまたは不完全な初期化は、VJSPが効果的に支援できる範囲を永久的に制限する。

メモリーバンクの更新

メモリーバンクの更新は、以下の状況で実施される。

  1. 新しいプロジェクトパターンが発見された場合
  2. 大きな変更が実装された後
  3. 開発者が明示的にupdate memory bankをリクエストした場合
  4. コンテキストの明確化が必要な場合

メモリーバンクの更新を実行する際、VJSPは以下の処理を実施。

  1. すべてのプロジェクトファイルをレビュー
  2. 現在の状態をドキュメント化
  3. 洞察とパターンを記録
  4. 必要に応じてすべてのメモリーバンクファイルを更新

update memory bank using information from @/Makefileのようなコマンドを使用することで、特定の情報源に焦点を当てるようVJSPに指示することが可能。

通常のタスク実行

各タスクの開始時、VJSPは以下の処理を実施。

  1. すべてのメモリーバンクファイルを読み込み
  2. レスポンスの先頭に[Memory Bank: Active]を表示
  3. プロジェクトに対する理解を簡潔にまとめて提示
  4. リクエストされたタスクの実行に進む

タスクの終了時、大きな変更が行われた場合、VJSPは「Would you like me to update memory bank to reflect these changes?」(これらの変更を反映するようメモリーバンクを更新しますか?)というフレーズで、メモリーバンクの更新を提案する可能性がある。

タスクワークフローの追加

繰り返し実行するタスクを完了した際、将来の参照のためにドキュメント化することが可能。既存のパターンに従った機能追加などのタスクに特に有効である。

タスクをドキュメント化するには、add taskまたはstore this as a taskコマンドを使用。VJSPは以下の処理を実施。

  1. メモリーバンクフォルダ内のtasks.mdファイルを作成または更新
  2. 現在のコンテキストを含め、タスクをドキュメント化。対象は以下の通り:
    • タスク名と説明
    • 修正が必要なファイルの一覧
    • ステップバイステップのワークフロー
    • 重要な注意点
    • 実装例

新しいタスクを開始する際、VJSPはドキュメント化されたタスクとの一致を確認し、確立されたワークフローに従うことで、ステップの漏れを防止する。

主要なコマンド

  • initialize memory bank - 新規プロジェクトの開始時に使用
  • update memory bank - 現在のタスクのコンテキストドキュメントの全面的な再分析をトリガー。注記:この操作はリソースを大量に消費するため、軽量モデルでは有効性が低下する可能性があるため推奨されない。複数回使用可能で、update memory bank using information from @/Makefileのような特定の指示と組み合わせて使用すると効果的。
  • add task / store this as a task - 繰り返し実行するタスクを将来の参照のためにドキュメント化

ステータスインジケーター

VJSPはステータスインジケーターを使用し、メモリーバンクの状態を明確に伝達する。

  • [Memory Bank: Active] - メモリーバンクファイルの読み込みが正常に完了し、使用中であることを示す
  • [Memory Bank: Missing] - メモリーバンクファイルが見つからない、またはファイルが空であることを示す

これらのインジケーターはVJSPのレスポンス先頭に表示され、メモリーバンクの状態を即座に確認することが可能。

ドキュメントの更新

メモリーバンクの更新は、以下の状況で自動的に実施される。

  • 新しいプロジェクトパターンが発見された場合
  • 大きな変更が実装された後
  • 開発者が明示的にupdate memory bankをリクエストした場合
  • コンテキストの明確化が必要な場合

コンテキストウィンドウの管理

VJSPと作業を行う過程で、コンテキストウィンドウは最終的に容量が埋まる。レスポンス速度の低下や参照の正確性の低下に気づいた場合は、以下の手順を実施。

  1. VJSPにupdate memory bankを指示し、現在の状態をドキュメント化
  2. 新しい対話/タスクを開始
  3. VJSPは新しい対話でメモリーバンクを自動的にアクセス

このプロセスにより、重要なコンテキストを失うことなく、複数のセッション間で継続性が保証される。

不整合の処理

VJSPがメモリーバンクファイル間の不整合を検出した場合、以下の処理を実施。

  1. 真実の情報源としてbrief.mdの情報を優先
  2. 開発者に対し、不整合な点を指摘
  3. 最も信頼性の高い情報を使用して処理を継続

これにより、ドキュメントに不備がある場合でも、VJSPは依然として効果的に作業を行うことが可能。

よくある質問(FAQ)

メモリーバンクファイルはどこに保存されるか?

メモリーバンクファイルは、通常プロジェクトリポジトリの.vjsp/rules/memory-bank/ディレクトリに保存される標準的なMarkdownファイルである。これらのファイルは隠しシステムファイルではなく、プロジェクトドキュメントの一部として設計されている。

メモリーバンクの更新頻度はどのくらいが適切か?

主要なマイルストーンの達成後またはプロジェクトの方向性が変更された後に更新することを推奨。活発な開発が行われている場合、数回のセッションごとに更新すると効果的。すべてのコンテキストが保持されていることを確認したい場合は、update memory bankコマンドを使用する。

メモリーバンクファイルを手動で編集することは可能か?

はい!VJSPが大部分のファイルを管理するが、任意のファイルを手動で編集することが可能。brief.mdファイルは特に開発者が維持するように設計されている。VJSPはすべてのファイルに対する手動編集を尊重する。

メモリーバンクファイルが消失した場合、どのような処理が行われるか?

メモリーバンクファイルが消失した場合、VJSPはレスポンスの先頭に[Memory Bank: Missing]を表示し、メモリーバンクの初期化を提案する。

メモリーバンクはすべてのAIモデルに対応しているか?

メモリーバンクはすべてのAIモデルと互換性があるが、より高性能なモデルはより包括的かつ正確なメモリーバンクファイルを作成する。軽量モデルは、メモリーバンクファイルの分析と更新というリソースを大量に消費するプロセスに対応することが困難な場合がある。

複数のプロジェクトでメモリーバンクを使用することは可能か?

はい!各プロジェクトには、自身の.vjsp/rules/memory-bank/ディレクトリに独自のメモリーバンクが存在する。VJSPは各プロジェクトに対し、正しいメモリーバンクを自動的に使用する。

メモリーバンクはコンテキストウィンドウの容量を消費するか?

はい、メモリーバンクは各セッションの開始時にすべてのファイルを読み込むため、コンテキストウィンドウの一部の容量を消費する。しかし、これは全体的な効率を大幅に向上させるための戦略的なトレードオフである。プロジェクトのコンテキストを事前に読み込むことで、以下のメリットが得られる。

  • 時間の経過とともにより多くのコンテキストを消費する繰り返しの説明を排除
  • 少ないやり取りで生産的な結果に到達
  • セッション全体を通して一貫した理解を維持

テストの結果、メモリーバンクは初期段階でより多くのトークンを消費するものの、結果を実現するために必要な総インタラクション数を大幅に削減することが確認されている。これは、説明に費やす時間が減り、開発に費やす時間が増えることを意味する。

ベストプラクティス

使用開始時

  • 基本的なプロジェクトの概要から始め、構造を段階的に発展させる
  • 初期構造の作成をVJSPに支援させる
  • ワークフローに合わせて必要に応じてファイルをレビュー・調整する
  • 初期化後、生成されたファイルの正確性を検証する

継続的な作業時

  • 作業の進行に伴い、パターンが自然に出現することを許容
  • ドキュメントの更新を強制しない。自然な流れで実施されるべき
  • プロセスを信頼する。価値は時間の経過とともに複合的に増加する
  • セッション開始時のコンテキスト確認に注意を払う
  • ステータスインジケーターを使用し、メモリーバンクがアクティブであることを確認する

ドキュメントのワークフロー

  • brief.mdを基礎とする
  • context.mdの更新頻度が最も高い
  • すべてのファイルが連携し、プロジェクトの情報を維持する
  • 主要なマイルストーンの達成後またはプロジェクトの方向性が変更された後に更新する

メモリーバンクのパフォーマンス最適化

  • メモリーバンクファイルを簡潔かつ重点的に記述する
  • 詳細なドキュメントには補助ファイルを使用する
  • 頻繁に更新するが、過度な更新は避ける
  • 特定の側面に焦点を当てる際は、特定の更新コマンドを使用する

留意点

メモリーバンクは、VJSPが過去の作業と連携するための唯一のリンクである。その有効性は、すべてのインタラクションにおいて明確かつ正確なドキュメントを維持し、コンテキストの保持を確認することに完全に依存する。レスポンスの先頭に[Memory Bank: Active]が表示されている場合、VJSPがプロジェクトに対して包括的な理解を有していることを確信することができる。