Lenspr について
Lenspr はコーディングエージェント向けにローカルのコード依存グラフを構築し、編集前の関係確認と変更影響の評価を支援します。Python と TypeScript/JavaScript に対応し、影響分析、コード健全性、アーキテクチャ検査のツールを備えています。
主な機能
- 01言語をまたぐ依存グラフ
- 02変更影響の分析と検証
- 03ソース、呼び出し元・先、テストの一括確認
- 04デッドコードと健全性の検査
- 05アーキテクチャルールの適用
- 06ファイル保存時のグラフ自動更新
活用シーン
- 01関数変更による影響範囲を事前に評価
- 02フロントエンドの API 呼び出しからバックエンドルートを追跡
- 03デッドコードの検出とコードベースの健全性確認
- 04コード編集時にアーキテクチャルールを確認
MCP 対応
Claude Code や Cursor を含む MCP クライアントに、60 種類以上のコードインテリジェンスツールを公開します。グラフはローカルで動作し、ソースから再構築されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
AI コーディングエージェント向けのコードインテリジェンスです。AI は変更を加える前に依存関係を把握できます。
アルファ版(0.1.x)— 実際のプロジェクトで動作し、作者が毎日使用しています。まだ粗削りな部分があります。
AI アシスタントは一度に1つのファイルだけを編集します。依存関係は見えていません。grep して読み、推測し、3つ先のファイルまで壊してしまいます。
LensPR はコードベースの依存関係グラフを構築し、AI が変更を加える前に構造を理解できるようにします。
クイックスタート
Python 3.11 以降、macOS または Linux が必要です。TypeScript/JS プロジェクトでは、Node.js 18 以降も必要です。
pip install 'lenspr[all]'
lenspr init .
lenspr setup .
IDE を再起動すれば完了です。AI が lens_* ツールを使えるようになります。
.lens/を.gitignoreに追加してください。グラフはローカルに保存され、ソースから再構築されます。
できること
「この関数に依存しているものは?」
1回の呼び出しで、ソースコード、その関数を呼び出すコード、関数が呼び出すコード、関連するテストがすべて返されます。
> lens_context("auth.login_handler")
source: 42 lines
callers: auth_routes.create_routes, test_auth.test_login_success
callees: db.get_user, crypto.verify_password, jwt.create_token
tests: test_login_success, test_login_wrong_password
LensPR がなければ、AI は grep/read を5〜7回呼び出しても、見落としが残ります。LensPR があれば、1回の呼び出しですべて把握できます。
「これを変更すると何が壊れる?」
変更を加える前に、AI は影響範囲を確認できます。
> lens_check_impact("models.User")
severity: CRITICAL
direct_dependents: 15
indirect_dependents: 23
affected_modules: auth, payments, notifications
tests_covering: 3
AI は警告を出したり、アプローチを変えたり、確認を求めたりします。もう見当違いの編集はありません。
「このコードベースの健全性は?」
> lens_vibecheck()
score: 86/100 (B)
test_coverage: 17/25 — 67% functions tested
dead_code: 20/20 — 0% dead code
circular_imports: 15/15 — 0 cycles
architecture: 12/15 — 1 violation
documentation: 8/10 — 81% documented
graph_confidence: 14/15 — 94% edges resolved
コードベースが時間の経過とともに改善しているか、劣化しているかを追跡できます。
言語をまたいだ可視性
LensPR はフロントエンドとバックエンドを1つのグラフにつなぎます。
LoginModal.tsx → fetch("/api/auth/login")
↓ CALLS_API
Backend: @router.post("/login") → login_handler()
→ db.query(User) [reads: users]
→ verify_password()
→ create_jwt_token()
データベーステーブル、Docker サービス、環境変数、CI/CD ワークフロー、SQL マイグレーションも追跡できます。
対応環境
| IDE | セットアップ |
|---|---|
| Claude Code | lenspr setup . — 自動 |
| Cursor | .mcp.json を .cursor/mcp.json にコピー |
| 任意の MCP クライアント | lenspr serve <path> |
言語: Python(Jedi/Pyright により95%以上の解決率)、TypeScript/JavaScript(tree-sitter + TS Compiler API により85〜95%)。
インフラストラクチャ: .sql ファイル、Dockerfile、docker-compose.yml、GitHub Actions ワークフロー、.env ファイルをすべて解析し、同じグラフに取り込みます。
すべてローカルで動作します。コードがマシンの外に出ることはありません。
主な機能
| 影響分析 | 変更を加える前に重大度(LOW → CRITICAL)を確認 |
| ワンコールでコンテキスト取得 | ソース、呼び出し元、呼び出し先、テストを1回のリクエストで取得 |
| クロスランゲージ | フロントエンドのHTTPから、バックエンドのルート、DBテーブル、Docker、環境変数、CI/CDまで対応 |
| ピンポイント編集 | 関数内の対象箇所を検索・置換し、ファイル全体を書き換えません |
| デッドコード | 到達不能な関数を検出(Django、FastAPI、Celeryのエントリーポイント) |
| アーキテクチャルール | レイヤーの境界を適用し、変更を反映する前に違反を警告 |
| 関数ごとのGit情報 | 関数レベルでBlame、履歴、コミット範囲を確認 |
| セッションメモリ | コンテキストがリセットされても、AIが中断したところから作業を再開 |
| 自動同期 | ファイルウォッチャーが保存のたびにグラフを更新 |
| 健全性スコア | 6つの側面を0〜100で評価し、品質の推移を追跡 |
60以上のツールを12のグループに分類しています。lenspr toolsで必要なものだけを有効にできます。
カテゴリ別の全ツール
ナビゲーションと検索(8): lens_context、lens_get_node、lens_search、lens_grep、lens_find_usages、lens_get_structure、lens_list_nodes、lens_get_connections
変更(6): lens_update_node、lens_patch_node、lens_add_node、lens_delete_node、lens_rename、lens_batch
分析(6): lens_check_impact、lens_validate_change、lens_health、lens_dead_code、lens_dependencies、lens_diff
品質(7): lens_vibecheck、lens_nfr_check、lens_test_coverage、lens_security_scan、lens_dep_audit、lens_fix_plan、lens_generate_test_skeleton
アーキテクチャ(9): lens_arch_rule_add、lens_arch_rule_list、lens_arch_rule_delete、lens_arch_check、lens_class_metrics、lens_project_metrics、lens_largest_classes、lens_compare_classes、lens_components
Git(4): lens_blame、lens_node_history、lens_commit_scope、lens_recent_changes
インフラストラクチャ(5): lens_api_map、lens_db_map、lens_env_map、lens_ffi_map、lens_infra_map
テストとトレース(3): lens_run_tests、lens_trace、lens_trace_stats
注釈(5): lens_annotate、lens_save_annotation、lens_batch_save_annotations、lens_annotate_batch、lens_annotation_stats
セッション(4): lens_session_write、lens_session_read、lens_session_handoff、lens_resume
時間分析(2): lens_hotspots、lens_node_timeline
説明(1): lens_explain
既知の制限事項
- Windows — サポート対象外です。macOSとLinuxのみ対応しています。
self.method()の呼び出し — 静的パーサーでは、インスタンスメソッドのディスパッチを完全に解決できません。回避策:lens_trace(Python 3.12以降)を使うと、実行時に解決できます。- Go、Rust、Java — まだサポートされていません。コントリビューター向けのパーサーインターフェースは用意されています。
- 動的コード —
getattr、eval、動的インポートは静的には追跡できません。
コントリビューション
試してみてください。問題があれば教えてください。
- バグ報告 — 「動きません」という報告だけでも役に立ちます
- 言語パーサー — Go、Rust、Java(BaseParserインターフェースは用意されています)
- アイデア — issueを作成
ライセンス
MIT
AIがコードを壊し続けていたので作りました。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。