/ ディレクトリ / プレイグラウンド / drift
● コミュニティ dadbodgeoff ⚡ 即起動

drift

作者 dadbodgeoff · dadbodgeoff/drift

コードベースの規約や過去の意思決定をClaudeに長期記憶させましょう — 今日のセッションだけでなく、すべてのセッションにわたって。

driftはコードベースインテリジェンスMCPサーバーです。リポジトリをスキャンし、パターンや規約(命名規則、エラーハンドリング、レイヤー構成など)を抽出し、アーキテクチャ上の意思決定をセッションをまたいで記憶するため、新しいチャットのたびにチームのコンテキストが引き継がれます。オフラインCLIとしても動作します。

なぜ使うのか

主な機能

ライブデモ

実際の動作

drift.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "drift": {
      "command": "uvx",
      "args": [
        "drift"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "drift": {
      "command": "uvx",
      "args": [
        "drift"
      ],
      "_inferred": true
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "drift": {
      "command": "uvx",
      "args": [
        "drift"
      ],
      "_inferred": true
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "drift": {
      "command": "uvx",
      "args": [
        "drift"
      ],
      "_inferred": true
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "drift",
      "command": "uvx",
      "args": [
        "drift"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "drift": {
      "command": {
        "path": "uvx",
        "args": [
          "drift"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add drift -- uvx drift

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: drift

AIアシスタントにコードベースの規約をオンボーディングする

👤 Claudeに「うちではクラスは使わないんだけど」と何度も言うのに疲れたテックリード ⏱ ~20 min beginner

使うタイミング: 新しいリポジトリでの最初のセッション、または規約が変わるような大規模リファクタリングの後。

前提条件
  • driftがインストール済みであること — uvx driftまたはグローバルインストール
フロー
  1. 初回スキャンを実行する
    Run drift scan on this repo. Tell me what patterns you detected around error handling, module structure, and naming.✓ コピーしました
    → 具体例を含む規約サマリー
  2. 保存したい意思決定を記録する
    Record these team decisions: we use Result<T,E> not exceptions, one controller per feature folder, snake_case for file names. Tag them 'conventions'.✓ コピーしました
    → 確認完了。エントリは後からクエリ可能
  3. 将来のセッションで反映されることを確認する
    In a new session: what conventions does this repo follow?✓ コピーしました
    → Claudeが記録した意思決定を正しく復唱する

結果: 今後のすべてのAIセッションがチームの規約をロードした状態で始まります — 修正の手間が減り、より生産的なチャットが実現します。

注意点
  • パターンは既存コードから推論されるため、悪いコードも含まれる — 初回スキャン結果をレビューし、脱却しようとしている技術的負債に相当する「規約」は削除する
  • 更新を忘れると意思決定メモリが現実と乖離する — メモリエントリをドキュメントと同様に扱い、四半期ごとにレビューする
組み合わせ: filesystem · github

PRレビュー時にチーム規約を適用する

👤 コードレビュアー ⏱ ~10 min intermediate

使うタイミング: PRを承認する前に、チームのパターンが暗黙的に破られていないか確認する。

フロー
  1. 対象PRの差分をロードする
    Load the diff for PR #213 and compare it against the conventions drift has recorded.✓ コピーしました
    → 規約との一致・不一致のリスト
  2. 逸脱箇所にレビューコメントを下書きする
    For each deviation, draft a polite review comment citing the convention.✓ コピーしました
    → 指摘ごとのコメントテキスト

結果: レビュアーが暗黙のルールをすべて覚えていなくても、一貫性のあるPRレビューが可能になります。

注意点
  • 新しいパターンは意図的な場合もある — 教条的にならないこと — 著者が「新しいパターン」として意思決定を記録し、将来のPRに反映できるようにする
組み合わせ: github

軽量なアーキテクチャ意思決定ログを管理する

👤 なぜその選択をしたのかを忘れがちなすべてのチーム ⏱ ~5 min beginner

使うタイミング: 誰も更新しない正式なADRフォルダの代わりに。

フロー
  1. 決定時に記録する
    Record decision: we picked Postgres over DynamoDB because of ad-hoc query needs. Date today. Tags: db, architecture.✓ コピーしました
    → IDとともにエントリが保存される
  2. 後で同じ疑問が出たときにクエリする
    Why did we pick Postgres?✓ コピーしました
    → 保存された意思決定が表示される

結果: メンバーの入れ替わりにも耐える組織的なナレッジが残ります。

組み合わせ

他のMCPと組み合わせて10倍の力を

drift + filesystem

driftが規約を把握し、filesystemが編集を実行する

Using the conventions drift has recorded, refactor src/api/users.ts to match. Use filesystem to apply edits.✓ コピーしました
drift + github

受信したPRを記録済みの規約と照合してレビューする

Fetch PR #88, check it against drift conventions, draft review comments for any drift.✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
scan_codebase path: str 最初のセッション時、または大規模リファクタリング後 free; CPU-bound
list_conventions tag?: str セッション開始時にコンテキストをロードする free
record_decision title: str, body: str, tags?: str[] チームが自明でない事柄について合意したとき free
query_memory query: str Claudeが過去のコンテキストを思い出す必要があるとき free (local embeddings)
detect_pattern area: str 「普段ここではXをどうやっている?」というアドホックな質問時 free

コストと制限

運用コスト

APIクォータ
なし — 完全にローカル動作
呼び出しあたりのトークン
規約サマリー:約1kトークン。フルスキャンのダンプは10k以上になる場合あり
金額
無料かつオープンソース
ヒント
セッション開始時にはサマリー規約のみロードし、フルスキャンはロードしない。フルスキャンはリファクタリング時のみ。

セキュリティ

権限、シークレット、影響範囲

認証情報の保管: ローカルのSQLiteまたはファイルシステムのみ
データ送信先: デフォルトではデータ送信なし — 完全にオフラインで動作

トラブルシューティング

よくあるエラーと対処法

大規模モノレポでスキャンがハングする

.driftignore.gitignoreと同じ構文)で生成ファイルやvendorディレクトリを除外してください。

確認: drift scan --dry-run
メモリクエリが関連する結果を返さない

ローカルエンベディングインデックスを再構築してください。新しい意思決定はインデックスされるまで検索結果に表示されません。

確認: drift reindex
Claudeが記録された規約を使用しない

クライアントコンフィグでMCPを最初に配置し、すべてのセッション開始時にコンテキストがロードされるようにしてください。

確認: claude mcp list

代替案

drift 他との比較

代替案代わりに使う場面トレードオフ
MARM-Systemsコード固有ではない汎用的なクロスセッションメモリが必要な場合コード認識が弱い。より汎用的なメモ向き
llm-context.pyメモリではなくルールベースのコードバンドリングが必要な場合永続化レイヤーなし
Plain ADRs in the repodocs-as-codeアプローチを好む場合AIが毎回読み込む必要があり、トークンコストが高くなる

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る