11# grepnavi
22
3+ [ ![ CI] ( https://github.com/Taka-S-dev/grepnavi/actions/workflows/test.yml/badge.svg )] ( https://github.com/Taka-S-dev/grepnavi/actions/workflows/test.yml )
4+
35コードベース調査ツール。ripgrep の高速検索 + Monaco エディタ + 調査グラフで、** 「どこを調べたか」を記録しながらコードを読み解く** ためのツールです。
46
57大きなコードベース(Linux カーネル、OpenSSL、curl など)を読む際に、検索結果をグラフに積み上げながら構造を把握していくことを想定しています。
4547- ** ドラッグ&ドロップ** — ノードを別ノードにドロップして親子関係を変更。drop-before / drop-after のライン表示で挿入位置を確認
4648- ** ⠿ ハンドル** — ノード行の左端ハンドルを左右にドラッグしてインデントレベル(階層)を変更
4749- ** キーボードでの移動** — Shift+Alt+Arrow キーで選択ノードを移動(↑↓ で兄弟間、← でレベルアップ、→ でレベルダウン)
50+ - ** ↑ / ↓ で選択変更** — ツリービュー上でフォーカス外(テキスト入力・エディタ以外)のとき、Up/Down 矢印キーで選択ノードを切り替え
51+
52+ ### アドオン
53+
54+ アドオンは ` static/addons/<name>/addon.js ` + ` addon.css ` で実装されており、` static/addons/addons.js ` の ` ADDONS ` 配列に名前を列挙するだけで有効化できます。
55+
56+ #### コールツリー
57+
58+ 関数の呼び出し元(callers)/ 呼び出し先(callees)をツリー形式で表示します。
59+
60+ - エディタ上の関数名を選択して右クリック or ツールバーの「Call Tree」ボタンで起動
61+ - 入力欄に関数名を入力して実行(Enter または Go)
62+ - ` callers ` / ` callees ` タブで方向を切り替え
63+ - ノードをクリックしてソースへジャンプ。` ▶ ` で再帰的に展開
64+ - ` ?mode=panel ` 時はサイドパネルのタブとして自己登録
65+
66+ #### C インクルード依存グラフ
67+
68+ ` #include ` の依存関係を D3.js フォースグラフで可視化します。
69+
70+ - エディタで C/C++ ファイルを開くと起点ファイルが自動セット
71+ - ツールバーの「Include Graph」ボタンでパネルを開き「Analyze」で解析開始
72+ - ノードをクリックして上流・下流を展開。Ctrl+クリック or ダブルクリックでエディタに表示
73+ - 「Collapse All」でグラフを折りたたみ
4874
4975### プロジェクト
5076
6490
6591## インストール・起動
6692
93+ ### バイナリをダウンロード(推奨)
94+
95+ [ GitHub Releases] ( https://github.com/Taka-S-dev/grepnavi/releases ) からアーカイブをダウンロードして展開してください。Go のインストール不要です。
96+
97+ ```
98+ grepnavi/
99+ ├── grepnavi.exe ← 実行ファイル
100+ └── static/ ← 静的ファイル(exe と同じディレクトリに必須)
101+ ```
102+
103+ > ** 注意:** ` static/ ` フォルダを相対パスで参照するため、exe 単体では動作しません。アーカイブを展開したディレクトリごと配置してください。
104+
105+ ### ソースからビルド
106+
67107``` bash
68108# ビルド
69109go build .
70110# → Windows: grepnavi.exe Mac/Linux: grepnavi が生成されます
111+ ```
71112
113+ ### 起動
114+
115+ ``` bash
72116# 起動(カレントディレクトリを検索ルートとして使用)
73117.\g repnavi.exe # Windows
74118./grepnavi # Mac/Linux
@@ -95,7 +139,12 @@ go build .
95139
96140### Monaco Editor
97141
98- [ Releases] ( https://github.com/microsoft/monaco-editor/releases ) から ` monaco-editor-x.x.x.tgz ` をダウンロードし、` min/vs/ ` を ` static/vs/ ` に配置。
142+ プロジェクトルートで以下を実行:
143+
144+ ``` bash
145+ npm install monaco-editor@0.52.2
146+ cp -r node_modules/monaco-editor/min/vs static/vs/
147+ ```
99148
100149` static/index.html ` を変更:
101150``` js
@@ -143,6 +192,7 @@ var require = {paths: {'vs': '/vs'}};
143192| ` Ctrl+Z ` | 元に戻す |
144193| ` Ctrl+Shift+N ` | 新しいウィンドウを開く |
145194| ` F12 ` / ` Ctrl+クリック ` | 定義ジャンプ |
195+ | ` ↑ ` / ` ↓ ` | ツリービューで選択ノードを変更 |
146196| ` Shift+Alt+↑ ` / ` ↓ ` | 選択ノードを上 / 下に移動 |
147197| ` Shift+Alt+← ` / ` → ` | 選択ノードのレベルを上げる / 下げる |
148198| ` ? ` | キーボードショートカット一覧を表示 |
@@ -244,6 +294,9 @@ grepnavi/
244294│ ├── ripgrep.go # ripgrep 呼び出し・JSON パース・SSE ストリーミング
245295│ ├── definition.go # 定義ジャンプ(ctags 風シンボル解析)
246296│ ├── symbols.go # シンボル抽出
297+ │ ├── hover.go # ホバープレビュー用スニペット取得
298+ │ ├── calltree.go # callers / callees 解析
299+ │ ├── include.go # C インクルード依存グラフ解析
247300│ ├── ifdef.go # #ifdef 条件コンパイル解析
248301│ └── ifdef_eval.go # #ifdef 条件評価
249302└── static/
@@ -255,8 +308,13 @@ grepnavi/
255308 │ ├── search.js # 検索・フィルタ・結果表示
256309 │ ├── graph.js # グラフ/ツリー操作・D3.js・詳細パネル・D&D
257310 │ ├── editor.js # Monaco エディタ・fzf・ナビ履歴・行メモ・#ifdef
311+ │ ├── include-graph.js # C インクルード依存グラフ(D3.js)
258312 │ ├── project.js # プロジェクト保存/開く・ルート設定・glob履歴・リサイザー
259313 │ └── app.js # ブートストラップ・グローバルイベント登録
314+ ├── addons/
315+ │ ├── addons.js # アドオン設定(有効化リスト)
316+ │ ├── c-include/ # C インクルード依存グラフ アドオン
317+ │ └── call-tree/ # コールツリー アドオン
260318 └── css/
261319 └── main.css
262320```
@@ -284,6 +342,12 @@ grepnavi/
284342| ` GET ` | ` /api/open ` | ファイルの内容取得 |
285343| ` GET ` | ` /api/snippet ` | スニペット取得 |
286344| ` GET ` | ` /api/definition ` | 定義ジャンプ先の検索 |
345+ | ` GET ` | ` /api/hover ` | ホバープレビュー用スニペット取得 |
346+ | ` GET ` | ` /api/callers ` | 関数の呼び出し元を検索 |
347+ | ` GET ` | ` /api/callees ` | 関数の呼び出し先を検索 |
348+ | ` GET ` | ` /api/include-graph ` | ファイルのインクルード依存グラフ取得 |
349+ | ` GET ` | ` /api/include-file ` | ファイルが ` #include ` しているファイル一覧 |
350+ | ` GET ` | ` /api/include-by ` | ファイルを ` #include ` しているファイル一覧 |
287351
288352---
289353
0 commit comments