ロールバック

AIタスク中にワークスペースのファイルを自動的にバージョン管理します。AIの提案を安全に試しながら変更を加えられ、不要な変更からも簡単に復元できます。

ロールバックとは

ロールバックを使用すると:

  • AIが提案した変更を安全に試すことができる
  • 不要な変更から簡単に復元できる
  • 異なる実装アプローチを比較できる
  • 作業を失うことなく以前のプロジェクト状態に戻れる

ロールバックの仕組み

Bobはタスクの実行中にファイルのスナップショットを取得します。これはメインのバージョン管理システムとは独立しています。スナップショットはファイルの変更前に自動的に作成され、不要な変更をいつでも元に戻せるよう保証します。

スナップショットはタスクの開始時とファイル変更前に記録されます。

ロールバックの使い方

ロールバックはチャットインターフェースを通じてワークフローに直接統合され、チャット履歴に直接表示されます。スナップショットはファイルの変更前に作成されるため、どの変更も簡単に取り消せます。

各スナップショットには、チャット履歴とロールバックメニューの両方で常に利用できる2つの主要機能があります:

差分を表示する

タスク内で変更されたファイルを確認するには:

  1. BobがファイルをI編集した後、変更されたファイルビューが折りたたまれた状態で表示されます。
  2. クリックして展開できます。
  3. ビューで差分を確認します:
    • すべて表示を使用してタスク内のすべての変更ファイルを表示する
    • 特定のファイルをクリックして変更内容を確認できる

スナップショットを復元する

復元オプションは、変更が検出されているかどうかに関わらず、ロールバックボタンとダイアログに常に表示されます。これにより、いつでも任意の状態に戻れることが保証されます。

プロジェクトを以前の状態に復元するには:

  1. 任意のユーザーメッセージにカーソルを合わせ、ロールバックボタンを使用します。これにより、変更されたファイルがそのメッセージ前の状態に復元されます。
  2. 変更されたファイルビューの個別ファイルのロールバックボタンをクリックします。これにより、ファイルを元に戻したことがBobに通知されます。

制限事項

  • スコープ: ロールバックはアクティブなBobタスク中に行われた変更のみをキャプチャします。
  • 外部変更: タスク外での変更(手動編集、他のツール)は含まれません。
  • 大きなファイル: 非常に大きなバイナリファイルはパフォーマンスに影響する可能性があります。
  • 未保存の作業: 復元により、ワークスペース内の未保存の変更が上書きされます。
  • タイミング: スナップショットは変更が適用される前に作成され、すべての変更に対するセーフティネットを提供します。
  • メモリ使用量: スナップショットは時間とともに蓄積し、特に大きなプロジェクトや長時間実行されるタスクでは大量のメモリを消費する可能性があります。古いスナップショットを持つタスクが多数ある場合は、定期的にクリアしてメモリを解放することを検討してください。古いタスクの会話を削除することで実行できます。これにより関連するスナップショットも削除されます。

技術的な実装

ロールバックのアーキテクチャ

ロールバックシステムは以下で構成されます:

  1. ロールバックサービス: 以下を通じてファイル操作と状態管理を処理します:
    • スナップショットの作成と保存
    • 差分計算
    • 状態の復元
  2. UIコンポーネント: チャットに表示されるインターフェース要素で、ロールバックとのインタラクションを可能にします。

復元プロセス

復元が実行されると、Bobは:

  • 特定のタスク内の指定された時刻へのリセットを完了します。
  • 内部のロールバック追跡状態を更新します。

ストレージタイプ

ロールバックはタスクスコープであり、各スナップショットは単一のタスクに固有です。

差分計算

ロールバックの比較はGitの基盤となる差分機能を使用して、構造化されたファイル差分を生成します:

  • 変更されたファイルは行ごとの変更を表示します。
  • バイナリファイルは適切に検出・処理されます。
  • 名前変更の検出は制限される場合があります;差分はスナップショット間のファイルコンテンツの変更に焦点を当てます。
  • ファイルの作成と削除は明確に識別されます。

ファイルの除外と無視パターン

ロールバックシステムはインテリジェントなファイル除外を使用して、関連ファイルのみを追跡します。

組み込みの除外

システムには以下を自動的に無視する組み込みの除外パターンがあります:

  • ビルド成果物と依存関係ディレクトリ(node_modules/dist/build/)。
  • メディアファイルとバイナリアセット(画像、動画、音声)。
  • キャッシュと一時ファイル(.cache/.tmp/.bak)。
  • 機密情報を含む設定ファイル(.env)。
  • 大きなデータファイル(アーカイブ、実行ファイル、バイナリ)。
  • データベースファイルとログ。

.gitignoreのサポート

ロールバックシステムはワークスペース内の.gitignoreパターンを尊重します:

  • .gitignoreで除外されたファイルはスナップショットの作成をトリガーしません。
  • 除外されたファイルはロールバックの差分に表示されません。
  • ファイル変更のステージング時に標準のGit無視ルールが適用されます。

.bobignoreの動作

.bobignoreファイル(AIのファイルへのアクセスを制御する)はロールバック追跡とは独立しています:

  • .bobignoreによって除外されているが.gitignoreには除外されていないファイルは、依然としてロールバックによってキャプチャされます。
  • AIがアクセスできないファイルへの変更も、ロールバックを通じて復元できます。

この分離は意図的なものです。.bobignoreはAIがアクセスできるファイルを制限するものであり、バージョン履歴のために追跡すべきファイルを制限するものではありません。

このトピックはいかがですか?